【问题标题】:Select a sample at random and use it to generate 1000 bootstrap samples随机选择一个样本并使用它生成 1000 个引导样本
【发布时间】:2019-03-01 06:40:48
【问题描述】:

我想从标准正态分布中生成 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]  
}

但运行上述操作会产生“维度数不正确”的错误。哪个部分导致了错误?

【问题讨论】:

  • 你可以简单地做a.boot &lt;- sample(sub.sample, replace = TRUE)。您的 index2 错误,因为您的子样本没有 1000 个元素。

标签: r statistics-bootstrap


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多