Tak, można przybliżać przez P ( ˉ X ∗ n ≤ x ), ale nie jest to optymalne. Jest to forma bootstrapu percentyla. Jednak percentylowy bootstrap nie działa dobrze, jeśli chcesz wyciągnąć wnioski na temat średniej populacji, chyba że masz dużą próbkę. (Działa dobrze z wieloma innymi problemami wnioskowania, w tym gdy wielkość próby jest niewielka.) Wyciągam ten wniosek z nowoczesnych statystyk Wilcoxa dla nauk społecznych i behawioralnych , CRC Press, 2012. Obawiam się, że teoretyczny dowód jest poza mną .P(X¯n≤x)P(X¯∗n≤x)
Kolejnym krokiem jest wariant podejścia centrującego, który skaluje wyśrodkowaną statystykę bootstrap ze standardowym odchyleniem próbki i wielkością próby, obliczając to samo, co w przypadku statystyki. Kwantyle z rozkładu tych statystyk t można wykorzystać do skonstruowania przedziału ufności lub wykonania testu hipotez. Jest to metoda bootstrap-t, która daje lepsze wyniki podczas wnioskowania na temat średniej.
s∗
T∗=X¯∗n−X¯s∗/n√
T∗μ
X¯−T∗0.975sn√,X¯−T∗0.025sn√
Rozważ poniższe wyniki symulacji, pokazujące, że przy źle wypaczonym rozkładzie mieszanym przedziały ufności dla tej metody zawierają prawdziwą wartość częściej niż metoda percentylowego ładowania początkowego lub tradycyjna odwrotność statystyki bez ładowania początkowego.
compare.boots <- function(samp, reps = 599){
# "samp" is the actual original observed sample
# "s" is a re-sample for bootstrap purposes
n <- length(samp)
boot.t <- numeric(reps)
boot.p <- numeric(reps)
for(i in 1:reps){
s <- sample(samp, replace=TRUE)
boot.t[i] <- (mean(s)-mean(samp)) / (sd(s)/sqrt(n))
boot.p[i] <- mean(s)
}
conf.t <- mean(samp)-quantile(boot.t, probs=c(0.975,0.025))*sd(samp)/sqrt(n)
conf.p <- quantile(boot.p, probs=c(0.025, 0.975))
return(rbind(conf.t, conf.p, "Trad T test"=t.test(samp)$conf.int))
}
# Tests below will be for case where sample size is 15
n <- 15
# Create a population that is normally distributed
set.seed(123)
pop <- rnorm(1000,10,1)
my.sample <- sample(pop,n)
# All three methods have similar results when normally distributed
compare.boots(my.sample)
Daje to następujące (conf.t to metoda bootstrap t; conf.p to procentowa metoda bootstrap).
97.5% 2.5%
conf.t 9.648824 10.98006
conf.p 9.808311 10.95964
Trad T test 9.681865 11.01644
Na jednym przykładzie z przekrzywionej dystrybucji:
# create a population that is a mixture of two normal and one gamma distribution
set.seed(123)
pop <- c(rnorm(1000,10,2),rgamma(3000,3,1)*4, rnorm(200,45,7))
my.sample <- sample(pop,n)
mean(pop)
compare.boots(my.sample)
To daje następujące. Zauważ, że „conf.t” - wersja t bootstrap - daje szerszy przedział ufności niż pozostałe dwa. Zasadniczo lepiej jest reagować na nietypowy rozkład populacji.
> mean(pop)
[1] 13.02341
> compare.boots(my.sample)
97.5% 2.5%
conf.t 10.432285 29.54331
conf.p 9.813542 19.67761
Trad T test 8.312949 20.24093
Wreszcie jest tysiąc symulacji, aby zobaczyć, która wersja daje przedziały ufności, które są najczęściej poprawne:
# simulation study
set.seed(123)
sims <- 1000
results <- matrix(FALSE, sims,3)
colnames(results) <- c("Bootstrap T", "Bootstrap percentile", "Trad T test")
for(i in 1:sims){
pop <- c(rnorm(1000,10,2),rgamma(3000,3,1)*4, rnorm(200,45,7))
my.sample <- sample(pop,n)
mu <- mean(pop)
x <- compare.boots(my.sample)
for(j in 1:3){
results[i,j] <- x[j,1] < mu & x[j,2] > mu
}
}
apply(results,2,sum)
Daje to wyniki poniżej - liczby to 1000 razy, gdy przedział ufności zawiera prawdziwą wartość symulowanej populacji. Zauważ, że prawdziwy wskaźnik sukcesu każdej wersji jest znacznie mniejszy niż 95%.
Bootstrap T Bootstrap percentile Trad T test
901 854 890