[R-sig-ME] lmer give error message
Steven McKinney
smckinney at bccrc.ca
Sat Oct 9 00:07:54 CEST 2010
Hi John,
> dat <- read.table ("dat.txt", sep='\t', row.names=1, header=T)
> sapply(dat, class)
pid visit eye y
"integer" "integer" "factor" "integer"
Part of the issue is that the modeling machinery is set up
to work with factor variables. lmer does not always convert
numerics to integers. Set up factor versions of your
independent variable groups.
> dat$fpid <- as.factor(dat$pid)
> dat$fvisit <- as.factor(dat$visit)
> ### crossed
> lmer(y~1+(1|fpid/fvisit)+(1|fpid/eye),dat)
Linear mixed model fit by REML
Formula: y ~ 1 + (1 | fpid/fvisit) + (1 | fpid/eye)
Data: dat
AIC BIC logLik deviance REMLdev
2848 2875 -1418 2835 2836
Random effects:
Groups Name Variance Std.Dev.
fvisit:fpid (Intercept) 0.92510 0.96182
eye:fpid (Intercept) 0.51945 0.72073
fpid (Intercept) 4.02193 2.00547
fpid (Intercept) 4.02191 2.00547
Residual 0.89761 0.94742
Number of obs: 718, groups: fvisit:fpid, 359; eye:fpid, 240; fpid, 120
Fixed effects:
Estimate Std. Error t value
(Intercept) 4.0648 0.2702 15.04
>
> ### nested using lmer
> lmer(y~1+(1|fpid/fvisit/eye),dat)
Error in function (fr, FL, start, REML, verbose) :
Number of levels of a grouping factor for the random effects
must be less than the number of observations
Issues of model specification, number of observations
per group, and groups missing data remain
to be worked out.
> with(dat, table(fpid, fvisit, eye))
, , eye = L
fvisit
fpid 0 1 2
1 1 1 1
2 1 1 1
3 1 1 1
...
37 1 1 1
38 1 0 1
39 1 1 1
...
119 1 1 1
120 1 1 1
, , eye = R
fvisit
fpid 0 1 2
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
...
117 1 1 1
118 1 1 1
119 1 1 1
120 1 1 1
Steven McKinney
> -----Original Message-----
> From: r-sig-mixed-models-bounces at r-project.org [mailto:r-sig-mixed-models-bounces at r-project.org] On
> Behalf Of array chip
> Sent: October-08-10 2:48 PM
> To: r-sig-mixed-models at r-project.org
> Subject: [R-sig-ME] lmer give error message
>
> Hi, I have an ophthalmology dataset, that has as response variable "y", patient
> ID (pid), visit (0,1,2) and eye examined ("L' and "R").
>
> Basically, each patient has 3 visit, during each visit, both eyes will be
> assessed and produce response measurements. The first question is should I treat
> eye.examined and visit as crossed or nested? I think it should be treated as
> crossed because each eye will be assessed in each visit. On the other hand, the
> 2 measurements from the 2 eyes were from a given visit, so it looks like it can
> be treated as nested as well (eye %in% visit).
>
>
> The second question is, no matter which way I use, lmer() gives me error
> message, while lme() from nlme package can handle nested design easily. Also, is
> there a way to specify corssed design in lme() as well?
>
>
> > dat <- read.table ("dat.txt", sep='\t', row.names=1, header=T)
> > library(nlme)
>
> ### nested using lme
> > lme(y~1, random=~1|pid/visit/eye,dat)
> Random effects:
> Formula: ~1 | pid
> (Intercept)
> StdDev: 2.881611
>
> Formula: ~1 | visit %in% pid
> (Intercept)
> StdDev: 0.8154632
>
> Formula: ~1 | eye %in% visit %in% pid
> (Intercept) Residual
> StdDev: 1.065172 0.5321993
>
> ### nested using lmer
> > lmer(y~1+(1|pid/visit/eye),dat)
> Error: length(f1) == length(f2) is not TRUE
> In addition: Warning messages:
> 1: In visit:pid :
> numerical expression has 718 elements: only the first used
> 2: In visit:pid :
> numerical expression has 718 elements: only the first used
>
> ### crossed
> > lmer(y~1+(1|pid/visit)+(1|pid/eye),dat)
> Error: length(f1) == length(f2) is not TRUE
> In addition: Warning messages:
> 1: In visit:pid :
> numerical expression has 718 elements: only the first used
> 2: In visit:pid :
> numerical expression has 718 elements: only the first used
> 3: In eye:pid : numerical expression has 718 elements: only the first used
> 4: In eye:pid : numerical expression has 718 elements: only the first used
>
>
> Can anyone share their thoughts.
>
> Thanks
>
> John
>
>
>
More information about the R-sig-mixed-models
mailing list