解释 emmeans::contrast 的输出

Interpreting output from emmeans::contrast

我有来自纵向研究的数据,并使用 lme4::lmer 函数计算了回归。之后我计算了这些数据的对比,但我很难解释我的结果,因为它们出乎意料。我想我可能在代码中犯了错误。不幸的是,我无法用示例复制我的结果,但我将 post 下面的失败示例和我的实际结果。

我的结果:

library(lme4)
library(lmerTest)
library(emmeans)

#regression
regmemory <- lmer(memory ~ as.factor(QuartileConsumption)*Age+
                  (1 + Age | ID) + sex + education + 
                  HealthScore, CognitionData)
#results
summary(regmemory) 

#Fixed effects:
#                                       Estimate Std. Error         df t value Pr(>|t|)    
#(Intercept)                        -7.981e-01  9.803e-02  1.785e+04  -8.142 4.15e-16 ***
#as.factor(QuartileConsumption)2    -8.723e-02  1.045e-01  2.217e+04  -0.835  0.40376    
#as.factor(QuartileConsumption)3    5.069e-03  1.036e-01  2.226e+04   0.049  0.96097    
#as.factor(QuartileConsumption)4    -2.431e-02  1.030e-01  2.213e+04  -0.236  0.81337    
#Age                                -1.709e-02  1.343e-03  1.989e+04 -12.721  < 2e-16 ***
#sex                                3.247e-01  1.520e-02  1.023e+04  21.355  < 2e-16 ***
#education                          2.979e-01  1.093e-02  1.061e+04  27.266  < 2e-16 ***
#HealthScore                       -1.098e-06  5.687e-07  1.021e+04  -1.931  0.05352 .  
#as.factor(QuartileConsumption)2:Age  1.101e-03  1.842e-03  1.951e+04   0.598  0.55006    
#as.factor(QuartileConsumption)3:Age  4.113e-05  1.845e-03  1.935e+04   0.022  0.98221    
#as.factor(QuartileConsumption)4:Age  1.519e-03  1.851e-03  1.989e+04   0.821  0.41174    

#contrasts
emmeans(regmemory, poly ~ QuartileConsumption * Age)$contrast

#$contrasts
# contrast  estimate     SE  df z.ratio p.value
# linear      0.2165 0.0660 Inf   3.280  0.0010
# quadratic   0.0791 0.0289 Inf   2.733  0.0063
# cubic      -0.0364 0.0642 Inf  -0.567  0.5709

回归结果中交互项不显着,线性对比显着。对比度的 p 值不应该不显着吗?

下面是我为尝试重新创建这些结果而编写的代码,但失败了:

library(dplyr)
library(lme4)
library(lmerTest)
library(emmeans)

data("sleepstudy")

#create quartile column
sleepstudy$Quartile <- sample(1:4, size = nrow(sleepstudy), replace = T)

#regression
model1 <- lmer(Reaction ~ Days * as.factor(Quartile) + (1 + Days | Subject), data = sleepstudy)

#results
summary(model1) 

#Fixed effects:
#                          Estimate Std. Error       df t value Pr(>|t|)    
#(Intercept)               258.1519     9.6513  54.5194  26.748  < 2e-16 ***
#Days                        9.8606     2.0019  43.8516   4.926 1.24e-05 ***
#as.factor(Quartile)2      -11.5897    11.3420 154.1400  -1.022    0.308    
#as.factor(Quartile)3       -5.0381    11.2064 155.3822  -0.450    0.654    
#as.factor(Quartile)4      -10.7821    10.8798 154.0820  -0.991    0.323    
#Days:as.factor(Quartile)2   0.5676     2.1010 152.1491   0.270    0.787    
#Days:as.factor(Quartile)3   0.2833     2.0660 155.5669   0.137    0.891    
#Days:as.factor(Quartile)4   1.8639     2.1293 153.1315   0.875    0.383    

#contrast
emmeans(model1, poly ~ Quartile*Days)$contrast

#contrast  estimate    SE  df t.ratio p.value
# linear       -1.91 18.78 149  -0.102  0.9191
# quadratic    10.40  8.48 152   1.227  0.2215
# cubic       -18.21 18.94 150  -0.961  0.3379

在此示例中,线性对比的 p 值与回归的交互作用一样不显着。是我做错了什么,还是这些结果是意料之中的?

查看原始模型的emmeans()调用:

emmeans(regmemory, poly ~ QuartileConsumption * Age)

这要求我们获得 QuartileConsumptionAge 组合的边际均值,并从这些结果中获得多项式对比。看起来 Age 是一个数量变量,所以在计算边际均值时,我们只使用 Age 的平均值(参见 ref_grid()vignette("basics", "emmeans") 的文档)。因此,OP 中未显示的边际均值显示将采用这种一般形式:

QuartileConsumption    Age    emmean
------------------------------------
1                     <mean>  <est1>
2                     <mean>  <est2>
3                     <mean>  <est3>
4                     <mean>  <est4>

...显示的对比将是这四个估计值的线性、二次和三次趋势,按显示的顺序排列。

请注意,这些边际均值与交互作用无关;如果我正确理解数据结构,它们只是模型对 QuartileConsumption 四个级别的平均 Age(以及平均教育、平均健康评分)的两个性别的平均预测。因此,本质上,多项式对比估计了平均年龄的 4 级因子的多项式趋势。并特别注意 age 保持不变,因此我们当然不会考虑 Age.

的任何影响

我猜您想检查交互作用的目的是评估年龄 趋势 在该因素的四个水平上的变化情况。如果是这样的话,一件有用的事情就是

slopes <- emtrends(regmemory, ~ QuartileConsumption, var = "age")
slopes    # display the estimated slope at each level
pairs(slopes)    # pairwise comparisons of these slopes

请参阅 vignette("interactions", "emmeans") 以及关于与协变量交互的部分。