Berechnung der Konfidenzintervalle für eine logistische Regression

15

Ich verwende eine binomiale logistische Regression, um zu ermitteln, ob ein Benutzer mit der Wahrscheinlichkeit auf etwas klickt has_xoder es has_ybeeinträchtigt. Mein Modell ist das folgende:

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

Dies ist die Ausgabe von meinem Modell:

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

Da jeder Koeffizient signifikant ist, kann ich anhand dieses Modells anhand des folgenden Ansatzes feststellen, welchen Wert eine dieser Kombinationen hat:

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

Ich verstehe nicht, wie ich über den Std. Berichten kann. Fehler der Vorhersage.

  1. Muss ich einfach bedienen ? Oder muss ich den S E nach einem hier beschriebenen Ansatz konvertieren ?1.96SESE

  2. Wenn ich den Standardfehler für beide Variablen verstehen möchte, wie würde ich das betrachten?

Im Gegensatz zu dieser Frage bin ich daran interessiert zu verstehen, wie hoch der Prozentsatz der oberen und unteren Fehlergrenze ist. Zum Beispiel zeigt meine Vorhersage einen Wert von 37% für True,Truekann ich berechnen, dass dies für 95 % C I ist ? (0,3% ausgewählt, um meinen Standpunkt zu veranschaulichen)+/0.395%CI

Celenius
quelle
Duplizieren: stats.stackexchange.com/questions/5304/…
kjetil b halvorsen
@kjetilbhalvorsen Sind Sie sicher, dass es sich um ein Duplikat handelt, da das OP anscheinend ein Vorhersageintervall wünscht, aber eher auf der OR-Skala als auf der Protokollskala arbeitet, die die Ursache des Problems sein könnte?
mdewey
2
Wenn Sie auswerten möchten, wie gut eine logistische Regression prognostiziert, verwendet man normalerweise andere Kennzahlen als prognostiziert + SE. Eine beliebte Bewertungsmaßnahme ist die ROC-Kurve mit jeweiliger AUC
Adibender
1
Könnte dies hilfreich sein? stackoverflow.com/questions/47414842/…
Xavier Bourret Sicotte

Antworten:

24

Ihre Frage kann von der Tatsache herrühren, dass Sie mit Odds Ratios und Wahrscheinlichkeiten zu tun haben, was zunächst verwirrend ist. Da das logistische Modell eine nichtlineare Transformation von Berechnung der Konfidenzintervalle nicht so einfach.βTx

Hintergrund

Erinnern Sie sich daran für das logistische Regressionsmodell

  • Wahrscheinlichkeit von : p = e α + β 1 × 1 + β 2 × 2(Y=1)p=eα+β1x1+β2x21+eα+β1x1+β2x2

  • Wahrscheinlichkeit von : ( p(Y=1)(p1p)=eα+β1x1+β2x2

  • Log Quoten von : log ( p(Y=1)log(p1p)=α+β1x1+β2x2

Stellen Sie sich den Fall vor, dass Sie die Variable um eine Einheit erhöhen , dh x 1 + 1 , dann sind die neuen Gewinnchancenx1x1+1

Odds(Y=1)=eα+β1(x1+1)+β2x2=eα+β1x1+β1+β2x2
  • Odds Ratio (OR) sind daher

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

  • Relatives Risiko oder (Wahrscheinlichkeitsverhältnis) = eα+β1x1+β1+β2x21+eα+β1x1+β1+β2x2eα+β1x1+β2x21+eα+β1x1+β2x2

Koeffizienten interpretieren

Wie würden Sie den Koeffizientenwert interpretieren ? Angenommen, alles andere bleibt fest:βj

  • Für jede Einheitserhöhung in erhöht sich das Log-Odds-Verhältnis um β j .xjβj
  • Für jede Einheitserhöhung von erhöht sich das Gewinnchancenverhältnis um e β j .xjeβj
  • Für jede Erhöhung von vonxj auf k + Δ erhöht sich das Odds Ratio um e β j Δkk+ΔeβjΔ
  • Wenn der Koeffizient negativ ist , dann wird ein Anstieg in - Verhältnis führt zu einer Abnahme in den Quoten.xj

Konfidenzintervalle für einen einzelnen Parameter βj

Muss ich einfach bedienen ? Oder muss ich die SE nach einem hier beschriebenen Ansatz konvertieren?1.96SE

Da der Parameter unter Verwendung der Maxiumum-Likelihood-Schätzung geschätzt wird, sagt uns die MLE-Theorie, dass er asymptotisch normal ist, und daher können wir das große Stichproben- Wald- Konfidenzintervall verwenden, um das Übliche zu erhaltenβj

βj±zSE(βj)

Dies gibt ein Konfidenzintervall für das Log-Odds-Verhältnis. Unter Verwendung der Invarianz - Eigenschaft des MLE ermöglicht es uns , potenzieren zu bekommen

eβj±zSE(βj)

Das ist ein Konfidenzintervall für die Odds Ratio. Beachten Sie, dass diese Intervalle nur für einen einzelnen Parameter gelten.

Wenn ich den Standardfehler für beide Variablen verstehen möchte, wie würde ich das betrachten?

Wenn Sie mehrere Parameter angeben, können Sie das Bonferroni-Verfahren verwenden, andernfalls können Sie für alle Parameter das Konfidenzintervall für Wahrscheinlichkeitsschätzungen verwenden

Bonferroni-Verfahren für mehrere Parameter

g1α

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

Konfidenzintervalle für Wahrscheinlichkeitsschätzungen

pPr(pLppU)=.95

Ein Ansatz namens Endpunkttransformation führt Folgendes aus:

  • 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) and then applying the logit transform to the result to get the lower and upper bounds:

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

The estimated approximate variance of xTβ can be calculated using the covariance matrix of the regression coefficients using

Var(xTβ)=xTΣx

The advantage of this method is that the bounds cannot be outside the range (0,1)

There are several other approaches as well, using the delta method, bootstrapping etc.. which each have their own assumptions, advantages and limits.


Sources and info

My favorite book on this topic is "Applied Linear Statistical Models" by Kutner, Neter, Li, Chapter 14

Otherwise here are a few online sources:

Xavier Bourret Sicotte
quelle
Much of this is about CI for the coefficients which is a fine thing for the OP to know about but are we sure that is what he needs? You later section seems to me more relevant but perhaps the distinctions may be missed if read too quickly?
mdewey
2
Yes you are probably right - but understanding odds, log odds and probabilities for log regression is something I struggled with in the past - I hope this post summarises the topic well enough to such that it might help someone in the future. Perhaps I could answer the question more explicitly by providing a CI but we would need the covariance matrix
Xavier Bourret Sicotte
4

To get the 95% confidence interval of the prediction you can calculate on the logit scale and then convert those back to the probability scale 0-1. Here is an example using the titanic dataset.

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)

The mean and low/high 95% CI.

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

And the output from just using type='response', which only gives the mean

predict(fit, data.frame(Sex='male', Pclass='First'), type='response')
        1 
0.4146556
Shawn
quelle
predict(fit, data.frame(Sex='male', Pclass='First'), type='response', se.fit=TRUE) will work.
Tony416