为lmer使用emmeans

时间:2018-11-22 19:17:50

标签: r lme4 emmeans

我一直在尝试为R中的lmer和glmer计算边际均值。我找到了emmeans函数,并且一直在试图理解它并将其应用于我的模型。我发现很难获得进行交互的方式,因此我仅从加法预测变量开始,但是该函数无法像示例中所示的那样起作用(例如,此处https://cran.r-project.org/web/packages/emmeans/vignettes/sophisticated.html

emmeans(Oats.lmer, "nitro") 
nitro    emmean       SE   df  lower.CL  upper.CL
0.0  78.89207 7.294379 7.78  61.98930  95.79484
 0.2  97.03425 7.136271 7.19  80.25029 113.81822
0.4 114.19816 7.136186 7.19  97.41454 130.98179
0.6 124.06857 7.070235 6.95 107.32795 140.80919

我得到的是:

emmeans(model2, "VariableA")
VariableA  emmean       SE    df lower.CL upper.CL
0.4657459 2649.742 120.8955 19.07 2396.768 2902.715

仅对一行和变量取平均值,而不是将其分为0和1(这是数据集中的值,可能是它是分类的?) 我正在运行的模型是:

model2 = lmer (rt ~ variableA + variableB + (1 |participant) + (1 |sequence/item), data=memoryData, REML=FALSE)

编辑:数据文件很大,我不确定如何从其中提取有用的信息,但这是结构:

> str(memoryData) 
'data.frame':   3168 obs. of  123 variables:
 $ participant    : int  10 10 10 10 10 10 10 10 10 10 ...
$ variableA      : int  1 1 1 1 1 1 1 1 1 1 ...
 $ variableB      : int  1 1 1 1 1 1 1 1 1 1 ...
$ sequence: int  1 1 1 1 1 1 1 1 1 1 ...
$ item     : int  25 26 27 28 29 30 31 32 33 34 ...
$ accuracy       : int  1 1 1 1 1 1 0 1 1 1 ...
 $ rt             : num  1720 1628 1728 2247 1247 ...

为什么该功能对我不起作用? 还有一个问题,当我包含变量A和B之间的交互时,有没有办法获得这些平均值?

编辑2:好的,当我将其更改为因数时,它确实起作用了,我想我的操作方法不正确。但是我仍然不确定在发生交互时如何计算它?因为使用这种方法,R会说“注意:由于参与交互,结果可能会产生误导”

2 个答案:

答案 0 :(得分:1)

您说“改变变量不起作用”,但我认为这样做(如emmeans FAQ中所述):

 md <- transform(memoryData,
         variableA=factor(variableA),
         variableB=factor(variableB))

 model2 = lmer (rt ~ variableA + variableB + 
    (1 |participant) + (1 |sequence/item), data=md, REML=FALSE)
 emmeans(model2, ~variableA)
 emmeans(model2, ~variableB)
 emmeans(model2, ~variableA + variableB)

如果这确实不起作用,那么我们需要一个可重现的示例...

答案 1 :(得分:1)

要查看交互的边际均值,请将交互项的所有变量添加到emmeans(),如果要查看交互作用的不同级别上的边际均值,则需要使用at参数。互动条款。

这里有一些示例,用于说明交互作用的平均效果以及交互作用项不同级别上的边际效果。后者在可视化方面具有优势。

library(ggeffects)
library(lme4)
library(emmeans)

data("sleepstudy")
sleepstudy$inter <- sample(1:5, size = nrow(sleepstudy), replace = T)
m <- lmer(Reaction ~ Days * inter + (1 + Days | Subject), data = sleepstudy)

# average marginal effect of interaction
emmeans(m, c("Days", "inter"))
#>  Days    inter   emmean      SE    df lower.CL upper.CL
#>   4.5 2.994444 298.3427 8.84715 16.98 279.6752 317.0101
#> 
#> Degrees-of-freedom method: kenward-roger 
#> Confidence level used: 0.95

# marginal effects at different levels of interactions -
# useful for plotting
ggpredict(m, c("Days [3,5,7]", "inter"))
#> 
#> # Predicted values of Reaction 
#> # x = Days 
#> 
#> # inter = 1
#>  x predicted std.error conf.low conf.high
#>  3   279.349     8.108  263.458   295.240
#>  5   304.839     9.818  285.597   324.082
#>  7   330.330    12.358  306.109   354.551
#> 
#> # inter = 2
#>  x predicted std.error conf.low conf.high
#>  3   280.970     7.624  266.028   295.912
#>  5   304.216     9.492  285.613   322.819
#>  7   327.462    11.899  304.140   350.784
#> 
#> # inter = 3
#>  x predicted std.error conf.low conf.high
#>  3   282.591     7.446  267.997   297.185
#>  5   303.593     9.384  285.200   321.985
#>  7   324.594    11.751  301.562   347.626
#> 
#> # inter = 4
#>  x predicted std.error conf.low conf.high
#>  3   284.212     7.596  269.325   299.100
#>  5   302.969     9.502  284.345   321.594
#>  7   321.726    11.925  298.353   345.099
#> 
#> # inter = 5
#>  x predicted std.error conf.low conf.high
#>  3   285.834     8.055  270.046   301.621
#>  5   302.346     9.839  283.062   321.630
#>  7   318.858    12.408  294.540   343.177
#> 
#> Adjusted for:
#> * Subject = 308

emmeans(m, c("Days", "inter"), at = list(Days = c(3, 5, 7), inter = 1:5))
#>  Days inter   emmean        SE    df lower.CL upper.CL
#>     3     1 279.3488  8.132335 23.60 262.5493 296.1483
#>     5     1 304.8394  9.824196 20.31 284.3662 325.3125
#>     7     1 330.3300 12.366296 20.69 304.5895 356.0704
#>     3     2 280.9700  7.630745 18.60 264.9754 296.9646
#>     5     2 304.2160  9.493225 17.77 284.2529 324.1791
#>     7     2 327.4621 11.901431 17.84 302.4420 352.4822
#>     3     3 282.5912  7.445982 16.96 266.8786 298.3038
#>     5     3 303.5927  9.383978 16.98 283.7927 323.3927
#>     7     3 324.5942 11.751239 16.98 299.7988 349.3896
#>     3     4 284.2124  7.601185 18.34 268.2639 300.1609
#>     5     4 302.9694  9.504102 17.85 282.9900 322.9487
#>     7     4 321.7263 11.927612 17.99 296.6666 346.7860
#>     3     5 285.8336  8.076779 23.02 269.1264 302.5409
#>     5     5 302.3460  9.845207 20.48 281.8399 322.8521
#>     7     5 318.8584 12.416642 21.02 293.0380 344.6788
#> 
#> Degrees-of-freedom method: kenward-roger 
#> Confidence level used: 0.95

还有一个绘图示例:

ggpredict(m, c("Days", "inter [1,3,5]")) %>% plot()

enter image description here