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
相关产品推荐
相关产品推荐

