lmer模型中无效的分组因素规范

3

我尝试使用lmer函数运行混合效应模型。我的实验包括在不同温度下测量代谢率,使用了一些相同的个体(有些数据缺失)。文本文件的结构如下:

> str(data.by.animal)
'data.frame':   18 obs. of  17 variables:
 $ animal: Factor w/ 18 levels "08_03","08_07",..: 17 6 5 10 15 14 11 12 16 9 ...
 $ temp  : int  2 0 -2 -4 -6 -8 -10 -12 -14 -16 ...
 $ X2    : num  0.0129 0.0176 0.0132 NA 0.0144 0.0133 0.0101

当我运行脚本[model_1 <- lmer(X2 + X0 + X.2 + X.4 + X.6 + X.8 + X.10 + X.12 + X.14 + X.16 + X.18 + X.20 + X.22 + X.24 + X.26 ~ temp + (1 | animal), data.by.animal)]时,我遇到了以下问题:[Error in FUN(X[[1L]], ...) : Invalid grouping factor specification, animal],虽然我咨询了 "The R Book" 和其他答案,但我仍然搞不清楚我的问题出在哪里。


很抱歉,但是这个模型规范对我来说毫无意义,如果这确实是你使用的规范。lmer要求在~的左侧只有一个响应变量...这真的是你尝试的吗? - Ben Bolker
评论给 @dhd,他的问题/评论被删除了。你可以将其发布为一个新问题。在您的公式或数据集中,唯一看起来可疑的是我们能看到的所有time2的值都是NA...当您重新发布时,可以显示summary()的结果(它将计算NA的数量)吗?或者droplevels(na.omit(test))的结构? - Ben Bolker
3个回答

4

当我使用lmer时,我也遇到了这个问题。检查我的数据后,我发现几个变量的值是NA(由于重新缩放导致)。在排除这些变量后,问题得到了解决。


1
这也适用于我... 注意 NA 可以存在于固定效应变量和随机效应因素中。 - olk

2
如我在评论中所述,这个模型规范没有意义--lmer要求左侧的 ~只有一个响应变量。尽管我们没有测试它,因为我们认为没有人会犯这样的错误...(你想做什么?你想对每个X*变量分别运行分析吗?)
我可以更或多或少地复制这个问题,只要左侧的元素之一是一个因子...
library(lme4)

这个做了某些事情,但我不确定是什么...

lmer(Reaction + Days ~ (1| Subject), sleepstudy)

这很接近 lmer(Reaction ~ (1|Subject), sleepstudy)(可能会忽略LHS上的第二个项),但并不完全相同...

LHS上的因子是被允许的,尽管它们没有太多意义(它们可能只是被转换为数字):

lmer(factor(Days) ~ (1| Subject), sleepstudy)

如果我两个都输入,可能会出现错误:

lmer(Reaction + factor(Days) ~ (1| Subject), sleepstudy)
## Error in FUN(X[[1L]], ...) : 
##   Invalid grouping factor specification, Subject
## In addition: Warning message:
## In Ops.factor(Reaction, factor(Days)) : + not meaningful for factors

1
除非 OP 隐瞒了 X.is 的编码方式,否则公式的左侧没有因素。虽然错误是相同的,但我们需要知道 X.is 是否为因子,才能确定这是问题所在。由于某种原因,R 将公式对象左侧变量的加法解释为单个总和。尝试使用简单的 lm 对象进行此操作,您会发现 I(y1 + y2) ~ x1 与 y1 + y2 ~ x1 给出相同的输出。与右侧变量的加法相比,R 将它们解析为设计矩阵的唯一列。 - AdamO

0

从语法上讲,这是正确的。您想要拟合一个带有动物随机效应的随机截距模型。您有18个观测值,而动物是一个具有17个水平的因子,因此基本上只有最多1个重复测量。在这种情况下,混合模型无法收敛。我建议您重新考虑您在这里的分析。

至于错误,lme4软件包源代码在此处抛出错误:

    ## convert grouping variables to factors as necessary
    for (i in all.vars(x[[3]])) {
        frloc[[i]] <- factor(frloc[[i]])
    }
    ff <- eval(substitute(factor(fac), list(fac = x[[3]])), frloc)
    if (all(is.na(ff)))
        stop("Invalid grouping factor specification, ",
             deparse(x[[3]]))

你可能需要考虑一下如何编码animal。尝试重新编码为其他值。

在你的shell抛出错误后,你能打印出traceback()的输出吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接