如何用Python绘制带95%置信区间的双重差分(DID)回归系数图
带95%置信区间的DID动态效应系数图画法
你原有代码运行异常的核心问题是yerr参数传入错误:当你拥有明确的上下置信区间边界时,需要给yerr传入非对称误差数组,第一行是每个系数点到置信区间下限的距离(coef - ci_lower),第二行是到上限的距离(ci_upper - coef),同时原有代码缺少科研绘图必要的标注、参考线等信息。
以下是可直接运行的完整实现:
import pandas as pd import matplotlib.pyplot as plt # ---------------------- 数据读取部分 ---------------------- # 示例数据构造,实际使用时替换为pd.read_csv()读取你的真实数据集 df = pd.DataFrame({ 'x': ['t-3', 't-2', 't-1', 't', 't+1', 't+2', 't+3'], 'coef': [0.0005219, 0.0008449, 0, 0.0009092, 0.0010828, 0.0013157, 0.001452], 'ci_lower': [-0.000759, -0.0004935, 0, -0.0000604, 0.0001634, 0.0008022, 0.0008933], 'ci_upper': [0.0018028, 0.0021833, 0, 0.0018789, 0.0020023, 0.0018291, 0.0020106] }) # 计算非对称误差区间 y_err = [df['coef'] - df['ci_lower'], df['ci_upper'] - df['coef']] # ---------------------- 绘图部分 ---------------------- # 中文显示配置,纯英文绘图场景可删除 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.figure(figsize=(10, 6), dpi=120) # 绘制带误差棒的系数点,linestyle设为"-"可连接系数点直观展示趋势 plt.errorbar(x=df['x'], y=df['coef'], yerr=y_err, color="black", capsize=3, linestyle="-", linewidth=1.5, marker="s", markersize=7, mfc="black", mec="black") # 绘制y=0参考线,快速判断系数是否显著异于0 plt.axhline(y=0, color='gray', linestyle='--', linewidth=1) # 绘制政策节点参考线,t-1为基准期,对应x轴索引为2 plt.axvline(x=2, color='red', linestyle='--', linewidth=1, label='政策实施节点') # 图表信息配置 plt.xlabel('政策时间节点', fontsize=12) plt.ylabel('DID估计系数', fontsize=12) plt.title('双重差分动态效应估计(含95%置信区间)', fontsize=14) plt.legend() plt.grid(axis='y', linestyle=':', alpha=0.3) plt.tight_layout() plt.show()
如果需要适配学术期刊风格,可以自行调整配色、删除上/右边框、给显著异于0的系数点替换标记颜色即可。
内容的提问来源于stack exchange,提问作者DAEHYUN KIM
相关产品推荐
相关产品推荐

