Sollte ich auf Clusterebene oder auf Einzelebene booten?


10

Ich habe ein Überlebensmodell mit Patienten, die in Krankenhäusern verschachtelt sind, das einen Zufallseffekt für die Krankenhäuser beinhaltet. Der zufällige Effekt ist gammaverteilt, und ich versuche, die „Relevanz“ dieses Begriffs auf einer leicht verständlichen Skala darzustellen.

Ich habe die folgenden Referenzen gefunden, die das Median Hazard Ratio verwenden (ein bisschen wie das Median Odds Ratio), und dies berechnet.

Bengtsson T, Dribe M: Historische Methoden 43:15, 2010

Jetzt möchte ich jedoch die mit dieser Schätzung verbundene Unsicherheit mithilfe des Bootstraps melden. Die Daten sind Überlebensdaten, und daher gibt es mehrere Beobachtungen pro Patient und mehrere Patienten pro Krankenhaus. Es scheint offensichtlich, dass ich die Patientenbeobachtungen bei der erneuten Probenahme zusammenfassen muss. Aber ich weiß nicht, ob ich die Krankenhäuser auch gruppieren soll (dh Krankenhäuser neu beproben, anstatt Patienten?

Ich frage mich, ob die Antwort von dem interessierenden Parameter abhängt und ob dies anders wäre, wenn das Ziel eher auf Patientenebene als auf Krankenhausebene relevant wäre.

Ich habe den folgenden Statistikcode aufgelistet, falls dies hilfreich ist.

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

Antworten:


2

Stellen Sie sich vor, Sie haben eine Studie über die Bildungsleistungen von Kindern durchgeführt. Sie haben eine zufällige Stichprobe von Schulen aus einem bestimmten Gebiet gezogen, und von jeder Schule wurde eine Klasse in die Studie aufgenommen. Sie haben eine Analyse durchgeführt und möchten jetzt Bootstrap verwenden, um Konfidenzintervalle für Ihre Schätzungen zu erhalten. Wie es geht?

Beachten Sie zunächst, dass Ihre Daten hierarchisch sind und mehrere Ebenen haben: Schulen, Klassen innerhalb von Schulen und Schüler innerhalb von Klassen. Da es nur eine Klasse pro Schule gibt, ist die zweite Stufe in Ihren Daten nicht vorhanden. Wir können davon ausgehen, dass es innerhalb der Schulen einige Ähnlichkeiten und Unterschiede zwischen den Schulen gibt. Wenn es Ähnlichkeiten innerhalb der Schulen gibt, können Sie möglicherweise die hierarchische Struktur Ihrer Daten zerstören, wenn Sie Schüler nach dem Zufallsprinzip befragen, ohne ihre Schulmitgliedschaft zu berücksichtigen.

Im Allgemeinen gibt es mehrere Möglichkeiten:

  1. Probe Studenten mit Ersatz,
  2. Probe ganze Schulen mit Ersatz,
  3. Probieren Sie zuerst Schulen mit Ersatz und dann Schüler (a) mit Ersatz oder (b) ohne Ersatz.

Es scheint, dass der erste Ansatz der schlechteste ist. Denken Sie daran, dass Bootstrap- Sampling den Sampling-Prozess in Ihrer Studie irgendwie imitieren sollte und Sie eher Schulen als einzelne Schüler beprobt haben. Die Wahl zwischen (2) und (3) ist komplizierter, aber hoffentlich finden Sie Forschungsarbeiten zu diesem Thema (z. B. Rena et al. 2010, Field and Welsh, 2007). Im Allgemeinen sind die Optionen (2) oder (3b) vorzuziehen, da es den Anschein hat, dass zu viele Stichproben mit Ersatz zu verzerrten Ergebnissen führen. Weitere Informationen zu diesem Thema finden Sie auch in Büchern von Efron und Tibshirani (1994) sowie Davison und Hinkley (1997). Beachten Sie, dass wir ein ähnliches Problem mit dem Bootstrapping von Zeitreihendaten habenund in diesem Fall werden auch eher ganze Serienblöcke (z. B. ganze Saison, wenn wir Saisonalität annehmen) als einzelne Beobachtungen abgetastet, da sonst die Zeitstruktur zerstört würde. In der Praxis gibt es keine einheitliche Lösung, aber bei komplizierten Datenstrukturen sollten Sie ein solches Bootstrap-Stichprobenschema wählen, das am besten zu Ihren Daten und Ihrem Problem passt, und wenn möglich eine Simulationsstudie verwenden, um verschiedene Lösungen zu vergleichen.


Davison, AC und Hinkley, DV (1997). Bootstrap-Methoden und ihre Anwendung. Cambridge.

Efron, B. und Tibshirani, RJ (1994). Eine Einführung in den Bootstrap . CRC Drücken Sie.

Ren, S., Lai, H., Tong, W., Aminzadeh, M., Hou, X. & Lai, S. (2010). Nichtparametrisches Bootstrapping für hierarchische Daten. Journal of Applied Statistics, 37 (9), 1487-1498.

Field, CA & Welsh, AH (2007). Bootstrapping von Clusterdaten. Zeitschrift der Royal Statistical Society: Reihe B (Statistical Methodology), 69 (3), 369-390.


1
Akzeptierte Ihre Antwort (danke), aber für andere habe ich jetzt eine Funktion in R implementiert, um dies in meiner Antwort
drstevok

3

Die Antwort scheint zu sein, dass der Resampling-Prozess die Struktur der Daten berücksichtigen muss. Hier gibt es eine nette Erklärung (zusammen mit etwas R-Code, um dies zu implementieren).

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

Dank des Zeigers der UCLA Statistical Consulting Group .

Ich habe eine schnellere (aber weniger flexible) Version des oben verlinkten Code-Snippets geschrieben - suchen Sie hier nach Updates und Details.

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)
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.