【问题标题】:Error: Invalid grouping factor specification错误:无效的分组因子规范
【发布时间】:2016-12-14 03:01:31
【问题描述】:

我正在尝试使用glmer 对珊瑚招募进行建模,并在重新缩放变量后运行模型时出现错误“错误:无效的分组因子规范,站点”。非常感谢您的帮助

m1<-glmer(Tot~cs.Tile(Tile)+cs.Coral_T(Coral_T)+cs.Sponge(Sponge)+
cs.Turf(Turf)+cs.Acro(Acro)+cs.Por(Por)+cs.Poc(Poc)+
cs.Mer(Mer)+cs.Agar(Agar)+cs.Fav(Fav)+
cs.Den(Den)+cs.Sid(Sid)+cs.CCA(CCA)+cs.Soft(Soft)+
  (1|Site), 
family=poisson, data=data)

我有 16 个变量和 368 个 obs:

str(data)
'data.frame':   368 obs. of  16 variables:
 $ Site   : Factor w/ 25 levels "Eight","Eighteen",..: 10 10 10 10 10 10 10 10 10 10 ...
 $ Tile   : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Tot    : int  28 24 17 13 29 19 6 13 14 4 ...
 $ Coral_T: num  32.6 32.6 32.6 32.6 32.6 ...
 $ Sponge : num  0.206 0.206 0.206 0.206 0.206 ...
 $ Turf   : num  32.3 32.3 32.3 32.3 32.3 ...
 $ Acro   : num  3.45 3.45 3.45 3.45 3.45 ...
 $ Por    : num  1.15 1.15 1.15 1.15 1.15 ...
 $ Poc    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ Mer    : num  0.175 0.175 0.175 0.175 0.175 0.175 0.175 0.175 0.175 0.175 ...
 $ Agar   : num  24.2 24.2 24.2 24.2 24.2 ...
 $ Fav    : num  1.02 1.02 1.02 1.02 1.02 ...
 $ Den    : num  1.18 1.18 1.18 1.18 1.18 ...
 $ Sid    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ CCA    : num  0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 ...
 $ Soft   : num  0 0 0 0 0 0 0 0 0 0 ...

【问题讨论】:

  • 你能解释一下你的符号吗?括号是指替代变量,例如您正在使用Tilecs.Tile,后者是Tile 的居中和缩放版本?我无法立即看出这是怎么发生的。我们能看到居中缩放的数据框里面有什么吗?我猜可能你忘了在中心缩放数据框中包含Site ... ???
  • 或者(最好)你可以提供一个minimal reproducible example

标签: r lme4 mixed-models


【解决方案1】:

我在调用update.merMod 时遇到了同样的错误,在重新缩放变量之后也是如此。在深入挖掘traceback() 堆栈并使用缩放和未缩放的数据集搜索我在那里找到的内容后,我发现问题出现在模型框架的创建中,并且由于我的缩放和居中算法失败而发生考虑原始变量中的NA 值。我最初执行的居中/缩放如下:

csData <- data %>% mutate(Var1 = (Var1 - mean(Var1) / sd(Var1),
                          Var2 = (Var2 - mean(Var2) / sd(Var2))

其中一个变量中有几个NA 值,并且以这种方式对其进行缩放和居中会导致csData 中的向量为空(全部为NA)。这随后(并且默默地)导致从model.frame() 返回一个空帧。虽然空框架是导致错误的原因,但它(错误)的出现是因为我(错误)在重新缩放期间处理了我的变量中的 NA 值。为sd()mean() 的调用设置na.rm=TRUE 为我解决了这个问题:

csData <- data %>% mutate(Var1 = (Var1 - mean(Var1, na.rm=TRUE) / sd(Var1, na.rm=TRUE),
                          Var2 = (Var2 - mean(Var2, na.rm=TRUE) / sd(Var2, na.rm=TRUE))

【讨论】:

  • 也回答了我的问题。我扩展了我的连续预测变量,没有意识到一列有一些 NA。
  • 出于同样的原因,我使用glmmTMB 收到了同样的错误,一些NAs 已经潜入我的数据中。
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2018-03-27
  • 2020-11-27
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多