【问题标题】:Grouping error with lmer使用 lmer 分组错误
【发布时间】:2016-04-15 15:04:13
【问题描述】:

我有一个具有以下结构的数据框:

> t <- read.csv("combinedData.csv")[,1:7]
> str(t)
'data.frame':   699 obs. of  7 variables:
 $ Awns               : int  0 0 0 0 0 0 0 0 1 0 ...
 $ Funnel             : Factor w/ 213 levels "MEL001","MEL002",..: 1 1 2 2 2 3 4 4 4 4 ...
 $ Plant              : int  1 2 1 3 8 1 1 2 3 5 ...
 $ Line               : Factor w/ 8 levels "a","b","c","cA",..: 2 2 1 1 1 3 1 1 1 1 ...
 $ X                  : int  1 2 3 4 7 8 9 10 11 12 ...
 $ ID                 : Factor w/ 699 levels "MEL_001-1b","MEL_001-2b",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ BobWhite_c10082_241: int  2 2 2 2 2 2 0 2 2 0 ...

我想构建一个混合效应模型。我知道在我的数据框中我想要包含的随机效应(漏斗)是一个因素,但它不起作用:

> lmer(t$Awns ~ (1|t$Funnel) + t$BobWhite_c10082_241)
Error: couldn't evaluate grouping factor t$Funnel within model frame: try adding grouping factor to data frame explicitly if possible

事实上,无论我想包含什么作为随机效果,这都会发生,例如植物:

> lmer(t$Awns ~ (1|t$Plant) + t$BobWhite_c10082_241)
Error: couldn't evaluate grouping factor t$Plant within model frame: try adding grouping factor to data frame explicitly if possible

为什么 R 会给我这个错误?我可以用谷歌搜索的唯一其他答案是输入的随机效应不是 DF 中的一个因素。但正如 str 所示,df$Funnel 肯定是。

【问题讨论】:

  • 你真的应该使用data 参数:lmer(Awns ~ (1|Funnel) + BobWhite_c10082_241, data = t) 如果你不遵循这种做法,就会发生奇怪的事情(也可以使用其他模型函数,如lm)。
  • 这确实完全解决了它!创建一个答案,我会让它被接受。
  • @Roland,请发帖回答?
  • @BenBolker 因为我参加了一个会议,所以我花了一段时间,但我已经发布了一个答案。如果我没有正确呈现包作者的观点,请随意编辑它。
  • 看起来不错。可以挖掘/跟踪源代码以找出确切出了什么问题,但我认为您的答案本质上就是解决方案。

标签: r dataframe lme4


【解决方案1】:

实际上,要为建模函数提供方便的语法并同时具有健壮的实现并不容易。大多数包作者都假设您使用data 参数,即使这样,也可能会出现范围问题。因此,如果您使用 DF$col 语法指定变量,可能会发生奇怪的事情,因为包作者很少花费大量精力来使其正常工作,并且不为此包含大量单元测试。

因此,如果模型函数提供formula 方法,强烈建议使用data 参数。如果您不遵循该实践,可能会发生奇怪的事情(以及其他模型函数,如 lm)。

在你的例子中:

lmer(Awns ~ (1|Funnel) + BobWhite_c10082_241, data = t) 

这样不仅有效,而且写起来更方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2018-09-07
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多