我有一个向量,我想对其进行 block 重采样,以获得与该向量大小相同的 1000 个样本,然后将所有这些样本保存在列表中。
这是执行正常重采样的代码,即每次随机抽取一个观察值,并将结果保存在列表中:
myvector <- c(1:200)
mylist <- list()
for(i in 1:1000){
mylist[[i]] <- sample(myvector, length(myvector), replace=TRUE)
}
我需要一个执行完全相同操作的代码,只不过不是绘制单个观测值,而是绘制观测值 block (让我们使用维度等于 5 的 block )。
我知道有一些包可以执行引导操作,但我不需要统计数据或置信区间或任何东西,只需要列表中的所有样本。重叠和非重叠 block 都可以,因此只需两个过程之一的代码就足够了。当然,如果您愿意给我这两个代码,我将不胜感激。感谢任何可以帮助我的人。
最佳答案
不确定您想要如何存储最终结构。
以下内容采用 block 尺寸,按该 block 大小对向量进行采样(例如, block 大小为 5 的 200 个元素向量给出了随机采样元素的 40 个观察值),并将这些 block 添加到最终列表的索引中。使用您的示例,最终结果是一个包含 1000 个条目的列表;每个条目包含 40 个随机抽样的观察结果。
myvector <- c(1:200)
rm(.Random.seed, envir=globalenv())
block_dimension <- 5
res = list()
for(i in 1:1000) {
name <- paste('sample_', i, sep='')
rep_num <- length(myvector) / block_dimension
all_blocks <- replicate(rep_num, sample(myvector, block_dimension))
tmp <- split(all_blocks, ceiling(seq_along(all_blocks)/block_dimension))
res[[name]] <- tmp
}
以下是第一个条目的前 6 个采样观测值:
关于R - block 重采样并将样本保存在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48291253/