求助:计算含总体中位数的Bootstrap置信区间数量(代码循环问题)
Bootstrap置信区间覆盖率计算问题修正
你的代码存在变量定义、循环逻辑和索引错误,以下是问题梳理和修正方案:
核心问题点
- 未定义变量
B:代码多处使用B但未赋值,需明确区分外层重复实验次数和内层Bootstrap抽样次数 - 无效变量
Total:sample函数中size=length(Total)无定义,应改为length(data)(与原始样本量一致) - 排序逻辑错误:
result_vec[i]<- result_vec[order(result_vec)]会将整个排序向量塞进单个元素,导致分位数计算完全失效 - 分位数索引错误:
0.0975应为0.975,且手动索引易出错,建议直接用分位数函数 - 条件判断错误:
if(lower_bound<... && upper_bound<...)是对整个向量做比较,应取当前循环对应的单个元素
修正后的代码
pop_median <- 0.693 # 内层Bootstrap抽样次数 n_boot <- 10000 # 外层重复实验次数 n_rep <- 1000 set.seed(233) data <- rexp(100, 1) lower_bound <- vector(length = n_rep) upper_bound <- vector(length = n_rep) count <- 0 for (i in 1:n_rep) { # 用replicate替代内层循环,生成n_boot个Bootstrap中位数 boot_medians <- replicate(n_boot, median(sample(data, size = length(data), replace = TRUE))) # 直接计算95%置信区间的分位数 lower_bound[i] <- quantile(boot_medians, 0.025) upper_bound[i] <- quantile(boot_medians, 0.975) # 判断总体中位数是否在当前区间内 if (lower_bound[i] < pop_median && upper_bound[i] > pop_median) { count <- count + 1 } } count
优化说明
- 用
replicate替代内层循环,代码更简洁且执行效率更高 - 变量命名更清晰(
n_boot、n_rep),避免混淆 - 直接调用
quantile函数计算分位数,避免手动索引可能出现的边界错误
内容的提问来源于stack exchange,提问作者Odinakachukwu
相关产品推荐
相关产品推荐

