Essa confusão entre os procedimentos de autoinicialização e os procedimentos de Monte Carlo permanece recorrente, portanto, talvez este seja o melhor lugar para resolver isso. (Os exemplos de Rcódigo também podem ajudar na lição de casa.)
Considere esta implementação do bootstrap em R:
boot <- function(x, t) { # Exact bootstrap of procedure t on data x
n <- length(x) # Must lie between 2 and 7 inclusive.
if (n > 7) {
stop("Sample size exceeds 7; use an approximate method instead.")
}
p <- c(n, 1:(n-1))
a <- rep(x, n^(n-1))
dim(a) <- rep(n, n)
y <- as.vector(a)
while (n > 1) {
n <- n-1
a <- aperm(a, p)
y <- cbind(as.vector(a), y)
}
apply(y, 1, t)
}
Uma rápida olhada confirmará que este é um cálculo determinístico : nenhum valor aleatório é gerado ou usado. (Deixarei os detalhes de seu funcionamento interno para os leitores interessados descobrirem por si mesmos.)
Os argumentos para bootsão um lote de dados numéricos na matriz xe uma referência ta uma função (que pode ser aplicada a matrizes exatamente como x) para retornar um único valor numérico; em outras palavras, té uma estatística . Ele gera todas as amostras possíveis com substituição xe aplica t- se a cada uma delas, produzindo um número para cada amostra: essa é a inicialização em poucas palavras. O valor de retorno é uma matriz que representa a distribuição exata de autoinicialização da tamostra x.
Como um pequeno exemplo , vamos inicializar a média para uma amostra x= c(1,3):
> boot(c(1,3), mean)
> [1] 1 2 2 3
2(1,3)(1,1)(1,3)(3,1)(3,3)boottt1223, respectivamente, conforme mostrado na saída.
(1,3,3,4,7)
hist(boot(c(1,3,3,4,7), sd))

5
> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
95%
3.835870
O resultado para esta amostra aleatória específica é 3.83587. Isso é definitivo: se você ligasse bootnovamente com o mesmo conjunto de dados, a resposta seria exatamente a mesma. Mas como a resposta pode mudar com diferentes amostras aleatórias? Descubra repetindo esse processo algumas vezes e desenhando um histograma dos resultados:
> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)

01010/12−−√≈2.887
> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75
Mas isso não chega nem perto dos 95% nominais especificados (e esperávamos)! Esse é um valor da simulação: ele compara nossas esperanças com o que realmente está acontecendo. (Por que a discrepância? Eu acredito que é porque a inicialização de um SD não funciona bem com amostras muito pequenas.)
Reveja
As estatísticas de bootstrap são conceitualmente iguais a qualquer outra estatística, como uma média ou desvio padrão; eles tendem a demorar muito tempo para calcular. (Veja a mensagem de aviso no bootcódigo!)
A simulação de Monte-Carlo pode ser útil para estudar como uma estatística de bootstrap varia devido à aleatoriedade na obtenção de amostras. A variação observada nessa simulação é devida à variação nas amostras, não à variação no bootstrap.
nnn