Ich benutze das "boot" -Paket, um einen ungefähren 2-seitigen Bootstrap-P-Wert zu berechnen, aber das Ergebnis ist zu weit vom P-Wert entfernt, als dass man t.test verwenden könnte. Ich kann nicht herausfinden, was ich in meinem R-Code falsch gemacht habe. Kann mir bitte jemand einen Hinweis dazu geben
time = c(14,18,11,13,18,17,21,9,16,17,14,15,
12,12,14,13,6,18,14,16,10,7,15,10)
group=c(rep(1:2, each=12))
sleep = data.frame(time, group)
require(boot)
diff = function(d1,i){
d = d1[i,]
Mean= tapply(X=d$time, INDEX=d$group, mean)
Diff = Mean[1]-Mean[2]
Diff
}
set.seed(1234)
b3 = boot(data = sleep, statistic = diff, R = 5000, strata=sleep$group)
pvalue = mean(abs(b3$t) > abs(b3$t0))
pvalue
Der zweiseitige Bootstrapped-p-Wert (p-Wert) = 0,4804, aber der zweiseitige p-Wert von t.test ist 0,04342. Beide p-Werte sind ca. 11-fach unterschiedlich. Wie kann das passieren?
mean(abs(b3$t0) < abs(b3$t-mean(b3$t)))
Antworten:
Sie verwenden Bootstrap, um Daten unter der empirischen Verteilung der beobachteten Daten zu generieren. Dies kann nützlich sein, um ein Konfidenzintervall für die Differenz zwischen den beiden Mitteln anzugeben:
Um einen Wert zu erhalten, müssen Sie Permutationen unter der Nullhypothese generieren. Dies kann zB so gemacht werden:p
In dieser Lösung ist die Größe der Gruppen nicht festgelegt. Sie weisen jeder Person nach dem Zufallsprinzip eine Gruppe zu, indem Sie vom ursprünglichen Gruppensatz aus bootstrapen. Ich halte es für legitim, aber eine klassischere Lösung besteht darin, die Anzahl der Einzelpersonen jeder Gruppe zu bestimmen, sodass Sie nur die Gruppen permutieren, anstatt sie zu booten (dies wird normalerweise durch die Versuchsplanung motiviert, bei der die Gruppengrößen im Voraus festgelegt werden ):
quelle
Die Antwort von Elvis beruht auf Permutationen, aber meiner Meinung nach macht es nicht klar, was am ursprünglichen Bootstrap-Ansatz falsch ist. Lassen Sie mich eine Lösung diskutieren, die ausschließlich auf Bootstrap basiert.
Das entscheidende Problem Ihrer ursprünglichen Simulation ist, dass Bootstrap Ihnen immer die WAHRE Verteilung der Teststatistik liefert. Bei der Berechnung des p-Wertes muss jedoch der ermittelte Wert der Teststatistik mit seiner Verteilung UNTER H0 verglichen werden, dh nicht mit der wahren Verteilung!
[Machen wir es klar. Beispielsweise ist bekannt, dass die Teststatistik T des klassischen t-Tests die klassische "zentrale" t-Verteilung unter H0 und im Allgemeinen eine nichtzentrale Verteilung aufweist. Es ist jedoch jedem bekannt, dass der beobachtete Wert von T mit der klassischen "zentralen" t-Verteilung verglichen wird, dh man versucht nicht, die wahre [nicht-zentrale] t-Verteilung zu erhalten, um den Vergleich mit T durchzuführen.
Ihr p-Wert 0,4804 ist so groß, weil der beobachtete Wert "t0" der Teststatistik Mean [1] -Mean [2] sehr nahe an der Mitte der Bootstrap-Probe "t" liegt. Es ist natürlich und normalerweise immer so [dh unabhängig von der Gültigkeit von H0], da das Bootstrap-Sample "t" die IST-Verteilung von Mean [1] -Mean [2] emuliert. Aber, wie oben [und auch von Elvis] erwähnt, brauchen Sie wirklich die Verteilung von Mean [1] -Mean [2] UNDER H0. Es ist offensichtlich das
1) unter H0 wird die Verteilung von Mittelwert [1] -Mittelwert [2] um 0 zentriert,
2) seine Form hängt nicht von der Gültigkeit von H0 ab.
Diese beiden Punkte implizieren, dass die Verteilung von Mean [1] -Mean [2] unter H0 durch das Bootstrap-Sample "t" SHIFTED emuliert werden kann, so dass es um 0 zentriert ist. In R:
und der entsprechende p-Wert ist:
Das gibt Ihnen einen "sehr schönen" Wert von 0,0232. :-)
Lassen Sie mich feststellen, dass der oben erwähnte Punkt "2)" als "Übersetzungsäquivarianz" der Teststatistik bezeichnet wird und NICHT generell gelten muss! Dh für einige Teststatistiken liefert das Verschieben des Bootstraps "t" keine gültige Schätzung der Verteilung der Teststatistik unter HO! Schauen Sie sich diese Diskussion und insbesondere die Antwort von P. Dalgaard an: http://tolstoy.newcastle.edu.au/R/e6/help/09/04/11096.html
Ihr Testproblem führt zu einer perfekt symmetrischen Verteilung der Teststatistik. Bedenken Sie jedoch, dass es bei einer verzerrten Bootstrap-Verteilung der Teststatistik einige Probleme gibt, ZWEI-SEITIGE p-Werte zu erhalten. Lesen Sie erneut den obigen Link.
[Und schließlich würde ich den "reinen" Permutationstest in Ihrer Situation verwenden; dh die zweite Hälfte von Elvis antworten. :-)]
quelle
Es gibt zahlreiche Möglichkeiten, Bootstrap-CIs und p-Werte zu berechnen. Das Hauptproblem ist, dass es für den Bootstrap unmöglich ist, Daten unter einer Nullhypothese zu generieren. Der Permutationstest ist eine realisierbare, auf Resampling basierende Alternative dazu. Um einen geeigneten Bootstrap zu verwenden, müssen Sie einige Annahmen über die Stichprobenverteilung der Teststatistik treffen.
normaler Bootstrap
Ein Ansatz ist ein normaler Bootstrap, bei dem Sie den Mittelwert und die Standardabweichung der Bootstrap-Verteilung verwenden, um die Stichprobenverteilung unter der Null zu berechnen, indem Sie die Verteilung verschieben und die normalen Perzentile von der Nullverteilung zum Zeitpunkt der Schätzung im ursprünglichen Bootstrap-Beispiel verwenden . Dies ist ein vernünftiger Ansatz, wenn die Bootstrap-Verteilung normal ist. In der Regel ist hier eine Sichtprüfung ausreichend. Die Ergebnisse, die diesen Ansatz verwenden, liegen normalerweise sehr nahe an einer robusten oder sandwichbasierten Fehlerschätzung, die robust gegenüber Heteroskedastizität und / oder Annahmen zur Varianz endlicher Stichproben ist. Die Annahme einer normalen Teststatistik ist eine stärkere Voraussetzung für die Annahmen im nächsten Bootstrap-Test, den ich diskutieren werde.
Perzentil-Bootstrap
Ein weiterer Ansatz ist der Perzentil-Bootstrap, den die meisten von uns meiner Meinung nach in Betracht ziehen, wenn wir vom Bootstrap sprechen. Hier schätzt die Bootstrap-Verteilung der Parameter eine empirische Verteilung der Stichprobe unter der alternativen Hypothese. Diese Verteilung kann möglicherweise nicht normal sein. Ein 95% CI lässt sich leicht aus den empirischen Quantilen berechnen. Eine wichtige Annahme ist jedoch, dass eine solche Verteilung von entscheidender Bedeutung ist . Das heißt, wenn sich der zugrunde liegende Parameter ändert, wird die Form der Verteilung nur um eine Konstante verschoben, und die Skala ändert sich nicht unbedingt. Dies ist eine starke Annahme! Wenn dies zutrifft, können Sie die "Verteilung der Statistik unter der Nullhypothese" (DSNH oder erzeugenF∗0 2 × min ( F∗0( β^) , 1 - F∗0( β^) )
Studentized Bootstrap
Programmierbeispiel
Als Beispiel verwende ich die
city
Daten im Bootstrap-Paket. Die Bootstrap-Konfidenzintervalle werden mit diesem Code berechnet:und erzeugen diese Ausgabe:
Der 95% CI für den normalen Bootstrap ergibt sich aus:
Der p-Wert wird so erhalten:
Das stimmt überein, dass der 95% -Normal-CI den Nullverhältniswert von 1 nicht enthält.
Der Perzentil-CI wird erhalten (mit einigen Unterschieden aufgrund der Bindungsmethoden):
Und der p-Wert für den Perzentil-Bootstrap ist:
Gibt ap von 0,035 an, was auch mit dem Konfidenzintervall hinsichtlich des Ausschlusses von 1 vom Wert übereinstimmt. Wir können im Allgemeinen nicht beobachten, dass, während die Breite des Perzentil-CI fast so breit ist wie die des normalen CI und dass das Perzentil-CI weiter von der Null entfernt ist, dass das Perzentil-CI niedrigere p-Werte liefern sollte. Dies liegt daran, dass die Form der dem CI für die Perzentilmethode zugrunde liegenden Stichprobenverteilung nicht normal ist.
quelle
boot.ci
und des Arguments "type" ein studentisiertes CI auswählen (Sie können auch ein BCA-CI auswählen). Wie können Sie jedoch p-Werte berechnen? Verwenden Sie die Schätzung oder die Teststatistik? Ich hatte eine ähnliche Frage, deren Beantwortung ich sehr schätze.