Stata绘图：回归系数可视化-论文更出彩

Stata连享会   主页 || 视频 || 推文 || 知乎

New！ `lianxh` 命令发布了：

`. ssc install lianxh`

`. help lianxh`

E-Mail: wanli_buaa@163.com

Source:

• 百度云盘：https://pan.baidu.com/s/1JYL-MxGirNvR5SPZC5VxTA, 提取码: oxkw

2. 范例一：比较不同模型的边际效应

``````* Figure: Comparison of marginal effects from linear and logistic specifications

* 1. 将图像的基本设置保存在全局暂元 graph_opts 里
global graph_opts title(, justification(left) color(black) span pos(11)) ///
graphregion(color(white)) ylab(,angle(0) nogrid) ///
xtit(,placement(left) justification(left)) ///
yscale(noline) xscale(noline) legend(region(lc(none) fc(none)))

* 2. 加载数据
use "data\reg-models.dta" , clear

* 3. 创建画图需要的数据
cap mat drop theResults
local theLabels ""
local x = 15.5

qui foreach var of varlist ??_correct refer med_any med_class_any_6 med_class_any_16 {
// ??表示匹配任意两个字符
local theLabel : var label `var'
local theLabels `"`theLabels' `x' "`theLabel'""'
local x = `x' - 2

reg `var' facility_private i.case_code //线性回归

//可输入return list查看 Stata 命令的返回值
mat a = r(table)  //用矩阵保存线性回归命令的返回值

local b = a[1,1]  //提取估计系数
local ll = a[5,1] //提取左置信区间
local ul = a[6,1] //提取右置信区间
mat a = [`b',`ll',`ul',1] //横向合并矩阵
mat rownames a = "`var'"  //以变量名为矩阵的行名

logit `var' facility_private i.case_code //logit回归
margins , dydx(facility_private)

mat b = r(table)  //用矩阵保存logit回归命令的返回值

local b = b[1,1]  //提取估计系数
local ll = b[5,1] //提取左置信区间
local ul = b[6,1] //提取右置信区间
mat b = [`b',`ll',`ul',2] //横向合并矩阵
mat rownames b = "`var'" //以变量名为矩阵的行名

mat theResults = nullmat(theResults) \ a \ b
// \表示纵向合并矩阵
}

mat colnames theResults = "b" "ll" "ul" "type"
//修改矩阵的列名
matlist theResults //查看矩阵元素

clear //清除原始数据
svmat theResults , names(col)
//将矩阵转化为变量

gen n = _n
replace n = 17-n //逆序排列

* 4. 绘图
tw ///
(rcap ll ul n if type == 1 , hor lc(navy)) ///
(scatter n b if type == 1 , mc(black)) ///
(rcap ll ul n if type == 2 , hor lc(maroon)) ///
(scatter n b if type == 2 , mc(black)) ///
, ///
\${graph_opts} ///
ylab(`theLabels') ///
ytit(" ") ///
xlab(-1 "-100p.p." -.5 `""-50p.p." "{&larr} Favors Public""' ///
0 "No Effect" .5 `""+50p.p." "Favors Private {&rarr}""' 1 "+100p.p.") ///
xline(0 , lc(gs12) lp(dash)) ///
legend(order(2 "Marginal Effect" 1 "Linear Model" 3 "Logistic Model") r(1))

/*

qui 表示悄悄处理命令，不显示结果
/// 表示换行，避免一行内容过多
tw 为 twoway 的缩写
hor 是horizontal的缩写，表示水平绘制；默认为竖直绘制

*/
``````

• 利用 `twoway rcap` 绘制置信区间；

• `twoway rcap` 用于以`|——|`图示数据范围，左右两端分别为最小、最大值。

3. 范例二：图表可视化回归系数

``````* Figure: Impact of provider qualifications on main standardized patient outcomes

* firthlogit, in package firthlogit from http://fmwww.bc.edu/RePEc/bocode/f
* estadd, in package st0085_2 from http://www.stata-journal.com/software/sj14-2
* xml_tab, in package dm0037 from http://www.stata-journal.com/software/sj8-3
findit firthlogit
findit xml_tab

version 13

* 2. 加载数据
use "data\reg-chartable.dta", clear

* 3. 绘图
* Sample Restriction Logic
// 选取部分样本
global cxr "& sp_case <3"
global sputum "& sp_case <3"
global sp_drugs_tb "& sp_case >2"

* Output
chartable correct cxr sputum s5_referral ///
sp_drugs_tb sp_drugs_antibio sp_drugs_quin ///
using "results.xlsx" ///
, ///
c(xi: firthlogit) ///
rhs(q_mbbs pro_age pro_male patients_waiting_in i.sp_id) or p globalif
``````

• 本案例使用了作者自己编写的外部命令 `chartable`

• 本案例不具有普适性，仅适用于本案例中的数据，若要推广则需手动修改作者的 `adofile`

4. 范例三：比较不同组别的边际效应

``````*FIGURE: Marginal effects by heterogeneity gorups

* 1. 加载系统自带数据
sysuse auto, clear

* 2. 预处理
ssc install coefplot, replace //安装命令

local label1 Foreign
local label0 Domestic

*在合并图像中，使其共用一个y轴，设置y轴
local yopts1 ylab(, labcolor(white)) ///
ytitle("") ///
yscale(noline)

gr drop _all

*3. 利用循环语句绘制单个图
* Loop over heterogeneity variables
forvalues foreign = 0/1 {

* 运行线性回归得到边际效应
* -----------------------------------
reg price mpg headroom if foreign == `foreign'

* 绘制不同组别的边际效应
* -----------------------------
coefplot ///
, ///
drop(_cons) /// 不显示常数项
vertical ///
yline(0, lpattern(dash)) /// 判断显著性
ciopt(color(gs10 gs10) ///
recast(rcap)) ///
levels(90 95) /// 展示90%和95%置信区间
ylab(, noticks glcolor(gs15)) ///
xlab(, noticks labsize(small)) ///
xtitle("") ///
ytitle("Marginal effect on price") ///
title(`label`foreign'', box bexpand bcolor(gs15)) ///
color(black) ///
name(f`foreign') ///
graphregion(color(white)) ///
`yopts`foreign''
}
// title(...,box ...)添加标题，并添加边框线

* 4. 合并图形
gr combine 	f0 f1, ///
ycommon ///
graphregion(color(white))
// gr是graph的缩写
``````

5. 范例四：展示回归的预测结果/拟合值

``````* 1. 加载系统自带数据
sysuse auto, clear

* 2. 创建画图需要的数据
reg price ibn.foreign //线性回归
// ibn.表示不设置基准组

test 1.foreign == 0.foreign
local pval : di %5.3f `r(p)'
local pval = trim("`pval'")
//去 trim 掉两端的空格
//用暂元保存p-value，用于画图

* 计算不同种类的边际效应
margins foreign

* 3. 绘图
marginsplot, ///
recast(bar) ///
plotopts(barwidth(0.5) bargap(10)) ///
ciopts(recast(rcap) color(gs10)) ///
ylabel(0(2000)8000) ///
title("Adjusted prediction of car price" "with 95% confidence interval") ///
xlabel(, noticks) ///
xtitle(Model origin) ///
graphregion(color(white)) ///
note(Note: P-value of F-test for coefficient equality across categories is `pval'.)
// recast(bar) 是将散点变成条形图形式。
``````

6. 总结

• 百度云盘：https://pan.baidu.com/s/1JYL-MxGirNvR5SPZC5VxTA, 提取码: oxkw
• 项目主页：https://github.com/worldbank/stata-visual-library

6. 相关推文

Note：产生如下推文列表的 Stata 命令为：
`lianxh 图示 绘图`

`ssc install lianxh, replace`

相关课程

http://lianxh.duanshu.com

课程一览

Note: 部分课程的资料，PPT 等可以前往 连享会-直播课 主页查看，下载。

关于我们

• Stata连享会 由中山大学连玉君老师团队创办，定期分享实证分析经验。直播间 有很多视频课程，可以随时观看。
• 连享会-主页知乎专栏，400+ 推文，实证分析不再抓狂。
• 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标，输入简要关键词，以便快速呈现历史推文，获取工具软件和数据下载。常见关键词：`课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法`

✏ 连享会学习群-常见问题解答汇总：
https://gitee.com/arlionn/WD

New！ `lianxh` 命令发布了：

`. ssc install lianxh`

`. help lianxh`