Random slope/intercept without correlation in lmer
The `dummy` function in lme4 might be useful. Here's the example from
the ?dummy help file:
data(Orthodont,package="nlme")
lmer(distance ~ age + (age|Subject) +
(0+dummy(Sex, "Female")|Subject), data = Orthodont)
Here's another example:
lmer(distance ~ dummy(Sex, "Female") +
(dummy(Sex, "Female") || Subject),
data = Orthodont)
Cheers,
Steve
On 2014-08-11, 6:42 PM, Ben Bolker wrote:
All you need to do is set up your own dummy variable (e.g. ntreat=as.numeric(treat)-1, or ntreat=as.numeric(treat=="1"), or ntreat=(original treat variable before using factor(treat) and then use (ntreat||group) or (1|group)+(0+ntreat|group) This is related but not identical to the last example in ?lmer ; it's caused by an interaction between the way that R constructs model matrices from factors and the way lme4 uses that functionality. On Mon, Aug 11, 2014 at 2:38 PM, Gustaf Granath <gustaf.granath at gmail.com> wrote:
Hi I want to model random slope and intercept without a correlation between the two. Is it possible to do this in lmer when the predictor is a factor? For example, imagine that x has 2 levels (control and treatment). In nlme, I have been modeling uncorrelated intercept and slope like this: lme(y ~ x, random=list(x = pdDiag(~ group)) ) where group is a random factor. It gives me the random intercept and random slope (i.e. variation in treatment effect among groups). In lmer, I think the corresponding model is defined as: lmer( y ~ x + (x||rand) and I guess this gives me differences (variation in differences to the intercept), but it includes a covariance term. Is it possible to reproduce the above lme() model in lmer? I have a strong feeling that Im missing something here. Most of the literature on this subject (and R-list questions) deals with continuous variables so pls let me know if there is a good source on this topic. Below follows a small example. Cheers Gustaf set.seed(1) treat = rep(c(0, 1), each = 5, 10) group = rep(1:10, each = 10) rand.int = rep( rnorm( 10, 0, 1), each = 10) rand.slop = rep( rnorm(10, 0, 1), each = 10) e = rnorm(100, 0, 0.5) y = 10 + rand.int + treat + rand.slop*treat + e treat = factor(treat) #lmer library(lme4) # with correlation between intercept and slope mod = lmer(y ~ treat + (treat|group) ) # without correlation between intercept and slope # gives lots of error msgs mod2 = lmer(y ~ treat + (treat||group) ) summary(mod) summary(mod2) # var-covar matrix VarCorr(mod)$group VarCorr(mod2)$group.1 #still a covariance term #nlme # without correlation library(nlme) lme.mod <- lme(y ~ treat, random=list(group = pdDiag(~ treat)) ) summary(lme.mod) getVarCov(lme.mod) -- Gustaf Granath (PhD) Post doc McMaster University School of Geography & Earth Sciences
_______________________________________________ R-sig-mixed-models at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
[[alternative HTML version deleted]]
_______________________________________________ R-sig-mixed-models at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models