R中如何计算数据框两变量对应最大值的bootstrapped误差标准差
R分组Bootstrap计算最大值对应索引的标准差
实现逻辑
将每一次bootstrap采样与「ex最大值对应ei的提取」绑定,重复指定次数后对所有提取到的ei计算标准差即可,以下是可直接运行的代码:
首先加载依赖包:
library(dplyr)
完整实现代码:
# 示例数据(固定种子方便复现结果) set.seed(123) ex <- rnorm(10, 3, 1.4) ei <- rep(1:5, times=2) eg <- rep(letters[1:2], each=5) eg.df <- data.frame(eg, ex, ei) # 自定义bootstrap重复次数,次数越高结果稳定性越好 n_bootstrap <- 1000 eg_boot_result <- eg.df %>% group_by(eg) %>% reframe( # 重复n_bootstrap次采样逻辑 boot_data = replicate(n_bootstrap, { # 分组内有放回采样,样本量和原组一致 # dplyr版本低于1.1.0请将pick(everything())替换为cur_data() sample_df <- slice_sample(pick(everything()), prop = 1, replace = TRUE) # 返回本次采样的max(ex)和对应ei c( max_ex = max(sample_df$ex), max_ei = sample_df$ei[which.max(sample_df$ex)] ) }) %>% t(), # 转置为每行对应一次采样结果的格式 .groups = "drop" ) %>% # 按分组计算两个指标的标准差 group_by(eg) %>% summarise( sdEx = sd(boot_data[, "max_ex"]), sdEi = sd(boot_data[, "max_ei"]) ) # 输出结果 print(eg_boot_result)
说明
- 相比嵌套
sample的写法,用replicate封装单次采样逻辑可读性更强,也方便调整重复次数 - 如果你需要保留所有bootstrap的原始采样结果用于后续分析,删除最后的
summarise步骤即可获取每一次采样的max_ex和max_ei值
内容的提问来源于stack exchange,提问作者steve k
相关产品推荐
相关产品推荐

