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]
}
但是运行上面的命令会产生“尺寸错误”错误。哪个部分导致了错误?
答案 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)
}