You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中实现样本量从2到1000逐步递增的bootstrap方差计算?

批量计算Bootstrap样本量与方差的关系

核心思路

你需要通过嵌套循环实现需求:外层遍历从2到1000的所有样本量,内层针对每个样本量重复10次Bootstrap抽样并计算方差。最后汇总每个样本量的平均方差,就能绘制出稳定的趋势图。

优化后的代码实现

set.seed(1)  # 固定随机种子,保证结果可重复

# 定义参数
bSamples <- 10  # 每个样本量的重复抽样次数
n_vals <- 2:1000  # 要覆盖的样本量范围

# 预先初始化结果矩阵(比动态添加行更高效)
var_results <- matrix(NA, nrow = length(n_vals), ncol = bSamples)
rownames(var_results) <- n_vals

# 外层循环:遍历所有目标样本量
for (i in seq_along(n_vals)) {
  current_n <- n_vals[i]
  # 内层循环:针对当前样本量重复抽样计算方差
  for (b in 1:bSamples) {
    # 从baseRan中随机抽取current_n行数据
    sampled_data <- baseRan[sample(nrow(baseRan), current_n), ]
    # 计算方差并写入结果矩阵
    var_results[i, b] <- var(sampled_data$Ranpopsize)
  }
}

# 计算每个样本量的平均方差(基础R实现)
mean_var_df <- data.frame(
  sample_size = n_vals,
  mean_variance = rowMeans(var_results)
)

# 绘制样本量与平均方差的关系图
plot(mean_var_df$sample_size, mean_var_df$mean_variance, 
     type = "l", lwd = 2, col = "steelblue",
     xlab = "样本量", ylab = "Bootstrap重复平均方差",
     main = "样本量与Bootstrap方差的关系")

关键说明

  1. 预先分配结果空间:用矩阵预先存储所有结果,避免循环中动态扩展数据结构的性能损耗,尤其在样本量范围较大时优势明显。
  2. 重复抽样取均值:每个样本量重复计算10次后取平均,能抵消单次抽样的随机波动,让样本量和方差的趋势更可靠。
  3. 极简绘图逻辑:直接用基础R绘图快速验证结果,若需要更美观的图表,可替换为ggplot2包实现。

可选:用tidyverse优化数据格式

如果你习惯使用 tidy 数据格式,可添加以下代码转换结果,方便后续复杂分析:

library(tidyverse)
tidy_results <- as.data.frame(var_results) %>%
  rownames_to_column("sample_size") %>%
  pivot_longer(cols = -sample_size, names_to = "replicate", values_to = "variance") %>%
  mutate(
    sample_size = as.integer(sample_size),
    replicate = as.integer(str_remove(replicate, "V"))
  )

# 计算平均方差
mean_var_by_n <- aggregate(variance ~ sample_size, data = tidy_results, FUN = mean)

内容的提问来源于stack exchange,提问作者PeterLL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:50:22