model.frame.default(formula, data = data, ...) 中的 emmeans 警告:变量 'Group' 不是一个因素

emmeans Warning in model.frame.default(formula, data = data, ...) : variable 'Group' is not a factor

本题数据如下

example<-structure(structure(list(Group = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1", 
"2", "3"), class = "factor"), Subject = c(300L, 300L, 300L, 300L, 
300L, 300L, 300L, 300L, 300L, 300L, 301L, 301L, 301L, 301L, 301L, 
301L, 301L, 301L, 301L, 301L, 302L, 302L, 302L, 302L, 302L, 302L, 
302L, 302L, 302L, 302L, 303L, 303L, 303L, 303L, 303L, 303L, 303L, 
303L, 304L, 304L, 304L, 304L, 304L, 304L, 304L, 304L, 304L, 304L, 
305L, 305L, 305L, 305L, 305L, 305L, 305L, 305L, 305L, 305L, 306L, 
306L, 306L, 306L, 306L, 306L, 306L, 306L, 306L, 306L, 306L, 307L, 
307L, 307L, 307L, 307L, 307L, 307L, 307L, 307L, 307L, 307L, 308L, 
308L, 308L, 308L, 308L, 308L, 308L, 308L, 308L, 308L, 308L, 309L, 
309L, 309L, 309L, 309L, 309L, 309L, 309L, 309L, 309L, 309L, 310L, 
310L, 310L, 310L, 310L, 310L, 310L, 310L, 310L, 310L, 310L, 311L, 
311L, 311L, 311L, 311L, 311L, 311L, 311L, 311L, 311L, 311L, 312L, 
312L, 312L, 312L, 312L, 312L, 312L, 312L, 312L, 312L, 312L, 313L, 
313L, 313L, 313L, 313L, 313L, 313L, 313L, 313L, 313L, 313L, 314L, 
314L, 314L, 314L, 314L, 314L, 314L, 314L, 314L, 314L, 315L, 315L, 
315L, 315L, 315L, 315L, 315L, 315L, 315L, 315L, 316L, 316L, 316L, 
316L, 316L, 316L, 316L, 316L, 316L, 316L, 317L, 317L, 317L, 317L, 
317L, 317L, 317L, 317L, 317L, 317L, 318L, 318L, 318L, 318L, 318L, 
318L, 318L, 318L, 318L, 318L, 319L, 319L, 319L, 319L, 319L, 319L, 
319L, 319L, 319L, 319L, 319L, 320L, 320L, 320L, 320L, 320L, 320L, 
320L, 320L, 320L, 320L, 320L, 321L, 321L, 321L, 321L, 321L, 321L, 
321L, 321L, 321L, 321L, 321L, 322L, 322L, 322L, 322L, 322L, 322L, 
322L, 322L, 322L, 322L, 322L, 323L, 323L, 323L, 323L, 323L, 323L, 
323L, 323L, 323L, 323L, 324L, 324L, 324L, 324L, 324L, 324L, 324L, 
324L, 324L, 324L, 325L, 325L, 325L, 325L, 325L, 325L, 325L, 325L, 
325L, 325L, 326L, 326L, 326L, 326L, 326L, 326L, 326L, 326L, 326L, 
326L, 327L, 327L, 327L, 327L, 327L, 327L, 327L, 327L, 327L, 327L
), Day = structure(c(1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 3L, 1L, 
2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 3L, 1L, 2L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 3L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 3L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 3L, 1L, 2L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 3L, 1L, 2L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 3L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
3L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 3L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 3L, 1L, 2L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 3L, 1L, 2L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 3L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L), .Label = c("0", "1", 
"10", "2", "3", "4", "5", "6", "7", "8", "9"), class = "factor"), 
    Pel = c(0L, 0L, 0L, 0L, 182L, 347L, 185L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 259L, 
    387L, 400L, 400L, 365L, 0L, 0L, 0L, 62L, 382L, 400L, 400L, 
    400L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 69L, 90L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 167L, 
    378L, 252L, 382L, 216L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 12L, 300L, 385L, 278L, 0L, 
    38L, 0L, 0L, 0L, 0L, 0L, 180L, 389L, 400L, 397L, 398L, 362L, 
    206L, 0L, 0L, 0L, 0L, 303L, 382L, 400L, 399L, 391L, 296L, 
    359L, 165L, 0L, 0L, 0L, 112L, 400L, 389L, 350L, 228L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 104L, 380L, 360L, 330L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 218L, 373L, 340L, 
    352L, 135L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 248L, 400L, 
    352L, 400L, 0L, 0L, 0L, 0L, 101L, 236L, 250L, 166L, 0L, 0L, 
    0L, 0L, 94L, 167L, 323L, 329L, 400L, 374L, 371L, 240L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    196L, 395L, 398L, 374L, 261L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    390L, 397L, 400L, 389L, 373L, 342L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 296L, 393L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 43L, 
    194L, 174L, 0L, 0L, 0L)), row.names = c(NA, -290L), class = c("tbl_df", 
"tbl", "data.frame")))

当我运行下面的代码

lmm <- lmer(Pel ~ as.factor(Group)*as.factor(Day) +  (1 |Subject), data=example)

summary(lmm)
broom.mixed::tidy(lmm,conf.int=T)

emmeans(lmm, pairwise ~ Group | Day, adjust = "bonferroni") # | Day performs pairwise comparisons by day

我收到以下错误消息

Warning in model.frame.default(formula, data = data, ...) : variable 'Group' is not a factor Warning in model.frame.default(formula, data = data, ...) : variable 'Day' is not a factor

各组的成对比较提供了置信区间和 p 值。

我想知道为什么会出现此错误,如何避免以及成对比较的结果是否有效。

谢谢

我做到了:

# lmm = ... (as in OP)
rg = ref_grid(lmm)  # (same warning messages)

lmm2 = lmer(Pel ~ Group*Day +  (1 |Subject), data=example)
rg2 = ref_grid(lmm2)  # (no warnings)

summary(as.numeric(rg@linfct - rg2@linfct))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0       0       0       0       0       0 

我相信 lmm2 的结果,上面显示 lmm 的参考网格具有相同的线性函数。所以至少我们知道我们可以相信您从 lmm.

获得的估计和对比

我 运行 调用 rg 并进行调试,警告出现在 emm_basis.merMod 中的代码行中:

m = model.frame(trms, grid, na.action = na.pass, xlev = xlev)

最后一个参数 xlev 是一个列表,名称为 "Group""Day"。如果,在我 运行 调试器中的那一行之前,我做

names(xlev) = c("as.factor(Group)", "as.factor(Day)")

然后警告消失。

有趣的是,如果我们这样做:

example = transform(example, ngrp = as.numeric(Group), nday = as.numeric(Day))
lmm3 = lmer(Pel ~ as.factor(ngrp)*as.factor(nday) +  (1 |Subject), data=example)
rg3 = ref_grid(lmm3)

这工作正常,没有警告。问题是有特殊的代码可以跟踪数字变量被强制转换为因子的情况;但是当它已经是一个因素时,跟踪就不会完成。

我认为这通常是一个无害的错误。修复 emmeans 可能会阻止此类警告发生,但这会很复杂,因为它涉及将 trms 中的因子名称(在上面显示的调用中)与模型公式中的名称。如果可以避免,我宁愿不去那里。