1

我一直在尝试计算我在 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 说“注意:由于参与交互,结果可能会产生误导”

4

2 回答 2

3

要查看交互作用的边际均值,请将交互项的所有变量添加到 中,如果要查看交互项不同级别的边际均值,则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()

在此处输入图像描述

于 2018-11-23T13:21:36.813 回答
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)

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

于 2018-11-22T20:05:52.547 回答