R语言分组计算均值与可信区间 分位数重复均值如何修复
问题原因
你的代码计算逻辑存在顺序错误:
dplyr的summarise()在分组操作下,会按分组把多行原始数据聚合为单一行的汇总值。你在同一次汇总中先计算了组级别的单值统计量means = mean(values),此时每个分组内means仅对应1个标量结果,再对这个单值计算2.5%、97.5%分位数,输出结果必然和该单值完全相等,这就是上下界和均值完全一致的直接原因。- 额外逻辑偏差:你当前写的分位数计算是针对聚合后的均值标量,完全没有基于原始观测值
values计算,统计逻辑本身不成立。
修复方法
根据你实际需要的区间类型,选择对应代码即可:
场景1:需要计算每组原始values的分位数区间
如果你的需求就是统计每组原始观测值的均值、以及原始值的2.5%和97.5%分位数作为边界,只需要把分位数计算的输入对象从聚合后的means替换为原始列values即可:
meansCIs <- merged %>% group_by(AgeGroup, ind) %>% summarise( means = mean(values), lower_bound = quantile(values, 0.025), upper_bound = quantile(values, 0.975), .groups = "keep" )
场景2:需要计算组均值的95%统计可信区间
如果你要的是统计推断层面均值的95%可信区间(而非原始值的分位数范围),不能直接用原始值分位数计算,需要基于样本标准误和t分布近似计算:
meansCIs <- merged %>% group_by(AgeGroup, ind) %>% summarise( sample_n = n(), means = mean(values), se = sd(values) / sqrt(sample_n), lower_bound = means - qt(0.975, df = sample_n - 1) * se, upper_bound = means + qt(0.975, df = sample_n - 1) * se, .groups = "keep" ) %>% select(-sample_n, -se) # 可删除中间计算用的辅助列
补充说明:如果你需要用bootstrap法计算均值的可信区间,需要先对每个分组做有放回重采样,生成均值的抽样分布后,再对重采样得到的均值向量计算分位数,无法在单次原始聚合步骤中直接完成。
内容的提问来源于stack exchange,提问作者Tessa
相关产品推荐
相关产品推荐

