【问题标题】:lme4 upgrade produces error message even after grouping variables within the data frame即使在数据框中对变量进行分组后,lme4 升级也会产生错误消息
【发布时间】:2013-11-03 02:42:05
【问题描述】:

我一直在使用旧版本的 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

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

【问题讨论】:

标签: r lme4


【解决方案1】:

这确实是 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(诚然是一条不那么神秘的错误消息,但仍然是一个错误)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多