Warum gibt es einen Unterschied zwischen der manuellen Berechnung eines Konfidenzintervalls für eine logistische Regression von 95% und der Verwendung der Funktion confint () in R?

34

Sehr geehrte Damen und Herren, mir ist etwas Merkwürdiges aufgefallen, das ich Ihnen nicht erklären kann. Zusammenfassend lässt sich sagen, dass der manuelle Ansatz zur Berechnung eines Konfidenzintervalls in einem logistischen Regressionsmodell und die R-Funktion confint()unterschiedliche Ergebnisse liefern.

Ich habe die angewandte logistische Regression von Hosmer & Lemeshow (2. Auflage) durchlaufen . Im dritten Kapitel finden Sie ein Beispiel für die Berechnung der Odds Ratio und des 95% -Konfidenzintervalls. Mit R kann ich das Modell leicht reproduzieren:

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

Wenn ich jedoch die Konfidenzintervalle der Parameter berechne, erhalte ich ein anderes Intervall als im Text angegeben:

> 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 schlagen folgende Formel vor:

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

und sie berechnen das Konfidenzintervall für as.factor(dataset$dich.age)1(2.9, 22.9).

Dies scheint in R unkompliziert zu sein:

# 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])

gibt die gleiche Antwort wie das Buch.

Überlegen Sie jedoch, warum confint()sich unterschiedliche Ergebnisse ergeben? Ich habe viele Beispiele von Leuten gesehen, die es benutzen confint().

Andrew
quelle
1
Würde es Ihnen etwas ausmachen, den genauen Literaturhinweis für Hosmer & Lemeshow hinzuzufügen? Ich habe lange nach dem Vorschlag in ihren Publikationen und Büchern gesucht, ihn aber noch nicht gefunden.
DavidR

Antworten:

36

Nachdem ich die Daten von der zugehörigen Website abgerufen habe, gehe ich folgendermaßen vor:

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)

Die 95% CIs basierend auf der Profilwahrscheinlichkeit werden mit erhalten

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

Dies ist häufig die Standardeinstellung, wenn das MASSPaket automatisch geladen wird. In diesem Fall bekomme ich

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

Wenn ich nun mit 95% Wald-CIs (basierend auf asymptotischer Normalität) vergleichen möchte, wie Sie sie von Hand berechnet haben, würde ich confint.default()stattdessen verwenden. Dies ergibt

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

Wald-CIs sind in den meisten Situationen gut, obwohl die Profilwahrscheinlichkeit bei komplexen Stichprobenstrategien hilfreich sein kann. Wenn Sie wissen möchten, wie sie funktionieren, finden Sie hier einen kurzen Überblick über die wichtigsten Prinzipien: Konfidenzintervalle nach der Profilwahrscheinlichkeitsmethode bei Anwendungen in der Veterinärepidemiologie . Sie können sich auch das MASS-Buch von Venables und Ripley (§8.4, S. 220-221) ansehen.

chl
quelle
25

Follow-up: Profil-Konfidenzintervalle sind zuverlässiger (die Auswahl des geeigneten Grenzwerts für die Wahrscheinlichkeit beinhaltet eine asymptotische Annahme (große Stichprobe), dies ist jedoch eine viel schwächere Annahme als die den Wald-Konfidenzintervallen zugrunde liegende quadratische Wahrscheinlichkeitsoberflächenannahme). Soweit ich weiß, gibt es kein Argument für die Wald-Statistiken über die Profilvertrauensintervalle, außer dass die Wald-Statistiken viel schneller berechnet werden können und unter vielen Umständen "gut genug" sind (aber manchmal weit davon entfernt: Schauen Sie sich die Hauck-Statistiken an. Donner-Effekt).

Ben Bolker
quelle
2
Vielen Dank dafür und für den Vorschlag, den Hauck-Donner-Effekt nachzuschlagen. Der Effekt wird in Lehrbüchern nicht viel behandelt, scheint aber ziemlich wichtig zu sein!
Andrew
18

Ich glaube, wenn Sie in der Hilfedatei nach confint () suchen, werden Sie feststellen, dass das zu erstellende Konfidenzintervall ein "Profil" -Intervall anstelle eines Wald-Konfidenzintervalls ist (Ihre Formel aus HL).

B_Miner
quelle
5
Ahh. Das beantwortet die Frage. Es führt jedoch zum nächsten - welches ist vorzuziehen?
Andrew