Mam następujące pytanie do kursu, nad którym pracuję:
Przeprowadź badanie Monte Carlo, aby oszacować prawdopodobieństwo pokrycia standardowego normalnego przedziału ufności bootstrapu i podstawowego przedziału ufności bootstrapu. Próbka z normalnej populacji i sprawdź empiryczne wskaźniki pokrycia dla średniej próby.
Prawdopodobieństwa pokrycia dla standardowego normalnego CI bootstrap są łatwe:
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
Z tego, czego nauczyłem się na tym kursie, podstawowy przedział ufności ładowania początkowego można obliczyć w następujący sposób:
# 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);
To ma sens. Nie rozumiem, jak obliczyć prawdopodobieństwo pokrycia dla podstawowego CI bootstrap. Rozumiem, że prawdopodobieństwo pokrycia reprezentowałoby, ile razy CI zawiera prawdziwą wartość (w tym przypadku mu
). Czy po prostu uruchamiam tę boot
funkcję wiele razy?
Jak mogę podejść do tego pytania inaczej?
źródło
size=100
literówka? Nie sądzę, aby uzyskać właściwe górne i dolne granice, ponieważ domyślna wielkość próby wydaje się wynosić 1000, gdy obliczasz swoje CI w pętli (ponieważ używaszsqrt.n
do obliczeń). Ponadto, dlaczego porównujeszmu
bezpośrednio 0, a nie 0 (ten ostatni jest prawdziwym środkiem)?smpl = x[sample(1:n, size = 100, replace = TRUE)];
można uprościćsmpl = sample(x, size=100, replace=TRUE)
.mu
byciem 0. Normalny CI działa dobrze, jest to podstawowy CI CI, z którym mam trudności.Odpowiedzi:
Terminologia prawdopodobnie nie jest stosowana konsekwentnie, dlatego poniżej rozumiem tylko oryginalne pytanie. Z mojego rozumienia, obliczone przez ciebie normalne CI nie są tym, o co cię proszono. Każdy zestaw replik ładowania początkowego daje jeden przedział ufności, nie wiele. Sposób obliczania różnych typów CI na podstawie wyników zestawu replik ładowania początkowego jest następujący:
Ponieważ chcę porównać obliczenia z wynikami z pakietuM.⋆ μ S.2 ⋆M. σ2)M. t
boot
, najpierw definiuję funkcję, która będzie wywoływana dla każdej replikacji. Jego argumentami są oryginalna próbka oraz wektor indeksu określający przypadki dla pojedynczej repliki. Zwraca , oszacowanie wtyczki dla , a także , oszacowanie wtyczki dla wariancji średniej . Ten ostatni będzie wymagany tylko w przypadku bootstrap -CI. μ S 2 ⋆ M σ 2 M tBez użycia pakietu
boot
możesz po prostu użyć,replicate()
aby uzyskać zestaw replik ładowania początkowego.Ale trzymajmy się wyników z,
boot.ci()
aby mieć referencję.Podstawowy, percentyl i CI polegają na empirycznym rozkładzie oszacowań bootstrap. Aby uzyskać kwantyle i , znajdujemy odpowiadające indeksy posortowanemu wektorowi oszacowań bootstrap (zauważ, że wykona bardziej skomplikowaną interpolację w celu znalezienia kwantyli empirycznych, gdy indeksy nie są liczbami naturalnymi) .α / 2 1 - α / 2t α / 2 1 - α / 2
boot.ci()
Dla -CI potrzebujemy oszacowań bootstrap, aby obliczyć krytyczne wartości . Dla standardowego normalnego CI, wartość krytyczna będzie po prostu być -value od rozkładu normalnego.t ⋆ t zt t⋆ t z
Aby oszacować prawdopodobieństwo pokrycia tych typów CI, będziesz musiał uruchomić tę symulację wiele razy. Po prostu zawiń kod do funkcji, zwróć listę z wynikami CI i uruchom go z
replicate()
podobną demonstracją w tej liście .źródło
computeCIs
i wywołałemresults = replicate(500, computeCIs());
. Na konieccomputeCIs
powracac(ciBasic, ciPerc)
. Czy w celu przetestowania prawdopodobieństwa pokrycia nie powinienemmean(results[1, ] < 0 & results[2, ] > 0)
testować wszystkich podstawowych elementów CI zawierających prawdziwą średnią (prawdopodobieństwo pokrycia)? Kiedy to uruchamiam, rozumiem,1
kiedy powinienem0.95
.pastebin.com/qKpNKK0D
jest zepsuty. Będziemy wdzięczni, jeśli zaktualizujesz go i zapewnisz pełną funkcję i pełną symulację. Dzięki