Dear all,
I'm trying to specify the following models from lme to INLA. So far, as I understand this first models have the correct INLA formulation (and they give almost exact results):
For each model I have first the lme formulation and then the formula for INLA:
# random intercept
m1 = lmer(dr ~ st.ele + (1|poId), data = sdat)
form = dr ~ st.ele + f(poId, model = 'iid')
#organize data
n.loc = max(sdat$poId)
sdat$i.int = sdat$poId
sdat$j.int = sdat$poId + n.loc
sdat$k.int = sdat$j.int + n.loc
# uncorrelated random intercept and random slope
m2 = lmer(dr ~ st.ele + (1|poId) + (0 + st.ele|poId), data = sdat)
form = dr ~ st.ele + f(i.int, model = 'iid') + f(j.int, st.ele, model = 'iid')
# correlated random intercept and random slope
m3 = lmer(dr ~ st.ele + (st.ele |poId), data = sdat)
form = dr ~ st.ele + f(i.int, model = 'iid2d', n = 2*n.loc) + f(j.int, st.ele, copy = 'i.int')
# uncorrelated random intercept and random slope of st.ele^2
m4 = lmer(dr ~ st.ele + I(st.ele^2) + (1|poId) + (0 + I(st.ele^2)|poId), data = sdat)
form = dr ~ st.ele + I(st.ele^2) + f(i.int, model = 'iid') + f(j.int, I(st.ele^2), model = 'iid')
Now, the following two models are not giving similar results at all. My first guess is that I didn't get the models correctly (before than specifying different priors)?
#random intercept and slopes, with correlated slopes
m5 = lmer(dr ~ st.ele + I(st.ele^2) + (1|poId) + (0 + st.ele + I(st.ele^2)|poId), data = sdat)
form = dr ~ st.ele + I(st.ele^2) + f(poId, model = 'iid') + f(i.int, st.ele, model = 'iid2d', n = 2*n.loc) + f(j.int, I(st.ele^2), copy = 'i.int')
# correlated random intercept and slopes
m6 = lmer(dr ~ st.ele + I(st.ele^2) + (st.ele + I(st.ele^2)|poId), data = sdat)
form = dr ~ st.ele + I(st.ele^2) + f(i.int, model = 'iid3d', n = 3*n.loc) + f(j.int, st.ele, copy = 'i.int') + f(k.int, I(st.ele^2), copy = 'i.int')
# Global Model: random intercept and slopes, with correlated slopes
lmer(dr ~ st.ele + I(st.ele^2) + (1|poId/moId) + (0 + st.ele + I(st.ele^2)|poId/moId), data = 1)
library(mvtnorm); library(lme4); library(INLA)
# MODEL 1
#generate data
n.loc = 20 # number of groups
n.sams = 20 # samples per group
ntot = n.loc*n.sams # total n
id = gl(n = n.loc, n.sams) #generate levels
x1 = runif(ntot, 0, 30) # covariate
x = scale(x1) #scale it for computation ease
#generate coefficients for intercept and lineear and quadratic factors
coe = rmvnorm(n.loc, c(20, 50, -10), sigma = matrix(c(25, 0, 0, 0, 30, 10, 0, 10, 30), ncol = 3, nrow = 3))
#generate y values according to the above
y = c()
for (i in 1:20) y = c(y, rnorm(n.loc, coe[i, 1] + coe[i, 2]*x[(((i-1)*20)+1):(i*20)] + coe[i, 3]*(x[(((i-1)*20)+1):(i*20)]^2), sd = 2))
#final data
dat = data.frame(x, y, id)
# lme analysis
m5 = lmer(y ~ x + I(x^2) + (1|id) + (0 + x + I(x^2)|id), data = dat)
#INLA analysis
dat$id = droplevels(dat$id)
dat$id = as.integer(dat$id)
dat$i.int = dat$id
dat$j.int = dat$id + n.loc
form = y ~ x + I(x^2) + f(id, model = 'iid') + f(i.int, x, model = 'iid2d', n = 2*n.loc) + f(j.int, I(x^2), copy = 'i.int')
mod = inla(form, data = dat, family="gaussian", control.compute = list(dic = TRUE))
# MODEL 2
# generate data
n.loc = 20 # number of groups
n.sams = 20 # samples per group
ntot = n.loc*n.sams # total n
id = gl(n = n.loc, n.sams) #generate levels
x1 = runif(ntot, 0, 30) # covariate
x = scale(x1) #scale it for computation ease
#generate coefficients for intercept and lineear and quadratic factors
coe = rmvnorm(n.loc, c(20, 50, -10), sigma = matrix(c(25, 20, 10, 20, 30, 5, 10, 5, 30), ncol = 3, nrow = 3))
#generate y values according to the above
y = c()
for (i in 1:20) y = c(y, rnorm(n.loc, coe[i, 1] + coe[i, 2]*x[(((i-1)*20)+1):(i*20)] + coe[i, 3]*(x[(((i-1)*20)+1):(i*20)]^2), sd = 2))
#final data
dat = data.frame(x, y, id)
# lme analysis
m6 = lmer(y ~ x + I(x^2) + (x + I(x^2)|id), data = dat)
#INLA analysis
dat$id = droplevels(dat$id)
dat$id = as.integer(dat$id)
dat$i.int = dat$id
dat$j.int = dat$id + n.loc
form = y ~ x + I(x^2) + f(i.int, model = 'iid3d', n = 3*n.loc) + f(j.int, x, copy = 'i.int') + f(k.int, I(x^2), copy = 'i.int')
mod = inla(form, data = dat, family="gaussian", control.compute = list(dic = TRUE))
> an email to r-inla-discussion-group+unsub...@googlegroups.com.