Il bootstrap è un metodo di ricampionamento per stimare la distribuzione campionaria dei coefficienti di regressione e quindi calcolare gli errori standard / intervalli di confidenza dei coefficienti di regressione. Questo post ha una bella spiegazione. Per una discussione su quante repliche hai bisogno, vedi questo post.
- Il bootstrap non parametrico ricampiona ripetutamente e casualmente disegna le tue osservazioni con la sostituzione (cioè alcune osservazioni vengono disegnate una sola volta, altre più volte e alcune mai), quindi calcola la regressione logistica e memorizza i coefficienti. Questo si ripetenvolte. Quindi finirai con 10'000 diversi coefficienti di regressione. Questi 10'000 coefficienti possono quindi essere utilizzati per calcolare la loro affidabilità. Quando viene utilizzato un generatore di numeri pseudo-casuale, è possibile semplicemente impostare il seme su un numero arbitrario per assicurarsi di avere sempre gli stessi risultati ogni volta (vedere l'esempio di seguito). Per avere stime stabili, suggerirei più di 1000 repliche, forse 10'000. È possibile eseguire il bootstrap più volte e vedere se le stime cambiano molto se si eseguono 1000 o 10'000 repliche. In parole povere: dovresti prendere le repliche fino a raggiungere la convergenza. Se le stime del bootstrap variano tra le stime e il modello singolo osservato, ciò potrebbe indicare che il modello osservato non riflette adeguatamente la struttura del campione.
boot
R
, ad esempio, mette in evidenza il "bias" che è la differenza tra i coefficienti di regressione del singolo modello e la media dei campioni bootstrap.
- Quando si esegue il bootstrap, non si è interessati a un singolo campione bootstrap, ma alla distribuzione di statistiche (ad esempio coefficienti di regressione) su, diciamo, 10'000 campioni bootstrap.
- Direi 10'000 è meglio di 1000. Con i computer moderni, questo non dovrebbe costituire un problema. Nell'esempio seguente, il mio PC ha impiegato circa 45 secondi per disegnare 10.000 campioni. Questo varia ovviamente con la dimensione del campione. Maggiore è la dimensione del campione, maggiore dovrebbe essere il numero di iterazioni per garantire che ogni osservazione sia presa in considerazione.
- Cosa intendi con "i risultati variano ogni volta"? Ricordiamo che in ogni passaggio del bootstrap, le osservazioni vengono nuovamente disegnate con la sostituzione. Pertanto, è probabile che si ottengano coefficienti di regressione leggermente diversi perché le osservazioni sono diverse. Ma come ho già detto: non sei veramente interessato al risultato di un singolo campione di bootstrap. Quando il numero di repliche è abbastanza elevato, il bootstrap dovrebbe produrre intervalli di confidenza e stime dei punti molto simili ogni volta.
Ecco un esempio 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 )
Bootstrap-ouput visualizza i coefficienti di regressione originali ("originali") e la loro distorsione, che è la differenza tra i coefficienti originali e quelli avviati. Dà anche gli errori standard. Si noti che sono leggermente più grandi degli errori standard originali.
A partire dagli intervalli di confidenza, i bias corretti ("bca") sono generalmente preferiti. Fornisce gli intervalli di confidenza sulla scala originale. Per intervalli di confidenza per gli odds ratio, esponere i limiti di confidenza.