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

Bootstrap样本跨样本均值与标准差计算方法咨询

解决跨样本均值与重复计算的问题

首先,先帮你修正现有代码里的小疏漏:你代码里提到的r.median是未定义的,应该替换成r.mean,这样才能正确计算20个bootstrap均值的标准差,修正后的基础代码如下:

## create data
data <- round(rnorm(100, 5, 3))
data[1:10]
## obtain 20 boostrap samples
resamples <- lapply(1:20, function(i) sample(data, replace = T))
resamples[1]
## calculate the means for each bootstrap sample
r.mean <- sapply(resamples, mean)
## calculate the sd of the distribution of means
sqrt(var(r.mean))

接下来针对你的需求——获取100个“跨样本均值”(每个均值是20个bootstrap样本均值的平均值),并计算这100个值的标准差——我们可以用replicate()函数高效重复执行整个流程,它能帮你自动完成指定次数的重复操作并收集结果。

实现代码

# 原始数据生成(设置随机种子保证结果可复现)
set.seed(123)
data <- round(rnorm(100, 5, 3))

# 封装单次流程的函数:生成20个bootstrap样本→计算样本均值→求跨样本均值
compute_cross_sample_mean <- function(data) {
  # 生成20个bootstrap样本
  resamples <- lapply(1:20, function(i) sample(data, replace = TRUE))
  # 计算每个样本的均值
  sample_means <- sapply(resamples, mean)
  # 返回20个均值的跨样本平均值
  return(mean(sample_means))
}

# 重复执行100次,得到100个跨样本均值
cross_sample_means_100 <- replicate(100, compute_cross_sample_mean(data))

# 查看前10个跨样本均值
cross_sample_means_100[1:10]

# 计算这100个跨样本均值的标准差
sd_cross_sample_means <- sd(cross_sample_means_100)
sd_cross_sample_means

代码说明

  • set.seed(123):固定随机种子,让每次运行代码的结果一致,方便调试和验证。
  • compute_cross_sample_mean():把单次生成样本、计算均值、求跨样本均值的逻辑封装成函数,让代码更清晰易维护。
  • replicate(100, ...):自动重复执行指定函数100次,将100个跨样本均值收集到一个向量中。
  • sd(cross_sample_means_100):直接计算100个跨样本均值的标准差,和sqrt(var(...))结果等价但更简洁。

如果你需要的是每次生成20个bootstrap样本后,同时得到这20个均值的跨样本均值和标准差,再重复100次得到100组(均值+标准差),可以修改函数让它返回包含两个统计量的列表:

compute_cross_stats <- function(data) {
  resamples <- lapply(1:20, function(i) sample(data, replace = TRUE))
  sample_means <- sapply(resamples, mean)
  return(list(
    cross_mean = mean(sample_means),
    cross_sd = sd(sample_means)
  ))
}

# 重复100次,得到100组统计量
cross_stats_100 <- replicate(100, compute_cross_stats(data), simplify = FALSE)

# 提取100个跨样本均值
cross_means_100 <- sapply(cross_stats_100, function(x) x$cross_mean)
# 提取100个跨样本标准差
cross_sds_100 <- sapply(cross_stats_100, function(x) x$cross_sd)

这样就能分别得到100个跨样本均值和对应的100个跨样本标准差了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:42