Dovrei avviare il bootstrap a livello di cluster o individuale?


10

Ho un modello di sopravvivenza con i pazienti nidificati negli ospedali che include un effetto casuale per gli ospedali. L'effetto casuale è distribuito gamma e sto cercando di riportare la "pertinenza" di questo termine su una scala che è facilmente comprensibile.

Ho trovato i seguenti riferimenti che usano il Rapporto di rischio mediano (un po 'come il Rapporto di probabilità mediano) e ho calcolato questo.

Bengtsson T, Dribe M: Historical Methods 43:15, 2010

Tuttavia, ora desidero segnalare l'incertezza associata a questa stima utilizzando il bootstrap. I dati sono dati di sopravvivenza e quindi ci sono più osservazioni per paziente e più pazienti per ospedale. Sembra ovvio che ho bisogno di raggruppare le osservazioni del paziente durante il ricampionamento. Ma non so se dovrei raggruppare anche gli ospedali (ad esempio ricampionare gli ospedali, piuttosto che i pazienti?

Mi chiedo se la risposta dipende dal parametro di interesse, e quindi sarebbe diverso se l'obiettivo fosse qualcosa di rilevante a livello di paziente piuttosto che a livello di ospedale?

Ho elencato di seguito il codice Era nel caso in cui ciò aiuti.

cap program drop est_mhr
program define est_mhr, rclass
stcox patient_var1 patient_var2 ///
    , shared(hospital) ///
    noshow
local twoinvtheta2 = 2 / (e(theta)^2)
local mhr = exp(sqrt(2*e(theta))*invF(`twoinvtheta2',`twoinvtheta2',0.75))
return scalar mhr = `mhr'
end

bootstrap r(mhr), reps(50) cluster(hospital): est_mhr

Risposte:


2

Immagina di aver condotto uno studio sui risultati scolastici dei bambini. Hai preso un campione casuale di scuole da alcune aree e da ogni scuola è stata inclusa una classe nello studio. Hai condotto analisi e ora desideri utilizzare il bootstrap per ottenere intervalli di confidenza per le tue stime. Come farlo?

Innanzitutto, nota che i tuoi dati sono gerarchici, hanno diversi livelli: scuole, classi all'interno delle scuole e studenti all'interno delle classi. Poiché esiste una sola classe per scuola, quindi il secondo livello è inesistente nei tuoi dati. Possiamo presumere che ci siano alcune somiglianze all'interno delle scuole e differenze tra le scuole. Se ci sono somiglianze all'interno delle scuole, se campionassi gli alunni a caso, non prendendo in considerazione la loro appartenenza alla scuola, potresti distruggere la struttura gerarchica dei tuoi dati.

In generale, ci sono diverse opzioni:

  1. studenti campione con sostituzione,
  2. assaggiare intere scuole con la sostituzione,
  3. prima campionare le scuole con la sostituzione e poi campionare gli studenti (a) con la sostituzione, o (b) senza sostituzione.

Sembra che il primo approccio sia il peggiore. Ricorda che il campionamento bootstrap dovrebbe in qualche modo imitare il processo di campionamento nel tuo studio e stavi campionando scuole piuttosto che singoli studenti. Scegliere tra (2) e (3) è più complicato, ma si spera che si possano trovare articoli di ricerca considerando questo argomento (es. Rena et al. 2010, Field and Welsh, 2007). Generalmente sono preferibili le opzioni (2) o (3b) in quanto sembra che includere troppi livelli di campionamento con la sostituzione porti a risultati distorti. Puoi trovare ulteriori informazioni su questo argomento anche nei libri di Efron e Tibshirani (1994) e Davison e Hinkley (1997). Si noti che abbiamo un problema simile con i dati delle serie temporali di bootstrape in questo caso preferiamo anche campionare interi blocchi di serie (ad esempio l'intera stagione se assumiamo la stagionalità) piuttosto che osservazioni individuali perché altrimenti la struttura temporale verrebbe distrutta. In pratica non esiste una soluzione unica per tutti, ma con strutture di dati complicate dovresti scegliere tale schema di campionamento bootstrap che si adatta meglio ai tuoi dati e al tuo problema e, se possibile, utilizzare uno studio di simulazione per confrontare diverse soluzioni.


Davison, AC e Hinkley, DV (1997). Metodi Bootstrap e loro applicazione. Cambridge.

Efron, B. e Tibshirani, RJ (1994). Un'introduzione al Bootstrap . CRC Press.

Ren, S., Lai, H., Tong, W., Aminzadeh, M., Hou, X., & Lai, S. (2010). Bootstrap non parametrico per dati gerarchici. Journal of Applied Statistics, 37 (9), 1487-1498.

Field, CA e Welsh, AH (2007). Bootstrapping dei dati cluster. Giornale della Royal Statistical Society: Series B (Statistical Methodology), 69 (3), 369-390.


1
Ho accettato la tua risposta (grazie), ma per altri ora ho implementato una funzione in R per farlo nella mia risposta
drstevok,

3

La risposta sembra essere che il processo di ricampionamento debba tenere conto della struttura dei dati. C'è una bella spiegazione qui (insieme ad un codice R per implementarlo).

http://biostat.mc.vanderbilt.edu/wiki/Main/HowToBootstrapCorrelatedData

Grazie al puntatore del Gruppo di consulenza statistica dell'UCLA .

Ho scritto una versione più rapida (ma meno flessibile) dello snippet di codice collegato sopra - controlla qui per aggiornamenti e dettagli.

rsample2 <- function(data=tdt, id.unit=id.u, id.cluster=id.c) {
require(data.table)

setkeyv(tdt,id.cluster)
# Generate within cluster ID (needed for the sample command)
tdt[, "id.within" := .SD[,.I], by=id.cluster, with=FALSE]

# Random sample of sites
bdt <- data.table(sample(unique(tdt[[id.cluster]]), replace=TRUE))
setnames(bdt,"V1",id.cluster)
setkeyv(bdt,id.cluster)

# Use random sample of sites to select from original data
# then
# within each site sample with replacement using the within site ID
bdt <- tdt[bdt, .SD[sample(.SD$id.within, replace=TRUE)],by=.EACHI]

# return data sampled with replacement respecting clusters
bdt[, id.within := NULL] # drop id.within
return(bdt)
}
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.