我一直使用旧版本的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
知道为什么会这样吗? 非常感谢! 纳塔利娅·诺登
答案 0 :(得分:7)
这确实是lme4
:https://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
版本中也会出现问题:使用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
(诚然,这是一个不太神秘的错误信息,但仍然是错误的。)