Quale modello di regressione bootstrap dovrei scegliere?


10

Ho un modello di regressione logistica binaria con un DV (malattia: sì / no) e 5 predittori (dati demografici [età, genere, fumo di tabacco (sì / no)], un indice medico (ordinale) e un trattamento casuale [sì / no ]). Ho anche modellato tutti i termini di interazione su due lati. Le variabili principali sono centrate e non vi è alcun segno di multicollinearità (tutti i VIF <2,5).

Ho alcune domande:

  1. Il bootstrap è vantaggioso rispetto al mio modello singolo? se è così,

  2. quale modello bootstrap dovrei scegliere? Volevo solo vedere se gli algoritmi di bootstrap seguono metodi casuali per la creazione di nuovi campioni o se hanno algoritmi rigidi. Pertanto, ho ricampionato per 1000 volte in ogni tentativo (quindi ho diversi modelli avviati, ciascuno con 1000 prove). Tuttavia, ogni volta che i coefficienti del modello bootstrap differiscono (anche se il numero di prove è costantemente 1000). Quindi mi chiedo quale dovrei scegliere per il mio rapporto? Alcune modifiche sono minuscole e non influiscono sulla significatività dei miei coefficienti, ma alcune rendono alcuni dei miei coefficienti non significativi (solo quelli con valori P vicini a 0,05 nel modello originale che cambiano a 0,06 per esempio).

  3. Dovrei scegliere un numero più alto come 10.000? Come posso determinare questo limite?

  4. Ancora una volta dovrei iniziare il bootstrap? Se i suoi risultati variano ogni volta, posso fare affidamento sui suoi risultati?

  5. Hai altre idee in mente che possono aiutarmi con il mio caso?

Molte molte grazie.

Risposte:


21

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.

  1. 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.bootR, ad esempio, mette in evidenza il "bias" che è la differenza tra i coefficienti di regressione del singolo modello e la media dei campioni bootstrap.
  2. 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.
  3. 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.
  4. 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.


GRAZIE per la risposta perfetta! :) Lasciami rispondere in questo modo: 1. Conoscevo un po 'la sua nozione (che tenta di calcolare la media per 1000 coefficienti diversi in 1000 diversi modelli (ricampionati)). Grazie per aver chiarito che cosa "distorce" e che tali variazioni avvengono e dovremmo aumentare il numero di tentativi. :) 2.Per "modello bootstrap" non intendevo un singolo modello ricampionato. Tuttavia, intendevo la media di quelle 1000 iterazioni. In realtà ho riavviato il mio modello per 10 volte, ciascuno per 1000 iterazioni. Quindi ho 10 modelli bootstrap a portata di mano.
Vic

Ognuno di essi mostra un risultato "diverso". Ma proverei tre o quattro modelli con bootstrap con 10.000 ricampionamenti per vedere se il numero di iterazioni è su 10.000, i diversi modelli di bootstrap (ciascuno con 10000) sono simili o dovrei aumentare di 100000 ancora di più?
Vic

@Vic Grazie per il tuo commento. Non farei 10 bootstrap ciascuno con 1000 iterazioni, ma solo uno con, diciamo 10'000 o anche più iterazioni (50'000?). Ciò dovrebbe fornire stime stabili e intervalli di confidenza.
COOLSerdash

3. Sicuro che non sia un problema. Volevo solo sapere su quale base si dovrebbe scegliere quel numero? Penso che la base possa essere che se eseguo due bootstrap di 1000 tentativi ciascuno e vedo che differiscono, ciò significa che invece ho bisogno di più prove di ricampionamento (ad esempio 5000 o 10000).
Vic

4. "Cosa intendi con" i risultati variano ogni volta "? Quando il tuo numero di repliche è abbastanza alto, il bootstrap dovrebbe produrre intervalli di confidenza molto simili e stime puntuali ogni volta".
Vic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.