2016-04-15 72 views
2

分组错误我有具有以下结构的数据帧:11聚物与

> 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肯定是。

+4

你真的真的应该使用'data'参数:'lmer(Awns〜(1 | Funnel)+ BobWhite_c10082_241,data = t)'如果你不遵循这个实践,就会发生奇怪的事情函数像'lm')。 – Roland

+0

这确实完全解决了它!创建一个答案,我会让它被接受。 – Ward9250

+0

@罗兰,请发表回复? –

回答

2

实际上,为函数建模提供方便的语法并不容易,同时还需要一个强大的实现。大多数软件包作者假设您使用data参数,即使可能会发生范围问题。因此,如果您使用DF$col语法指定变量,就会发生奇怪的事情,因为程序包作者很少花费大量精力使其正常工作,并且不包含大量的单元测试。

因此,如果模型功能提供了formula方法,强烈建议使用data参数。奇怪的事情可能发生,如果你不遵循这个实践(也与其他模型功能,如lm)。

在您的例子:

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

这不仅工作,但也写更多的方便。