Stata中如何在coefplot上存储并绘制回归系数的置信区间
在Stata中存储回归系数及置信区间并绘制带置信区间的折线图
步骤1:同时存储系数与置信区间上下限
每次跑完目标回归后,除了存储系数,还要计算并存储95%置信区间的上下限(以t分布为例,大样本可替换为z分布):
// 假设这是你针对某一时间段的回归代码,替换为实际模型 reg y x1 x2 x3 // 存储系数 local coef1 = _b[x1] // 提取回归自由度与标准误 local df = e(df_r) local se1 = _se[x1] // 计算95%置信区间上下限 local lci1 = `coef1' - invttail(`df', 0.025)*`se1' local uci1 = `coef1' + invttail(`df', 0.025)*`se1'
重复上述操作,依次得到coef2-coef6、lci2-lci6、uci2-uci6(对应6个时间区间)。
步骤2:构建包含系数与置信区间的矩阵
创建一个3行6列的矩阵,分别存放系数、置信区间下限、置信区间上限:
matrix Z = (`coef1',`coef2',`coef3',`coef4',`coef5',`coef6') \ /// (`lci1',`lci2',`lci3',`lci4',`lci5',`lci6') \ /// (`uci1',`uci2',`uci3',`uci4',`uci5',`uci6')
步骤3:用coefplot绘制带置信区间的折线图
调用coefplot时,指定矩阵第一行为点估计值,第二、三行为置信区间的上下限,同时移除原代码中的noci参数:
coefplot (matrix(Z[1,]), ci((Z[2,]) (Z[3,])) ciopts(recast(rcap)) /// vertical recast(connected) xlabel(1 "P1" 2 "P2" 3 "P3" 4 "P4" 5 "P5" 6 "P6") /// yline(0) name(Fig000) xtitle(Time intervals) ytitle(Coefficient))
优化:用循环简化重复操作
如果6个时间区间可通过循环遍历(比如用标记变量区分时间段),可以用循环自动完成存储与矩阵构建:
// 初始化3行6列的空矩阵 matrix Z = J(3,6,0) forvalues i=1/6 { // 替换为针对第i个时间段的回归代码,比如按period变量筛选 reg y x1 x2 x3 if period == `i' // 存入系数与置信区间 matrix Z[1,`i'] = _b[x1] local df = e(df_r) matrix Z[2,`i'] = _b[x1] - invttail(`df', 0.025)*_se[x1] matrix Z[3,`i'] = _b[x1] + invttail(`df', 0.025)*_se[x1] } // 绘图代码同步骤3 coefplot (matrix(Z[1,]), ci((Z[2,]) (Z[3,])) ciopts(recast(rcap)) /// vertical recast(connected) xlabel(1 "P1" 2 "P2" 3 "P3" 4 "P4" 5 "P5" 6 "P6") /// yline(0) name(Fig000) xtitle(Time intervals) ytitle(Coefficient))
注意事项
- 若使用z分布(大样本场景),将
invttail(df', 0.025)替换为invnormal(0.975)`即可 - 非OLS模型(如probit、logit)需调整置信区间的计算逻辑,匹配对应模型的分布特征
内容的提问来源于stack exchange,提问作者Joshua Scott
相关产品推荐
相关产品推荐

