Эта путаница между процедурами начальной загрузки и процедурами Монте-Карло повторяется, поэтому, возможно, это лучшее место для решения этой проблемы. (Примеры R
кода могут помочь с домашней работой.)
Рассмотрим эту реализацию начальной загрузки в 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)
}
Быстрый просмотр подтвердит, что это детерминированный расчет: случайные значения не генерируются и не используются. (Я оставлю детали его внутренней работы для заинтересованных читателей, чтобы выяснить для себя.)
Аргументы to boot
представляют собой набор числовых данных в массиве x
и ссылку t
на функцию (которая может быть применена к массивам точно так же x
) для возврата одного числового значения; другими словами, t
это статистика . Он генерирует все возможные образцы с заменой от x
и применяется t
к каждому из них, в результате чего получает один номер для каждого такого образца: Это самозагрузки в двух словах. Возвращаемое значение представляет собой массив , представляющий точное распределение начальной загрузки из t
для образца x
.
В качестве крошечного примера давайте загрузим среднее значение для образца 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)boot
t
t
1223соответственно, как показано на выходе.
(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
Результат для этой конкретной случайной выборки составляет 3,83587. Это определенно: если бы вы позвонили boot
снова с тем же набором данных, ответ был бы точно таким же. Но как может измениться ответ с разными случайными выборками? Узнайте, повторив этот процесс несколько раз и нарисовав гистограмму результатов:
> 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
Но это далеко от номинальных 95%, которые мы указали (и надеялись)! Это одна из ценностей симуляции: она сравнивает наши надежды с тем, что действительно происходит. (Почему несоответствие? Я полагаю, это потому, что загрузка SD не работает с очень маленькими выборками.)
Рассмотрение
Статистика начальной загрузки концептуально такая же, как и любая другая статистика, такая как среднее или стандартное отклонение; они просто тратят много времени на вычисления. (Смотрите предупреждающее сообщение в boot
коде!)
Симуляция Монте-Карло может быть полезна для изучения того, как меняется статистика начальной загрузки из-за случайности в получении выборок. Изменения, наблюдаемые при таком моделировании, обусловлены изменением в образцах, а не изменением в начальной загрузке.
nnn