How to obtain profile confidence intervals of the difference in probability of success between two groups from a logit model (glmer)?
我正在努力将从 logit 模型获得的对数优势比配置文件置信区间转换为概率。我想知道如何计算两组之间差异的置信区间。
如果 p 值 > 0.05,则差值的 95% CI 应介于零以下到零以上。但是,我不知道当对数比率必须取幂时如何获得负值。因此,我尝试计算其中一组 (B) 的 CI,并查看 CI 的下端和上端与 A 组估计值的差异是多少。我认为这不是计算差异 CI 的正确方法,因为 A 的估计也是不确定的。
如果有人可以帮助我,我会很高兴。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | library(lme4) # Example data: set.seed(11) treatment = c(rep("A",30), rep("B", 40)) site = rep(1:14, each = 5) presence = c(rbinom(30, 1, 0.6),rbinom(40, 1, 0.8)) df = data.frame(presence, treatment, site) # Likelihood ratio test M0 = glmer(presence ~ 1 + (1|site), family ="binomial", data = df) M1 = glmer(presence ~ treatment + (1|site), family ="binomial", data = df) anova(M1, M0) # Calculating confidence intervals cc <- confint(M1, parm ="beta_") ctab <- cbind(est = fixef(M1), cc) cdat = as.data.frame(ctab) # Function to back-transform to probability (0-1) unlogit = function(y){ y_retransfromed = exp(y)/(1+exp(y)) y_retransfromed } # Getting estimates A_est = unlogit(cdat$est[1]) B_est = unlogit(cdat$est[1] + cdat$est[2]) B_lwr = unlogit(cdat$est[1] + cdat[2,2]) B_upr = unlogit(cdat$est[1] + cdat[2,3]) Difference_est = B_est - A_est # This is how I tried to calculate the CI of the difference Difference_lwr = B_lwr - A_est Difference_upr = B_upr - A_est # However, I believe this is wrong because A_est is also a€?uncertaina€? |
如何得到存在概率之差的置信区间?
我们可以通过以下方式计算平均治疗效果。根据原始数据,创建两个新数据集,其中一个所有单位都接受治疗 A,另一个所有单位都接受治疗 B。现在,根据您的模型估计(在您的情况下为
1 2 3 4 5 6 7 8 9 10 | ate <- function(.) { treat_A <- treat_B <- df treat_A$treatment <-"A" treat_B$treatment <-"B" c("ate" = mean(predict(., newdata = treat_B, type ="response") - predict(., newdata = treat_A, type ="response"))) } ate(M1) # ate # 0.09478276 |
我们如何得到不确定区间?我们可以使用 bootstrap,即使用从原始数据中随机生成的样本多次重新估计模型,每次计算平均处理效果。然后,我们可以使用自举平均治疗效果的分布来计算我们的不确定区间。这里我们使用
生成 100 个模拟
1 | out <- bootMer(M1, ate, seed = 1234, nsim = 100) |
并检查效果的分布:
1 2 3 | quantile(out$t, c(0.025, 0.5, 0.975)) # 2.5% 50% 97.5% # -0.06761338 0.10508751 0.26907504 |