计算逻辑回归的置信区间


15

我正在使用二项式逻辑回归来确定是否暴露has_xhas_y影响用户点击某事的可能性。我的模型如下:

fit = glm(formula = has_clicked ~ has_x + has_y, 
          data=df, 
          family = binomial())

这是我模型的输出:

Call:
glm(formula = has_clicked ~ has_x + has_y, 
    family = binomial(), data = active_domains)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9869  -0.9719  -0.9500   1.3979   1.4233  

Coefficients:
                      Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -0.504737   0.008847 -57.050  < 2e-16 ***
has_xTRUE -0.056986   0.010201  -5.586 2.32e-08 ***
has_yTRUE  0.038579   0.010202   3.781 0.000156 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 217119  on 164182  degrees of freedom
Residual deviance: 217074  on 164180  degrees of freedom
AIC: 217080

Number of Fisher Scoring iterations: 4

由于每个系数都很重要,因此使用此模型,我可以使用以下方法判断这些组合中的任何一个的值:

predict(fit, data.frame(has_x = T, has_y=T), type = "response")

我不了解如何报告性病。预测错误。

  1. 我仅需要使用吗?或者我需要转换的 小号Ë使用所描述的方法在这里1.96SESE

  2. 如果我想了解两个变量的标准误差,我将如何考虑?

True,True+/0.395%CI




@kjetilbhalvorsen您确定它是重复项,因为OP似乎想要一个预测间隔,但似乎在OR尺度而不是对数尺度上工作,这可能是问题的根源?
mdewey

2
如果要评估逻辑回归的预测效果,通常使用与预测+ SE不同的方法。一种流行的评估方法是将ROC曲线与AUC一起使用
-adibender

Answers:


24

βTx

背景

回想一下Logistic回归模型

  • (Y=1)p=eα+β1x1+β2x21+eα+β1x1+β2x2

  • (Y=1)(p1p)=eα+β1x1+β2x2

  • (Y=1)log(p1p)=α+β1x1+β2x2

x1x1+1

Odds(Y=1)=eα+β1(x1+1)+β2x2=eα+β1x1+β1+β2x2
  • 因此,赔率(OR)

Odds(x1+1)Odds(x1)=eα+β1(x1+1)+β2x2eα+β1x1+β2x2=eβ1
  • β1

  • eα+β1x1+β1+β2x21+eα+β1x1+β1+β2x2eα+β1x1+β2x21+eα+β1x1+β2x2

解释系数

βj

  • xjβj
  • xjeβj
  • xjkk+ΔeβjΔ
  • xj

βj

1.96SE

βj

βj±zSE(βj)

eβj±zSE(βj)

这是几率的置信区间。请注意,这些间隔仅适用于单个参数。

如果我想了解两个变量的标准误差,我将如何考虑?

如果包含多个参数,则可以使用Bonferroni过程;否则,对于所有参数,可以将置信区间用于概率估计

Bonferroni程序的几个参数

g1α

βg±z(1α2g)SE(βg)

概率估计的置信区间

pPr(pLppU)=.95

一种称为端点转换的方法执行以下操作:

  • xTβ
  • F(xTβ)

Pr(xTβ)=F(xTβ)xTβ

[Pr(xTβ)LPr(xTβ)Pr(xTβ)U]=[F(xTβ)LF(xTβ)F(xTβ)U]

βTx±zSE(βTx)

[exTβzSE(xTβ)1+exTβzSE(xTβ),exTβ+zSE(xTβ)1+exTβ+zSE(xTβ),]

xTβ

Var(xTβ)=xTΣx

(0,1)

还有其他几种方法,使用delta方法,bootstrapping等。每种方法都有自己的假设,优势和局限性。


来源和信息

关于该主题,我最喜欢的书是库特纳的《应用线性统计模型》(第14章)

否则,这里有一些在线资源:


其中大部分与系数的CI有关,这对OP来说是一件好事,但我们确定这就是他的需求吗?在我看来,您的下一部分似乎更有意义,但是如果阅读得太快,也许可能会错过区别?
mdewey

2
是的,您可能是对的-但过去我一直在努力理解对数,对数奇数和对数回归的概率-我希望本文能对本主题进行足够的总结,以至将来对某人有所帮助。也许我可以通过提供CI来更明确地回答这个问题,但是我们需要协方差矩阵
Xavier Bourret Sicotte

5

要获得95%的预测置信区间,您可以按对数标度进行计算,然后将其转换回概率标度0-1。这是使用泰坦尼克号数据集的示例。

library(titanic)
data("titanic_train")

titanic_train$Pclass = factor(titanic_train$Pclass, levels = c(1,2,3), labels = c('First','Second','Third'))

fit = glm(Survived ~ Sex + Pclass, data=titanic_train, family = binomial())

inverse_logit = function(x){
  exp(x)/(1+exp(x))
}

predicted = predict(fit, data.frame(Sex='male', Pclass='First'), type='link', se.fit=TRUE)

se_high = inverse_logit(predicted$fit + (predicted$se.fit*1.96))
se_low = inverse_logit(predicted$fit - (predicted$se.fit*1.96))
expected = inverse_logit(predicted$fit)

平均和低/高95%CI。

> expected
        1 
0.4146556 
> se_high
        1 
0.4960988 
> se_low
        1 
0.3376243 

而仅使用的输出type='response',仅给出平均值

predict(fit, data.frame(Sex='male', Pclass='First'), type='response')
        1 
0.4146556

predict(fit, data.frame(Sex='male', Pclass='First'), type='response', se.fit=TRUE)将工作。
Tony416 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.