Random slope for time in subject not working in lme4

寵の児 提交于 2021-01-20 18:39:09

问题


I can not insert a random slope in this model with lme4(1.1-7):

> difJS<-lmer(JS~Tempo+(Tempo|id),dat,na.action=na.omit)
Error: number of observations (=274) <= number of random effects (=278) for term 
(Tempo | id); the random-effects parameters and the residual variance (or scale
parameter) are probably unidentifiable

With nlme it is working:

    > JSprova<-lme(JS~Tempo,random=~1+Tempo|id,data=dat,na.action=na.omit)
    > summary(JSprova)
Linear mixed-effects model fit by REML Data: dat
AIC      BIC    logLik
769.6847 791.3196 -378.8424

Random effects:
Formula: ~1 + Tempo | id
Structure: General positive-definite, Log-Cholesky parametrization
            StdDev    Corr
(Intercept) 1.1981593 (Intr)
Tempo       0.5409468 -0.692
Residual    0.5597984       

Fixed effects: JS ~ Tempo 
                Value  Std.Error  DF   t-value p-value
(Intercept)  4.116867 0.14789184 138 27.837013  0.0000
Tempo       -0.207240 0.08227474 134 -2.518874  0.0129
Correlation: 
      (Intr)
Tempo -0.837

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-2.79269550 -0.39879115  0.09688881  0.41525770  2.32111142

Number of Observations: 274
Number of Groups: 139

I think it is a problem of missing data as I have few cases where there is a missing data in time two of the DV but with na.action=na.omit should not the two package behave in the same way?


回答1:


It is "working" with lme, but I'm 99% sure that your random slopes are indeed confounded with the residual variation. The problem is that you only have two measurements per subject (or only one measurement per subject in 4 cases -- but that's not important here), so that a random slope plus a random intercept for every individual gives one random effect for every observation.

If you try intervals() on your lme fit, it will give you an error saying that the variance-covariance matrix is unidentifiable.

You can force lmer to do it by disabling some of the identifiability checks (see below).

library("lme4")
library("nlme")
library("plyr")

Restrict the data to only two points per individual:

sleepstudy0 <- ddply(sleepstudy,"Subject",
      function(x) x[1:2,])
m1 <- lme(Reaction~Days,random=~Days|Subject,data=sleepstudy0)
intervals(m1)
## Error ... cannot get confidence intervals on var-cov components

lmer(Reaction~Days+(Days|Subject),data=sleepstudy0)
## error

If you want you can force lmer to fit this model:

m2B <- lmer(Reaction~Days+(Days|Subject),data=sleepstudy0,
        control=lmerControl(check.nobs.vs.nRE="ignore"))
## warning messages

The estimated variances are different from those estimated by lme, but that's not surprising since some of the parameters are jointly unidentifiable.

If you're only interested in inference on the fixed effects, it might be OK to ignore these problems, but I wouldn't recommend it.

The sensible thing to do is to recognize that the variation among slopes is unidentifiable; there may be among-individual variation among slopes, but you just can't estimate it with this model. Don't try; fit a random-intercept model and let the implicit/default random error term take care of the variation among slopes.

There's a recent related question on CrossValidated; there I also refer to another example.



来源:https://stackoverflow.com/questions/26465215/random-slope-for-time-in-subject-not-working-in-lme4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!