随机选择一个样本,并使用它生成1000个引导样本

时间:2019-03-01 06:40:49

标签: r statistics-bootstrap

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

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

然后,我想从这1000个样本中随机选择一个样本,并从该样本中提取1000个引导程序。然后计算每个变量的方差并绘制直方图。到目前为止,我有:

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]  
}

但是运行上面的命令会产生“尺寸错误”错误。哪个部分导致了错误?

1 个答案:

答案 0 :(得分:1)

我可以在这里看到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 <-sample(1:1000,size = 25,replace = TRUE)

但是随后您尝试从长度仅为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)
}