11 votos

¿Debo realizar el bootstrap a nivel de cluster o a nivel individual?

Tengo un modelo de supervivencia con pacientes anidados en hospitales que incluye un efecto aleatorio para los hospitales. El efecto aleatorio está distribuido de forma gamma, y estoy intentando informar de la "relevancia" de este término en una escala que sea fácilmente comprensible.

He encontrado las siguientes referencias que utilizan la Median Hazard Ratio (un poco como la Median Odds Ratio), y la han calculado.

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

Sin embargo, ahora quiero informar de la incertidumbre asociada a esta estimación utilizando el bootstrap. Los datos son de supervivencia y, por tanto, hay múltiples observaciones por paciente y múltiples pacientes por hospital. Parece obvio que tengo que agrupar las observaciones de los pacientes cuando se realiza el remuestreo. Pero no sé si debo agrupar también los hospitales (es decir, remuestrear los hospitales en lugar de los pacientes).

Me pregunto si la respuesta depende del parámetro de interés y, por tanto, sería diferente si el objetivo fuera algo relevante a nivel de paciente en lugar de a nivel de hospital.

Abajo he puesto el código de Stata por si sirve de ayuda.

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

5voto

Syrplex Puntos 230

La respuesta parece ser que el proceso de remuestreo debe tener en cuenta la estructura de los datos. Hay una buena explicación aquí (junto con un código R para implementarlo).

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

Gracias a la indicación del Grupo de Consultoría Estadística de la UCLA .

He escrito una versión más rápida (pero menos flexible) del fragmento de código enlazado anteriormente - compruebe aquí para conocer las novedades y los detalles.

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)
}

3voto

Dipstick Puntos 4869

Imagina que realizas un estudio sobre los logros educativos de los niños. Ha tomado una muestra aleatoria de escuelas de una zona y ha incluido en el estudio una clase de cada escuela. Has realizado el análisis y ahora quieres utilizar el bootstrap para obtener intervalos de confianza para tus estimaciones. ¿Cómo hacerlo?

En primer lugar, observe que sus datos son jerárquicos, tienen varios niveles: escuelas, clases dentro de las escuelas y estudiantes dentro de las clases. Como sólo hay una clase por escuela, el segundo nivel no existe en sus datos. Podemos suponer que hay algunas similitudes dentro de las escuelas y diferencias entre ellas. Si hay similitudes dentro de las escuelas, entonces si toma una muestra de alumnos al azar, sin tener en cuenta su pertenencia a la escuela, podría destruir la estructura jerárquica de sus datos.

En general, hay varias opciones:

  1. estudiantes de muestra con reemplazo,
  2. muestra de escuelas enteras con reemplazo,
  3. primero muestrear las escuelas con reemplazo y luego muestrear los estudiantes (a) con reemplazo, o (b) sin reemplazo.

Parece que el primer enfoque es el peor. Recordemos que bootstrap el muestreo debe imitar de alguna manera el proceso de muestreo en su estudio y que se muestrearan los centros educativos en lugar de los alumnos individuales. Elegir entre (2) y (3) es más complicado, pero es de esperar que pueda encontrar trabajos de investigación que consideren este tema (por ejemplo, Rena et al. 2010, Field y Welsh, 2007). En general, las opciones (2) o (3b) son preferibles, ya que parece que incluir demasiados niveles de muestreo con reemplazo conduce a resultados sesgados. Puede encontrar más información sobre este tema también en los libros de Efron y Tibshirani (1994) y Davison y Hinkley (1997). Observe que tenemos un problema similar con el bootstrapping datos de series temporales y en este caso también preferimos muestrear bloques enteros de series (por ejemplo, toda la temporada si asumimos la estacionalidad) en lugar de observaciones individuales porque, de lo contrario, se destruiría la estructura temporal. En la práctica, no existe una solución única, pero en el caso de estructuras de datos complicadas, debería elegir el esquema de muestreo bootstrap que mejor se adapte a sus datos y a su problema y, si es posible, utilizar un estudio de simulación para comparar diferentes soluciones.


Davison, A.C. y Hinkley, D.V. (1997). Bootstrap Methods and Their Application. Cambridge.

Efron, B. y Tibshirani, R.J. (1994). Introducción a Bootstrap . CRC Press.

Ren, S., Lai, H., Tong, W., Aminzadeh, M., Hou, X., & Lai, S. (2010). Nonparametric bootstrapping for hierarchical data. Journal of Applied Statistics, 37(9), 1487-1498.

Field, C. A., y Welsh, A. H. (2007). El "Bootstrapping" de los datos agrupados. Revista de la Real Sociedad de Estadística: Serie B (Metodología estadística), 69(3), 369-390.

1 votos

Aceptada su respuesta (gracias), pero para otros he implementado ahora una función en R para hacer esto en mi responder

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X