P(X¯n≤x)P(X¯∗n≤x)
Una variante dell'approccio di centraggio va al passo successivo e ridimensiona la statistica di bootstrap centrata con la deviazione standard di ricampionamento e la dimensione del campione, calcolando allo stesso modo della statistica. I quantili dalla distribuzione di queste statistiche t possono essere usati per costruire un intervallo di confidenza o eseguire un test di ipotesi. Questo è il metodo bootstrap-t e fornisce risultati superiori quando si fanno inferenze sulla media.
s∗
T∗=X¯∗n−X¯s∗/n√
T∗μ
X¯−T∗0.975sn√,X¯−T∗0.025sn√
Considera i risultati della simulazione di seguito, dimostrando che con una distribuzione mista molto distorta gli intervalli di confidenza di questo metodo contengono il valore reale più frequentemente rispetto al metodo percentile di bootstrap o una tradizionale inversione di statistica senza bootstrap.
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)
Ciò fornisce quanto segue (conf.t è il metodo bootstrap t; conf.p è il metodo percentile bootstrap).
97.5% 2.5%
conf.t 9.648824 10.98006
conf.p 9.808311 10.95964
Trad T test 9.681865 11.01644
Con un singolo esempio da una distribuzione distorta:
# 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)
Questo dà quanto segue. Notare che "conf.t" - la versione bootstrap t - fornisce un intervallo di confidenza più ampio rispetto agli altri due. Fondamentalmente, è meglio rispondere alla distribuzione insolita della popolazione.
> 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
Infine ecco mille simulazioni per vedere quale versione fornisce intervalli di confidenza che sono spesso corretti:
# 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)
Ciò fornisce i risultati seguenti: i numeri sono i tempi su 1.000 in cui l'intervallo di confidenza contiene il valore reale di una popolazione simulata. Si noti che il vero tasso di successo di ogni versione è notevolmente inferiore al 95%.
Bootstrap T Bootstrap percentile Trad T test
901 854 890