library(INLA)
library(inlabru)
Example in inlabru
inla.setOption(num.threads = "1:1")
We here show how to fit the measurement error and missing data model in inlabru
. The inlabru
code is written by Sara Martino, and commented by Emma Skarstein.
Loading the data
For this demonstration we will use the simulated data from the Simulation example. Just to refresh: this is a situation where we have one covariate (\(\boldsymbol{x}\)) that has both classical error, Berkson error and missing data. We also observe another covariate (\(\boldsymbol{z}\)) that has no error.
<- read.csv("data/simulated_data.csv")
data <- nrow(data) n
Priors
We use the exact same priors as in the original simulation study.
# Priors for model of interest coefficients
= c(0, 1/1000) # N(0, 10^3)
prior.beta
# Priors for exposure model coefficients
<- c(0, 1/10000) # N(0, 10^4)
prior.alpha
# Priors for y, measurement error and true x-value precision
<- c(10, 9) # Gamma(10, 9)
prior.prec.y <- c(10, 9) # Gamma(10, 9)
prior.prec.u_b <- c(10, 9) # Gamma(10, 9)
prior.prec.u_c <- c(10, 9) # Gamma(10, 9)
prior.prec.r
# Initial values
<- 1
prec.y <- 1
prec.u_b <- 1
prec.u_c <- 1 prec.r
Specifying the data
# Regression model of interest
<- data.frame(y = data$y, z = data$z, weight.x = 1, weight.r = 1, r = 1:n)
data_moi
# Berkson ME model
<- data.frame(zero = 0, weight.x = -1, weight.r = 1, r = 1:n)
data_berkson
# Classical ME model
<- data.frame(w = data$w, weight.x = 1, weight.r = 1, r = 1:n)
data_classical
# Imputation model
<- data.frame(zero = 0, z = data$z, weight.x = 1, weight.r = -1, r = 1:n) data_imputation
Formulas
<- ~ Intercept(1, model = "linear", prec.linear = prior.beta[2]) +
cmp_new beta_z(main = z, model = "linear", prec.linear = prior.beta[2]) +
x_eff(r, weight.x, model = "iid", hyper = list(prec = list(initial = -15, fixed=TRUE))) +
x_eff_copy(r, copy="x_eff", hyper = list(beta = list(param = prior.beta, fixed=FALSE))) +
r_eff(r, weight.r, model = "iid", hyper = list(prec = list(initial = -15, fixed=TRUE))) +
alpha_0(main = 1, model = "linear", prec.linear = prior.alpha[2]) +
alpha_z(main = z, model = "linear", prec.linear = prior.alpha[2])
<- like(formula = y ~ .,
lik_moi family = "gaussian",
include = c("Intercept", "beta_z", "x_eff_copy"),
control.family = list(
hyper = list(prec = list(initial = log(prec.y),
param = prior.prec.y,
fixed = FALSE))),
data = data_moi)
<- like(formula = zero ~ .,
lik_berkson family = "gaussian",
include = c("x_eff", "r_eff"),
control.family = list(
hyper = list(prec = list(initial = log(prec.u_b),
param = prior.prec.u_b,
fixed = FALSE))),
data = data_berkson)
<- like(formula = w ~ .,
lik_classical family = "gaussian",
include = c("r_eff"),
control.family = list(
hyper = list(prec = list(initial = log(prec.u_c),
param = prior.prec.u_c,
fixed = FALSE))),
data = data_classical)
<- like(formula = zero ~ .,
lik_imputation family = "gaussian",
include = c("alpha_0", "alpha_z","r_eff"),
control.family = list(
hyper = list(prec = list(initial = log(prec.r),
param = prior.prec.r,
fixed = FALSE))),
data = data_imputation)
Fitting the model
set.seed(1)
bru_options_set(bru_verbose = 1)
<- bru(components = cmp_new,
fit
lik_moi,
lik_berkson,
lik_classical,
lik_imputation,options = list(verbose = F,
bru_max_iter = 20,
inla.mode = "experimental"))
$summary.fixed fit
mean sd 0.025quant 0.5quant 0.975quant mode
Intercept 0.8705529 0.21579985 0.4541298 0.8682062 1.289494 NA
beta_z 1.8088724 0.38738755 1.0837732 1.8034426 2.527867 NA
alpha_0 1.0053028 0.04731152 0.9125007 1.0053013 1.098114 NA
alpha_z 1.9876737 0.04890610 1.8917558 1.9876680 2.083624 NA
kld
Intercept 9.468548e-08
beta_z 1.200887e-04
alpha_0 2.479969e-13
alpha_z 1.624621e-12
$summary.hyperpar fit
mean sd 0.025quant
Precision for the Gaussian observations 1.129095 0.3352055 0.5918354
Precision for the Gaussian observations[2] 1.149144 0.3118757 0.6520526
Precision for the Gaussian observations[3] 1.097736 0.1285802 0.8670084
Precision for the Gaussian observations[4] 1.025116 0.1185145 0.8099070
Beta for x_eff_copy 2.078488 0.1895427 1.7012042
0.5quant 0.975quant mode
Precision for the Gaussian observations 1.089183 1.901142 NA
Precision for the Gaussian observations[2] 1.110314 1.873069 NA
Precision for the Gaussian observations[3] 1.089934 1.373323 NA
Precision for the Gaussian observations[4] 1.018916 1.276604 NA
Beta for x_eff_copy 2.079849 2.448850 NA