如何在R语言百分比绘图中添加标准误误差条
核心逻辑说明
你当前绘图的y轴实际使用的是0-1区间的比例值,scale_y_continuous(labels = scales::percent)只是将数值标签转换为百分比格式,本质数值尺度没有变化,因此误差条不需要特殊适配百分比尺度:比例对应的标准误本身就是0-1区间的数值,直接和比例值配套使用即可。
方案1:简化版二项分布标准误实现(忽略嵌套结构)
适合快速验证可视化效果,直接基于二项分布公式计算比例的标准误:
library(tidyverse) # 先计算分组统计量:样本量、比例、标准误、置信区间 plot_data <- data %>% # 按RC和RTA分组统计每类的数量 group_by(RC, RTA) %>% summarise(n = n(), .groups = "drop_last") %>% # 计算每个RC分组的总样本量、比例、标准误 mutate(total_n = sum(n), prop = n / total_n, # 二项分布比例标准误公式 se = sqrt(prop * (1 - prop) / total_n), # 95%置信区间上下限,可根据需要调整为±1倍SE展示标准误 ci_low = pmax(0, prop - 1.96 * se), # 避免区间低于0 ci_high = pmin(1, prop + 1.96 * se)) # 避免区间高于1 # 绘图 ggplot(plot_data, aes(x = RC, y = prop, fill = RTA, color = RTA)) + geom_col(position = position_dodge(width = 0.9), alpha = 0.7) + # 添加误差条,dodge宽度和柱子对齐 geom_errorbar(aes(ymin = ci_low, ymax = ci_high), position = position_dodge(width = 0.9), width = 0.25) + scale_y_continuous(labels = scales::percent, limits = c(0, max(plot_data$ci_high) * 1.1)) + geom_text(aes(label = scales::percent(prop, accuracy = 0.1)), position = position_dodge(width = 0.9), vjust = -0.3)
方案2:适配嵌套结构的标准误计算(更准确)
你的数据存在「被试-作答题目」的嵌套结构,直接用汇总样本计算标准误会低估抽样误差,建议用混合效应模型估计边缘比例和对应标准误:
library(tidyverse) library(lme4) library(emmeans) # 1. 转换二分类变量:将RTA转为0/1变量用于逻辑回归 data <- data %>% mutate(RTA_bin = ifelse(RTA == "SN1", 1, 0)) # 2. 拟合混合效应逻辑回归,控制被试和题目的随机截距 mod <- glmer(RTA_bin ~ RC * RTA + (1|Part) + (1|Item), data = data, family = binomial) # 3. 估计每个RC+RTA分组下的预测比例和标准误 plot_data <- emmeans(mod, ~ RTA | RC, type = "response") %>% as.data.frame() # 4. 绘图逻辑和方案1完全一致,直接使用emmeans输出的概率、置信区间即可 ggplot(plot_data, aes(x = RC, y = prob, fill = RTA, color = RTA)) + geom_col(position = position_dodge(width = 0.9), alpha = 0.7) + geom_errorbar(aes(ymin = asymp.LCL, ymax = asymp.UCL), position = position_dodge(width = 0.9), width = 0.25) + scale_y_continuous(labels = scales::percent, limits = c(0, max(plot_data$asymp.UCL) * 1.1)) + geom_text(aes(label = scales::percent(prob, accuracy = 0.1)), position = position_dodge(width = 0.9), vjust = -0.3)
如果混合模型收敛困难,也可以先按「被试+RC+RTA」分组聚合,计算每个被试在对应分组下的RTA选择占比,再按RC和RTA分组计算占比的均值、标准误,同样可以控制被试间的变异。
内容的提问来源于stack exchange,提问作者Noelia Stetie
相关产品推荐
相关产品推荐

