0

我一直在使用旧版本的 lme4 运行线性混合模型。现在我已经更新了 lme4 我收到以下错误:

错误 en [[<-.data.frame( *tmp*, i, value = integer(0)) :替换有 0 行,数据有 4211

我在这个网站上找到了一个答案,建议将所有分组变量放在 data 参数指定的数据框中。我已经这样做了,但我的代码仍然不起作用。

这里是:

msdgtot=glmer(sdg.dens ~ ngbr.trees + (1 + ngbr.trees | factor(species)), data=d.sdg.ngb,family=poisson)

错误 en [[<-.data.frame( *tmp*, i, value = integer(0)) :替换有 0 行,数据有 4211

知道为什么会这样吗?非常感谢!娜塔莉亚·诺登

4

1 回答 1

7

这确实是一个尚未修复的错误lme4https ://github.com/lme4/lme4/issues/156 。但是,解决方法很简单:只需在数据框中进行转换,as.factor()as.numeric()不是在公式中,例如

d.sdg.ngb = transform(d.sdg.ngb,species=factor(species))
msdgtot = glmer(sdg.dens ~ ngbr.trees + (1 + ngbr.trees | species),
    data=d.sdg.ngb,family=poisson)

一般来说,我认为这甚至没有必要——至少最近版本的glmer自动将分组变量转换为species因子——但我很感激想要小心/明确。如果出于某种原因我不想将分组变量永久转换为因子,我通常会制作变量的因子版本,例如

d.sdg.ngb = transform(d.sdg.ngb,fspecies=factor(species))

然后使用fspecies而不是species在公式中。

对于它的价值,这在以前发布的版本中也是一个问题lme4:with lme4.0(向后兼容的版本),

gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
  data=cbpp,family=binomial)

工作正常,但

gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | factor(herd)),
data=cbpp,family=binomial)

给出Error in factor(herd) : object 'herd' not found(诚然,一个不那么神秘的错误消息,但仍然是一个错误)。

于 2013-12-03T14:16:13.950 回答