为什么手动计算逻辑回归 95% 置信区间与在 R 中使用 confint() 函数之间存在差异?

机器算法验证 r 回归 物流 置信区间 轮廓似然
2022-01-19 10:20:39

亲爱的大家——我发现了一些我无法解释的奇怪现象,你可以吗?总结:在逻辑回归模型中计算置信区间的手动方法和 R 函数confint()给出不同的结果。

我一直在研究 Hosmer & Lemeshow 的应用逻辑回归(第 2 版)。在第 3 章中,有一个计算优势比和 95% 置信区间的示例。使用 R,我可以轻松地重现模型:

Call:
glm(formula = dataset$CHD ~ as.factor(dataset$dich.age), family = "binomial")

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-1.734  -0.847  -0.847   0.709   1.549  

Coefficients:
                             Estimate Std. Error z value Pr(>|z|)    
(Intercept)                   -0.8408     0.2551  -3.296  0.00098 ***
as.factor(dataset$dich.age)1   2.0935     0.5285   3.961 7.46e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 136.66  on 99  degrees of freedom
Residual deviance: 117.96  on 98  degrees of freedom
AIC: 121.96

Number of Fisher Scoring iterations: 4

但是,当我计算参数的置信区间时,我得到的区间与文本中给出的区间不同:

> exp(confint(model))
Waiting for profiling to be done...
                                 2.5 %     97.5 %
(Intercept)                  0.2566283  0.7013384
as.factor(dataset$dich.age)1 3.0293727 24.7013080

Hosmer & Lemeshow 建议使用以下公式:

e[β^1±z1α/2×SE^(β^1)]

他们计算出置信区间为as.factor(dataset$dich.age)1(2.9, 22.9)。

这在 R 中似乎很简单:

# upper CI for beta
exp(summary(model)$coefficients[2,1]+1.96*summary(model)$coefficients[2,2])
# lower CI for beta
exp(summary(model)$coefficients[2,1]-1.96*summary(model)$coefficients[2,2])

给出了和书上一样的答案。

confint()但是,关于为什么似乎给出不同结果的任何想法?我见过很多人使用confint().

3个回答

随附的网站获取数据后,我将这样做:

chdage <- read.table("chdage.dat", header=F, col.names=c("id","age","chd"))
chdage$aged <- ifelse(chdage$age>=55, 1, 0)
mod.lr <- glm(chd ~ aged, data=chdage, family=binomial)
summary(mod.lr)

基于轮廓似然性的 95% CI 是通过以下方式获得的

require(MASS)
exp(confint(mod.lr))

MASS如果包是自动加载的,这通常是默认设置。在这种情况下,我得到

                2.5 %     97.5 %
(Intercept) 0.2566283  0.7013384
aged        3.0293727 24.7013080

现在,如果我想与您手动计算的 95% Wald CI(基于渐近正态性)进行比较,我会confint.default()改用;这产生

                2.5 %     97.5 %
(Intercept) 0.2616579  0.7111663
aged        2.8795652 22.8614705

Wald CI 在大多数情况下都很好,尽管基于轮廓似然性可能对复杂的抽样策略有用。如果您想了解它们的工作原理,以下是主要原理的简要概述:轮廓似然法的置信区间,以及在兽医流行病学中的应用您还可以查看 Venables 和 Ripley 的 MASS 书籍,第 8.4 节,第 220-221 页。

跟进:轮廓置信区间更可靠(为可能性选择适当的截止值确实涉及渐近(大样本)假设,但这是一个比 Wald 置信区间下的二次似然面假设弱得多的假设)。据我所知,Wald 统计量在配置文件置信区间上没有任何争论,除了 Wald 统计量计算起来要快得多并且在许多情况下可能“足够好”(但有时很差:查找 Hauck-唐纳效应)。

我相信,如果您查看 confint() 的帮助文件,您会发现正在构建的置信区间是“配置文件”区间而不是 Wald 置信区间(您来自 HL 的公式)。