mean sd 0.025quant 0.5quant 0.975quant mode kld
mu.y -0.492 0.160 -0.806 -0.492 -0.179 -0.492 0
cov.y.edu 0.110 0.013 0.084 0.110 0.135 0.110 0
mu.z -1.129 0.264 -1.650 -1.128 -0.615 -1.127 0
cov.z.edu 0.133 0.022 0.089 0.133 0.177 0.133 0
cov.z.huswage -0.043 0.012 -0.067 -0.043 -0.019 -0.043 0
#############################################################################################
## A simple example
R.HeckMle <- heckit(
selection = lfp ~ educ + huswage,
outcome = lwage ~ educ,
method = "ml",
data = data)
summary(R.HeckMle)
###############INLA ####################################
library(INLA)
n <-nrow(data)
### covariates and eandorm effect data
#outcome eq
cov.y.edu<-data$edu
#selection eq
cov.z.edu<-data$edu
cov.z.huswage <-data$huswage
# Two r.e. (binomial and gaussian)
u <- c(1:n, rep(NA, n)) # binomial data
v <- c(rep(NA, n), n+(1:n)) # gaussian >0 data
#two likelihood data columns
Y <- matrix(NA,n+n,2)
Y[1:n,1] <- data$lfp
Y[n+1:n,2] <- data$lwage
#constants
mu.z <- c(rep(1,n),rep(NA,n))
mu.y <- c(rep(NA,n),rep(1,n))
#data preparation
ldat = list(
Y=Y,
mu.z=mu.z,
mu.y=mu.y,
# selection
cov.z.edu= c(
cov.z.edu, rep(NA,n)),
cov.z.huswage= c(cov.z.huswage, rep(NA,n)),
#outcome
cov.y.edu = c(rep(NA, n),
cov.y.edu),
u=u,
v=v)
#Mle Heckman INLA ?
for.Heck.inla = Y ~ 0+mu.y+
cov.y.edu +
mu.z +
cov.z.edu + cov.z.huswage +
f(u, model="iidkd", order=2, n=2*n)+f(v, copy="u")
heckman.inla <- inla(for.Heck.inla, data=ldat,
family=c("binomial", "gaussian"),
control.inla = list(int.strategy = "eb"),
control.family=list(list(control.link = list(model = "probit")),
list(control.link = list(model = "identity"))) )
summary(heckman.inla)
Model <-heckman.inla
# random effects summary
MC_samples <- inla.iidkd.sample(10^4, Model, "u", return.cov=T)
VarCov <- matrix(unlist(MC_samples), nrow = 2^2)
VarCovMeans = matrix(rowMeans(VarCov),2,2);round(VarCovMeans,4) # mean of variance-covariance
VarCovSD = matrix(apply(VarCov, 1, sd),2,2);round(VarCovSD,2) # sd
VarCov025 = matrix(apply(VarCov, 1, function(x) quantile(x, 0.025)),2,2);round(VarCov025,2) # quantiles
VarCov05 = matrix(apply(VarCov, 1, function(x) quantile(x, 0.5)),2,2);round(VarCov05,2)
VarCov975 = matrix(apply(VarCov, 1, function(x) quantile(x, 0.975)),2,2);round(VarCov975,2)