Ich habe die folgende Frage für einen Kurs, an dem ich arbeite:
Führen Sie eine Monte-Carlo-Studie durch, um die Abdeckungswahrscheinlichkeiten des normalen Standard-Bootstrap-Konfidenzintervalls und des grundlegenden Bootstrap-Konfidenzintervalls abzuschätzen. Stichprobe aus einer normalen Population und Überprüfung der empirischen Abdeckungsraten für den Stichprobenmittelwert.
Die Abdeckungswahrscheinlichkeiten für das normale Standard-Bootstrap-CI sind einfach:
n = 1000;
alpha = c(0.025, 0.975);
x = rnorm(n, 0, 1);
mu = mean(x);
sqrt.n = sqrt(n);
LNorm = numeric(B);
UNorm = numeric(B);
for(j in 1:B)
{
smpl = x[sample(1:n, size = n, replace = TRUE)];
xbar = mean(smpl);
s = sd(smpl);
LNorm[j] = xbar + qnorm(alpha[1]) * (s / sqrt.n);
UNorm[j] = xbar + qnorm(alpha[2]) * (s / sqrt.n);
}
mean(LNorm < 0 & UNorm > 0); # Approximates to 0.95
# NOTE: it is not good enough to look at overall coverage
# Must compute separately for each tail
Aus dem, was ich für diesen Kurs gelernt habe, kann das grundlegende Bootstrap- Konfidenzintervall wie folgt berechnet werden:
# Using x from previous...
R = boot(data = x, R=1000, statistic = function(x, i){ mean(x[i]); });
result = 2 * mu - quantile(R$t, alpha, type=1);
Das macht Sinn. Was ich nicht verstehe, ist die Berechnung der Abdeckungswahrscheinlichkeiten für das grundlegende Bootstrap-CI. Ich verstehe, dass die Abdeckungswahrscheinlichkeit die Häufigkeit darstellt, mit der das CI den wahren Wert enthält (in diesem Fall mu
). Führe ich die boot
Funktion einfach viele Male aus?
Wie kann ich diese Frage anders angehen?
quelle
size=100
Tippfehler? Ich glaube nicht, dass Sie die richtigen oberen und unteren Grenzen erhalten, da die implizite Stichprobengröße 1000 zu sein scheint, wenn Sie Ihre CIs in der Schleife berechnen (da Sie siesqrt.n
in der Berechnung verwenden). Warum vergleichen Sie mitmu
und nicht direkt mit 0 (letzteres ist der wahre Mittelwert)?smpl = x[sample(1:n, size = 100, replace = TRUE)];
kann vereinfacht werden , umsmpl = sample(x, size=100, replace=TRUE)
.mu
wie 0. Das normale CI funktioniert einwandfrei. Es ist das grundlegende Bootstrap-CI, mit dem ich Schwierigkeiten habe.Antworten:
Die Terminologie wird wahrscheinlich nicht konsistent verwendet, daher verstehe ich im Folgenden nur die ursprüngliche Frage. Nach meinem Verständnis sind die von Ihnen berechneten normalen CIs nicht das, wonach gefragt wurde. Jeder Satz von Bootstrap-Replikaten gibt Ihnen ein Konfidenzintervall, nicht viele. Die Methode zum Berechnen verschiedener CI-Typen aus den Ergebnissen einer Reihe von Bootstrap-Replikaten lautet wie folgt:
boot
Ohne Verwendung eines Pakets können
boot
Sie einfachreplicate()
eine Reihe von Bootstrap-Replikaten abrufen.Aber bleiben wir bei den Ergebnissen von
boot.ci()
, um eine Referenz zu haben.boot.ci()
Um die Abdeckungswahrscheinlichkeiten dieser CI-Typen abzuschätzen, müssen Sie diese Simulation viele Male ausführen. Wickeln Sie einfach den Code in eine Funktion ein, geben Sie eine Liste mit den CI-Ergebnissen zurück und führen Sie sie
replicate()
wie in dieser Übersicht gezeigt aus .quelle
computeCIs
und aufgerufenresults = replicate(500, computeCIs());
. Am EndecomputeCIs
kehrt es zurückc(ciBasic, ciPerc)
. Sollte ich dann nicht testenmean(results[1, ] < 0 & results[2, ] > 0)
, um alle Basis-CIs zu testen, die den wahren Mittelwert (die Deckungswahrscheinlichkeit) enthalten, um die Abdeckungswahrscheinlichkeiten zu testen? Wenn ich das mache, bekomme ich,1
wenn ich denke, ich sollte es bekommen0.95
.pastebin.com/qKpNKK0D
ist unterbrochen. Würde mich freuen, wenn Sie es aktualisieren und die vollständige Funktion und vollständige Simulation bereitstellen. Danke