используя emmeans для lmer - PullRequest
       88

используя emmeans для lmer

0 голосов
/ 22 ноября 2018

Я пытался вычислить предельные средние значения для моего lmer & glmer в R. Я нашел функцию 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 голосов
/ 23 ноября 2018

Чтобы увидеть предельные средние взаимодействия, добавьте все переменные термина взаимодействия в 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

0 голосов
/ 22 ноября 2018

Вы говорите, что «изменение переменной на коэффициент не помогает», но я думаю, что это будет (как описано в 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)

Если это действительно не работает, тогда нам нужен воспроизводимый пример ...

...