Набор данных law
находится в пакете bootstrap
.И то, что вы делаете, кажется непараметрической начальной загрузкой.Вот два разных способа: с циклом for
и с функцией bootstrap::bootstrap
.
. Перед запуском кода загрузите набор данных.
library(bootstrap)
data(law)
Сначала попробуйтев вопросе исправлено.
set.seed(1234) # Make the results reproducible
nperm <- 1000
law.perm <- numeric(nperm)
n <- nrow(law)
for (i in 1:nperm) {
ind <- sample(n, replace = TRUE)
law.perm[i] <- cor(law[ind, "LSAT"], law[ind, "GPA"])
}
Второй способ, используя функцию bootstrap
.Это следует последнему примеру на странице справки функции.
theta <- function(x, xdata){
cor(xdata[x, 1], xdata[x, 2])
}
set.seed(1234)
res <- bootstrap(seq_len(n), nperm, theta = theta, law)
Сравните оба результата.
mean(law.perm)
#[1] 0.769645
mean(res$thetastar)
#[1] 0.7702782
Разница в медианах меньше.
median(law.perm)
#[1] 0.7938093
median(res$thetastar)
#[1] 0.7911014
И график обоих результатов.
op <- par(mfrow = c(1, 2))
hist(law.perm, prob = TRUE)
hist(res$thetastar, prob = TRUE)
par(op)