glmer的边际效应

时间:2018-08-24 13:21:39

标签: lme4 mixed-models sjplot

之前曾有人问过这个问题的各种变化(例如Is there a way of getting "marginal effects" from a `glmer` object),其中大多数建议使用ggeffects(或sjPlot)。但是,我们学院的统计学家在与ggeffects的输出达成一致时遇到了一些麻烦。

我对统计和R都是陌生的(所以我可能不应该使用glmer ...),并且在理解我做错的事情时遇到了一些麻烦。

我的模型最简单的形式是lme4:结果(二进制)〜FE(二进制)+(1 | RE)。 固定效应是对我的随机效应中的部分但不是所有个体执行的测试。

模型输出

Intercept: 1.2654

FE_2: -0.2305

RE Std. Dev.: 2.896

ggpredict:

ggpredict(model, type = "fe", terms = "FE")

1: 0.780

2: 0.738

现在,据我所知,我可以在测试2的概率中获得边际效应,如下所示:

y <- 1.2654 - 0.2305
prob <- exp(y) / (1 + exp(y))

与ggpredict的输出完全相同:0.738。

但是,他是说这是每个人的条件概率,我需要“插入一些我不了解的东西”才能获得可以推广到总体的概率。他的快速解决方案示例:

y <- 1.2654 - 0.2305 + rnorm(100000000) * 2.896 
prob_trus <- exp(y) / (1 + exp(y))
mean(prob_trus)
0.62

使用具有与以前的ggpredict相同的参数的ggaverage几乎可以得到0.639的相同概率。所以,最后我的问题是:

  • 总平均值与他的解法是否相同,只是存在一些模拟差异和/或舍入误差?
  • 如果他的方法可行,我如何从ggeffects获得相同的结果?

2 个答案:

答案 0 :(得分:0)

ggaverage()与“我不了解的东西”方法不同,相似的结果是偶然的。您可以阅读有关ggpredict()ggaverage() here in the vignette之间的区别的一些信息。

我不会说应将随机效​​应方差(您的同事也希望以预测为条件)添加到预测值中以计算预测概率。相反,这种不确定性应在预测的标准误差中进行解释(并因此在得出的置信区间内进行解释)。

ggpredict(model, type = "fe", terms = "FE")ggpredict(model, type = "re", terms = "FE")进行比较时,您会看到差异。请注意,更改后的type = "re"现在考虑了随机效应,从而导致不同的预测值和更大的置信区间。

以下是该示例的示例数据包:

data(efc_test)

fit <- glmer(
  negc7d ~ c12hour + e42dep + c161sex + c172code + (1 | grp),
    data = efc_test,
    family = binomial(link = "logit")
  )

ggpredict(fit, "c12hour", type = "fe")

#> # Predicted probabilities for Negative impact with 7 items 
#> # x = average number of hours of care per week 
#> 
#>   x predicted conf.low conf.high
#>   0     0.342    0.249     0.449
#>   5     0.344    0.251     0.450
#>  10     0.346    0.254     0.452
#>  15     0.348    0.256     0.453
#>  20     0.350    0.258     0.455
#>  25     0.352    0.260     0.456
#>  30     0.354    0.261     0.458
#>  35     0.356    0.263     0.460
#>  40     0.357    0.265     0.463
#>  45     0.359    0.266     0.465
#>  ... and 25 more rows.
#> 
#> Adjusted for:
#> *   e42dep = 2.92
#> *  c161sex = 1.76
#> * c172code = 1.97

ggpredict(fit, "c12hour", type = "re")

#> # Predicted probabilities for Negative impact with 7 items 
#> # x = average number of hours of care per week 
#> 
#>   x predicted conf.low conf.high
#>   0     0.472    0.107     0.870
#>   5     0.475    0.108     0.871
#>  10     0.477    0.109     0.872
#>  15     0.479    0.110     0.873
#>  20     0.481    0.111     0.873
#>  25     0.483    0.111     0.874
#>  30     0.485    0.112     0.875
#>  35     0.487    0.113     0.876
#>  40     0.489    0.114     0.877
#>  45     0.491    0.115     0.878
#>  ... and 25 more rows.
#> 
#> Adjusted for:
#> *   e42dep = 2.92
#> *  c161sex = 1.76
#> * c172code = 1.97

答案 1 :(得分:0)

实际上,您通常从具有非线性链接函数的混合模型(例如,混合效应逻辑回归)中获得的系数具有以随机效应为条件的解释。

Hedeker et al. (2018)最近提出了一种利用边际/人口解释获得回归系数的新思路。这是在R包GLMMadaptive的函数marginal_coefs()中实现的,该函数使用自适应高斯正交拟合混合模型。混合效应逻辑回归的一般示例是:

library("GLMMadaptive")
fm <- mixed_model(fixed = y ~ x1 + x2 + x3, random = ~ x1 | id, data = DF, family = binomial())

marginal_coefs(fm)
marginal_coefs(fm, std_errors = TRUE)

有关其他示例(例如,如何获取边际预测或生成效果图),请检查插图:https://drizopoulos.github.io/GLMMadaptive/articles/Methods_MixMod.html