Select 一个随机样本,并用它生成 1000 个 bootstrap 个样本

Select a sample at random and use it to generate 1000 bootstrap samples

我想从标准正态分布生成 1000 个大小为 25 的样本,计算每个样本的方差,并创建直方图。我有以下内容:

samples = replicate(1000, rnorm(25,0,1), simplify=FALSE)
hist(sapply(samples, var))

然后我想从这 1000 个样本中随机 select 一个样本,并从该样本中提取 1000 个 bootstraps。然后计算每个的方差并绘制直方图。到目前为止,我有:

sub.sample = sample(samples, 1)

这就是我卡住的地方,我知道这里需要一个 for 循环来进行引导,所以我有:

rep.boot2 <- numeric(lengths(sub.sample))
for (i in 1:lengths(sub.sample)) {
   index2 <- sample(1:1000, size = 25, replace = TRUE)  
   a.boot <- sub.sample[index2, ]  
   rep.boot2[i] <- var(a.boot)[1, 2]  
}

但是 运行 上述会产生 "incorrect number of dimensions" 错误。哪个部分导致了错误?

我在这里看到 2 个问题。一个是您正在尝试像使用向量一样对 sub.sample 进行子集化,但它实际上是一个长度为 1 的列表。

a.boot <- sub.sample[index2, ]  

要解决此问题,您可以更改

sub.sample = sample(samples, 1)

sub.sample = as.vector(unlist(sample(samples, 1)))

第二个问题是您正在生成 1 到 1000 之间的 25 个索引的样本

index2 <- 样本(1:1000,大小 = 25,替换 = 真)

但随后您尝试从长度仅为 25 的列表中提取这些索引。因此您最终将在 a.boot.

中得到大部分 NA 值

如果我理解你想要做什么,那么这应该可行:

samples = replicate(1000, rnorm(25,0,1), simplify=FALSE)
hist(sapply(samples, var))

sub.sample = as.vector(unlist(sample(samples, 1)))
rep.boot2=list()
for (i in 1:1000) {
  index2 <- sample(1:25, size = 25, replace = TRUE)  
  a.boot <- sub.sample[index2]  
  rep.boot2[i] <- var(a.boot)
}