之前曾有人问过这个问题的各种变化(例如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(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的相同概率。所以,最后我的问题是:
答案 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