Welches Bootstrap-Regressionsmodell sollte ich wählen?

10

Ich habe ein binäres logistisches Regressionsmodell mit einem DV (Krankheit: Ja / Nein) und 5 Prädiktoren (Demografie [Alter, Geschlecht, Tabakrauchen (Ja / Nein)], einem medizinischen Index (Ordnungszahl) und einer zufälligen Behandlung [Ja / Nein ]). Ich habe auch alle zweiseitigen Interaktionsterme modelliert. Die Hauptvariablen sind zentriert und es gibt keine Anzeichen von Multikollinearität (alle VIFs <2,5).

Ich habe ein paar Fragen:

  1. Ist Bootstrapping gegenüber meinem Einzelmodell von Vorteil? wenn ja,

  2. Welches Bootstrap-Modell soll ich wählen? Ich wollte nur sehen, ob Bootstrapping-Algorithmen zufälligen Methoden zum Erstellen neuer Samples folgen oder ob sie starre Algorithmen haben. Daher habe ich bei jedem Versuch 1000 Mal ein Resampling durchgeführt (daher habe ich mehrere Bootstrap-Modelle mit jeweils 1000 Versuchen). Jedes Mal unterscheiden sich jedoch die Koeffizienten des Bootstrap-Modells (obwohl die Anzahl der Versuche konstant 1000 beträgt). Ich frage mich also, welches ich für meinen Bericht auswählen soll. Einige Änderungen sind winzig und wirken sich nicht auf die Signifikanz meiner Koeffizienten aus, andere machen einige meiner Koeffizienten nicht signifikant (nur diejenigen mit P-Werten nahe 0,05 im ursprünglichen Modell, die sich beispielsweise auf 0,06 ändern).

  3. Sollte ich eine höhere Zahl wie 10.000 wählen? Wie kann ich dieses Limit bestimmen?

  4. Sollte ich überhaupt wieder booten? Kann ich mich auf die Ergebnisse verlassen, wenn die Ergebnisse jedes Mal variieren?

  5. Haben Sie andere Ideen, die mir bei meinem Fall helfen können?

Vielen, vielen Dank.

Vic
quelle

Antworten:

21

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.

  1. 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.bootRGibt beispielsweise die "Verzerrung" an, die die Differenz zwischen den Regressionskoeffizienten Ihres einzelnen Modells und dem Mittelwert der Bootstrap-Stichproben darstellt.
  2. 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.
  3. 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.
  4. 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.

COOLSerdash
quelle
DANKE für die perfekte Antwort! :) Lassen Sie mich folgendermaßen antworten: 1. Ich war ein wenig mit seiner Vorstellung vertraut (dass versucht wird, den Mittelwert für 1000 verschiedene Koeffizienten in 1000 verschiedenen (neu abgetasteten) Modellen zu berechnen). Vielen Dank für die Klarstellung dieser "Voreingenommenheit" und der Tatsache, dass solche Abweichungen auftreten und wir die Anzahl der Versuche erhöhen sollten. :) 2. Mit "Bootstrapped Model" meinte ich nicht ein einziges neu abgetastetes Modell. Ich meinte jedoch den Mittelwert dieser 1000 Iterationen. Eigentlich habe ich mein Modell 10 Mal gebootet, jeweils für 1000 Iterationen. Ich habe also 10 Bootstrap-Modelle zur Hand.
Vic
Jeder von ihnen zeigt ein "anderes" Ergebnis. Aber ich würde drei oder vier Bootstrap-Modelle mit 10.000 Resamplings ausprobieren, um zu sehen, ob die Anzahl der Iterationen bei 10.000 liegt, die verschiedenen Bootstrap-Modelle (jeweils mit 10000) ähnlich sind oder sollte ich diese 100000 noch weiter erhöhen?
Vic
@Vic Danke für deinen Kommentar. Ich würde nicht 10 Bootstraps mit jeweils 1000 Iterationen machen, sondern nur einen mit beispielsweise 10'000 oder noch mehr Iterationen (50'000?). Dies sollte Ihnen stabile Schätzungen und Konfidenzintervalle geben.
COOLSerdash
3. Sicher ist das kein Problem. Ich wollte nur wissen, auf welcher Basis man diese Nummer wählen soll? Ich denke, die Basis kann sein, dass wenn ich zwei Bootstrappings mit jeweils 1000 Versuchen durchführe und sehe, dass sie sich unterscheiden, dies bedeutet, dass ich stattdessen mehr Resampling-Versuche (zum Beispiel 5000 oder 10000) benötige.
Vic
4. "Was meinst du mit" die Ergebnisse variieren jedes Mal "? Wenn Ihre Anzahl an Replikationen hoch genug ist, sollte der Bootstrap jedes Mal sehr ähnliche Konfidenzintervalle und Punktschätzungen liefern."
Vic