You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stata无上下界数据生成带置信区间的分组均值柱状图优化

简化Stata分组均值柱状图(带置信区间)的实现方法

问题背景

现有Stata数据集包含字段:math_score、literacy_score、student_gender(Girl=0,Boy=1)、Location(Rural=0,Urban=1)。需生成按性别和地点分组的literacy_score均值柱状图,并添加置信区间,但原代码冗长且生成冗余临时数据集,需更简洁的实现方式。

简化方案

无需生成中间数据集,直接通过estpost统计分组均值与置信区间,再结合twoway绘图,全程在原数据集操作,避免文件杂乱:

单科目(literacy_score)实现代码

* 统计分组均值与95%置信区间
estpost tabstat literacy_score, by(student_gender Location) statistics(mean ci) columns(statistics)

* 提取统计结果并清理格式
estimates store literacy_stats
esttab literacy_stats, noobs not label cells("mean(fmt(1)) ci_low(fmt(1)) ci_high(fmt(1))") clear

* 生成分组轴标签
gen group = _n
label define group 1 "Girl" 2 "Boy" 3 "Rural" 4 "Urban"
label values group group

* 绘制带置信区间的柱状图
twoway (bar mean group, color(ltblue)) ///
       (rcap ci_high ci_low group, color(black)) ///
       (scatter mean group, msymbol(none) mlabel(mean) mlabposition(1) mlabsize(small)), ///
       xlabel(1/4, valuelabel noticks labsize(small)) ///
       ytitle("Mean Literacy Score") ///
       xtitle("Student Features") ///
       title("Literacy Student Knowledge Score (0-100)") ///
       ylabel(0(25)100) ///
       legend(off) ///
       scheme(s2color8) ///
       name(literacy_gen_loc, replace)

* 导出图片
graph export "$output/literacy_gen_loc.jpg", as(jpg) width(4000) replace

多科目(math_score + literacy_score)循环实现代码

如果需要一次性生成两个科目的图表,可套入foreach循环,同样无需临时文件:

foreach score_var in math_score literacy_score {
    * 统计分组均值与置信区间
    estpost tabstat `score_var', by(student_gender Location) statistics(mean ci) columns(statistics)
    estimates store stats_`score_var'
    esttab stats_`score_var', noobs not label cells("mean(fmt(1)) ci_low(fmt(1)) ci_high(fmt(1))") clear
    
    * 生成分组轴标签
    gen group = _n
    label define group 1 "Girl" 2 "Boy" 3 "Rural" 4 "Urban"
    label values group group
    
    * 动态设置标题与纵轴标签
    local title_str = cond("`score_var'" == "math_score", "Math Student Knowledge Score (0-100)", "Literacy Student Knowledge Score (0-100)")
    local ytitle_str = cond("`score_var'" == "math_score", "Mean Math Knowledge Score", "Mean Literacy Knowledge Score")
    
    * 绘图
    twoway (bar mean group, color(ltblue)) ///
           (rcap ci_high ci_low group, color(black)) ///
           (scatter mean group, msymbol(none) mlabel(mean) mlabposition(1) mlabsize(small)), ///
           xlabel(1/4, valuelabel noticks labsize(small)) ///
           ytitle("`ytitle_str'") ///
           xtitle("Student Features") ///
           title("`title_str'") ///
           ylabel(0(25)100) ///
           legend(off) ///
           scheme(s2color8) ///
           name(`score_var'_gen_loc, replace)
    
    * 导出图片
    graph export "$output/`score_var'_gen_loc.jpg", as(jpg) width(4000) replace
    
    * 恢复原数据集
    restore, not
}

方案优势

  • 全程在原数据集操作,不生成任何冗余临时文件,避免工作目录杂乱
  • 代码结构简洁,逻辑清晰,易维护和修改
  • 直接通过estpost自动计算置信区间,无需手动调用ci mean和statsby

内容的提问来源于stack exchange,提问作者Shubhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:35:02