为什么转换 emmeans 与 data.frame 的对比没有报告正确的 p 值? 可重现的示例:

问题描述

我正在运行的对比的 p 值没有正确转换为 data.frame。这是为什么,我该如何解决?

emmeans 的控制台输出:

> pairs(emmeans(lmer.mod,~ Status*Stim*Treatment),simple = "each")
$`simple contrasts for Status`
Stim = 1,Treatment = None:
 contrast               estimate     SE   df t.ratio p.value
 Control - Subclinical  -0.24213 0.0571 57.5 -4.241  0.0002 
 Control - Clinical     -0.16275 0.0571 57.5 -2.851  0.0164 
 Subclinical - Clinical  0.07938 0.0571 57.5  1.390  0.3526 

emmeans 的 data.frame 的控制台输出:

> mod.EMM <- pairs(emmeans(lmer.mod,simple = "each")
> as.data.frame(mod.EMM)
   Stim Treatment      Status               contrast     estimate         SE       df      t.ratio      p.value
1    1      None           .  Control - Subclinical -0.242125000 0.05709000 57.46544  -4.24111052 3.680551e-03
2    1      None           .     Control - Clinical -0.162750000 0.05709000 57.46544  -2.85076195 2.721389e-01
3    1      None           . Subclinical - Clinical  0.079375000 0.05709000 57.46544   1.39034857 1.000000e+00

可重现的示例:

model1 <- lm(uptake ~ Type + Treatment + conc + Type*Treatment,data=CO2)

library(emmeans)
pairs(emmeans(model1,~ Type*Treatment),simple="each")
# $`simple contrasts for Type`
# Treatment = nonchilled:
#   contrast             estimate   SE df t.ratio p.value
# Quebec - Mississippi     9.38 1.85 79 5.068   <.0001 
# 
# Treatment = chilled:
#   contrast             estimate   SE df t.ratio p.value
# Quebec - Mississippi    15.94 1.85 79 8.610   <.0001 
# 
# 
# $`simple contrasts for Treatment`
# Type = Quebec:
#   contrast             estimate   SE df t.ratio p.value
# nonchilled - chilled     3.58 1.85 79 1.934   0.0566 
# 
# Type = Mississippi:
#   contrast             estimate   SE df t.ratio p.value
# nonchilled - chilled    10.14 1.85 79 5.477   <.0001 

as.data.frame(pairs(emmeans(model1,simple="each"))
#    Treatment        Type             contrast  estimate       SE df  t.ratio      p.value
# 1 nonchilled           . Quebec - Mississippi  9.380952 1.851185 79 5.067538 1.036140e-05
# 2    chilled           . Quebec - Mississippi 15.938095 1.851185 79 8.609670 2.252161e-12
# 3          .      Quebec nonchilled - chilled  3.580952 1.851185 79 1.934410 2.265719e-01
# 4          . Mississippi nonchilled - chilled 10.138095 1.851185 79 5.476542 1.995066e-06

model1 <- lm(uptake ~ Type + Treatment + conc + Type*Treatment,data=CO2)
pairs(emmeans(model1,simple="each"))
#    Treatment        Type             contrast  estimate       SE df  t.ratio      p.value
# 1 nonchilled           . Quebec - Mississippi  9.380952 1.851185 79 5.067538 1.036140e-05
# 2    chilled           . Quebec - Mississippi 15.938095 1.851185 79 8.609670 2.252161e-12
# 3          .      Quebec nonchilled - chilled  3.580952 1.851185 79 1.934410 2.265719e-01
# 4          . Mississippi nonchilled - chilled 10.138095 1.851185 79 5.476542 1.995066e-06

来自外部帮助的更新:

“似乎pairs() 的结果本身并不是一个可以转换为数据框的emmGrid 对象,而是一个包含两个emmGrid 对象的列表。如果您从列表中按位置提取这些对象中的任何一个,请使用[[]],像这样,

pairs(emmeans(model1,simple = "each")[[2]]

然后你可以 data.frame() 每个结果,它会是正确的。您最终会得到两个不同的数据帧来保存涉及两个不同变量的对比,但这些数据帧中的每一个都包含正确的 p 值。”

我希望有人对这个问题有更好的解决方法,这样我就可以将所有对比组合到一个 data.frame 中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)