Bootstrapping ist eine Resampling-Methode, um die Stichprobenverteilung Ihrer Regressionskoeffizienten abzuschätzen und daher die Standardfehler / Konfidenzintervalle Ihrer Regressionskoeffizienten zu berechnen. Dieser Beitrag hat eine schöne Erklärung. Eine Diskussion darüber, wie viele Replikationen Sie benötigen, finden Sie in diesem Beitrag.
- Der nichtparametrische Bootstrap wird wiederholt und zufällig Ihre Beobachtungen durch Ersetzen neu abgetastet (dh einige Beobachtungen werden nur einmal, andere mehrmals und einige überhaupt nicht gezeichnet), berechnet dann die logistische Regression und speichert die Koeffizienten. Dies wird wiederholtnmal. Sie erhalten also 10'000 verschiedene Regressionskoeffizienten. Diese 10'000 Koeffizienten können dann verwendet werden, um ihre Vertrauenswerte zu berechnen. Da ein Pseudozufallszahlengenerator verwendet wird, können Sie den Startwert einfach auf eine beliebige Zahl setzen, um sicherzustellen, dass Sie jedes Mal genau die gleichen Ergebnisse erzielen (siehe Beispiel unten). Um wirklich stabile Schätzungen zu haben, würde ich mehr als 1000 Replikationen vorschlagen, vielleicht 10'000. Sie können den Bootstrap mehrmals ausführen und feststellen, ob sich die Schätzungen stark ändern, unabhängig davon, ob Sie 1000 oder 10'000 Replikationen durchführen. Im Klartext: Sie sollten Replikationen durchführen, bis Sie die Konvergenz erreicht haben. Wenn Ihre Bootstrap-Schätzungen zwischen Ihren Schätzungen und dem beobachteten Einzelmodell variieren, kann dies darauf hinweisen, dass das beobachtete Modell die Struktur Ihrer Stichprobe nicht angemessen widerspiegelt.
boot
R
Gibt beispielsweise die "Verzerrung" an, die die Differenz zwischen den Regressionskoeffizienten Ihres einzelnen Modells und dem Mittelwert der Bootstrap-Stichproben darstellt.
- Wenn Sie den Bootstrap durchführen, interessieren Sie sich nicht für ein einzelnes Bootstrap-Beispiel, sondern für die Verteilung von Statistiken (z. B. Regressionskoeffizienten) über beispielsweise 10'000 Bootstrap-Beispiele.
- Ich würde sagen, 10'000 ist besser als 1000. Mit modernen Computern sollte dies kein Problem darstellen. Im folgenden Beispiel hat mein PC ungefähr 45 Sekunden gebraucht, um 10'000 Proben zu zeichnen. Dies hängt natürlich von Ihrer Stichprobengröße ab. Je größer Ihre Stichprobe ist, desto höher sollte die Anzahl der Iterationen sein, um sicherzustellen, dass jede Beobachtung berücksichtigt wird.
- Was meinst du mit "die Ergebnisse variieren jedes Mal"? Denken Sie daran, dass in jedem Bootstrap-Schritt die Beobachtungen mit Ersatz neu gezeichnet werden. Daher werden Sie wahrscheinlich leicht unterschiedliche Regressionskoeffizienten haben, da sich Ihre Beobachtungen unterscheiden. Aber wie gesagt: Sie interessieren sich nicht wirklich für das Ergebnis eines einzelnen Bootstrap-Beispiels. Wenn Ihre Anzahl an Replikationen hoch genug ist, sollte der Bootstrap jedes Mal sehr ähnliche Konfidenzintervalle und Punktschätzungen liefern.
Hier ist ein Beispiel in R
:
library(boot)
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
head(mydata)
mydata$rank <- factor(mydata$rank)
my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(my.mod)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# Set up the non-parametric bootstrap
logit.bootstrap <- function(data, indices) {
d <- data[indices, ]
fit <- glm(admit ~ gre + gpa + rank, data = d, family = "binomial")
return(coef(fit))
}
set.seed(12345) # seed for the RNG to ensure that you get exactly the same results as here
logit.boot <- boot(data=mydata, statistic=logit.bootstrap, R=10000) # 10'000 samples
logit.boot
Bootstrap Statistics :
original bias std. error
t1* -3.989979073 -7.217244e-02 1.165573039
t2* 0.002264426 4.054579e-05 0.001146039
t3* 0.804037549 1.440693e-02 0.354361032
t4* -0.675442928 -8.845389e-03 0.329099277
t5* -1.340203916 -1.977054e-02 0.359502576
t6* -1.551463677 -4.720579e-02 0.444998099
# Calculate confidence intervals (Bias corrected ="bca") for each coefficient
boot.ci(logit.boot, type="bca", index=1) # intercept
95% (-6.292, -1.738 )
boot.ci(logit.boot, type="bca", index=2) # gre
95% ( 0.0000, 0.0045 )
boot.ci(logit.boot, type="bca", index=3) # gpa
95% ( 0.1017, 1.4932 )
boot.ci(logit.boot, type="bca", index=4) # rank2
95% (-1.3170, -0.0369 )
boot.ci(logit.boot, type="bca", index=5) # rank3
95% (-2.040, -0.629 )
boot.ci(logit.boot, type="bca", index=6) # rank4
95% (-2.425, -0.698 )
Der Bootstrap-Ausgang zeigt die ursprünglichen Regressionskoeffizienten ("Original") und ihre Vorspannung an, die die Differenz zwischen den ursprünglichen und den Bootstrap-Koeffizienten darstellt. Es gibt auch die Standardfehler. Beachten Sie, dass sie etwas größer sind als die ursprünglichen Standardfehler.
Aus den Konfidenzintervallen werden üblicherweise die vorspannungskorrigierten ("bca") bevorzugt. Es gibt die Konfidenzintervalle auf der ursprünglichen Skala an. Potenzieren Sie für Konfidenzintervalle für die Quotenverhältnisse einfach die Konfidenzgrenzen.