获取来自bootstrap的样本的方法

时间:2018-05-31 16:23:50

标签: r bootstrapping sample

我希望获得20个采样数据的均值和sds,但不知道如何做到这一点。我当前的代码可以为我提供每个样本中的方法,而不是样本。

## create data
data <- round(rnorm(100, 5, 3))
data[1:10]
## obtain 20 boostrap samples
## display the first of the boostrap samples

resamples <- lapply(1:20, function(i) sample(data, replace = T))

resamples[1]


## calculate the means for each bootstrap sample
r.mean <- sapply(resamples, mean)
r.median
## calculate the sd of the distribution of medians 
sqrt(var(r.median))

从上面的代码中,我从每个采样数据中得到了20个均值,并且得到了均值分布的sd。我如何得到100个均值,每个均值来自20个样本的分布?和标准偏差相同吗?

非常感谢!!

2 个答案:

答案 0 :(得分:3)

制作带样品的矩阵

mat <- do.call(rbind, resamples)

然后

rowMeans(mat)

会给你“内部样本”的意思和

colMeans(mat) 

“跨样本”的意思。对于其他数量,例如您可以使用标准偏差apply,例如apply(mat, 1, sd)包中的matrixStats或函数,例如matrixStats::rowSds(mat)

答案 1 :(得分:1)

虽然@konvas的答案可能就是你想要的,但在引导时我仍然会看一下基础包boot

查看以下示例是否可以让您更接近您尝试的操作。

set.seed(6929)    # Make the results reproducible
data <- round(rnorm(100, 5, 3))

boot_mean <- function(data, indices) mean(data[indices])
boot_sd <- function(data, indices) sd(data[indices])

Runs <- 100
r.mean <- boot::boot(data, boot_mean, Runs)
r.sd <- boot::boot(data, boot_sd, Runs)

r.mean$t
r.sd$t

sqrt(var(r.mean$t))
#          [,1]
#[1,] 0.3152989

sd(r.mean$t)
#[1] 0.3152989

现在,查看自举方式和标准错误的分布。

op <- par(mfrow = c(1, 2))
hist(r.mean$t)
hist(r.sd$t)
par(op)