Stata绘图:回归系数可视化-multicoefplot

发布时间:2022-05-19 阅读 1592

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

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:谢佳松 (中山大学)
邮箱:xiejs3@mail2.sysu.edu.cn


目录


1. 简介

本文主要介绍由苏黎世联邦理工学院教授 Matteo Pinna 开发的,用于时间维度横截面分析的可视化操作命令 multicoefplot。该命令最大的优势是在横截面比较的同时,允许不同控制变量集下得到的点估计系数以及置信区间进行直接比较。

2. multicoefplot 命令

multicoefplot 命令安装:

net describe multicoefplot, from(http://fmwww.bc.edu/RePEc/bocode/m)
net install multicoefplot.pkg, replace
net     get multicoefplot.pkg, replace

multicoefplot 命令使用前需要了解的相关事项:

  • 第一,使用 multicoefplot 命令前必须将回归分析中常用的长面板数据 reshape 成宽面板数据。因此,建议使用者在利用该命令绘图时,重新生成一个 do file,然后更换数据结构后再进行操作;
  • 第二,该命令的写法基于高维固定效应命令 reghdfe。关于 reghdfe 命令的详细介绍,可以参考连享会推文「reghdfe:多维面板固定效应估计」。

multicoefplot 命令语法:

multicoefplot {namelist} [if] [in] [, options]

其中,namelist 为被解释变量。需要注意的是,这里要填写被解释变量名称的不变部分。例如,被解释变量为城市 GDP,时间为 2017-2020 年。在宽面板数据结构下,则有四个被解释变量:GDP2017、GDP2018、GDP2019、GDP2020,此时仅需填写 GDP 即可。

必需的 options

  • window:分析的时间范围。若 1999 年至 2010 年,每年均进行分析,可填写为 window(1999/2010)。若每隔两年进行比较,写法为 window(1999(2)2010),以此类推;
  • treatment:需要分析的核心解释变量。语法为 treatment(varname, varying(varname))。注意:该命令一个最重要的优势是可以直接进行不同控制变量集下的比较,因此可以添加多个 treatment,具体可参考后文实例。

其他的 options

  • command:显示隐含的回归指令;
  • noconstant:取消所有估计中的常数项;
  • level():设定图形展示的置信区间,默认值为 95%;
  • first:当进行面板 IV 估计时,报告第一阶段估计结果;
  • legend(off):关闭图例;
  • absorb:回归中包含的固定效应。由于该命令是基于 reghdfe 编写的,需要添加 absorb(fe_name)
  • timeabsorb:要包含在回归中的时变固定效应 (同样仅包含名称的不变部分);
  • controls:回归中要包含的控制变量;
  • timecontrols:回归中包含的时变控制变量 (同样仅包含名称的不变部分)。注意:在该命令中,控制变量需要区分为时变控制变量和非时变控制变量。例如城市地理、文化因素是非时变的,需要用 controls 设定,城市经济发展或产业结构是时变的,即用 timecontrols 进行设定;
  • cluster(varname):设定聚类标准误;
  • vce(robust):设定稳健标准误;
  • aweight(varname)/fweight(varname):添加估计的权重。

3. 实例演示

3.1 数据处理

在本节,我们将使用 nlswork.dta 数据展示 multicoefplot 命令的具体应用。nlswork.dta 是一份针对美国年轻女性职业与工资状况的全国追踪调查数据。在本例中,我们使用收入的自然对数 ln_wage 作为被解释变量,个体的工作任期 tenure 作为核心解释变量。为了更好地熟悉该命令,模型中包括了非时变的控制变量与时变控制变量,具体设定如下:

  • 非时变的控制变量包括:种族 race、出生年份 birth_yr、是否大学毕业 collgrad、以及是否位于南方 south
  • 时变控制变量包括:年龄 age、工作经历 ttl_exp、以及是否位于大城市 not_smsa
. webuse nlswork, clear

. * 仅保留 1969、1971、1973、1975、1977 五年观测值
. keep if inlist(year, 69,71,73,75,77)

. * 由于该数据是一个标准的长面板数据,因此需要将其转化为宽面板数据
. reshape wide birth_yr age race msp nev_mar grade collgrad not_smsa c_city ///
>     south ind_code occ_code union wks_ue ttl_exp tenure hours wks_work    ///
>     ln_wage, i(idcode) j(year)

. * 为了保证非时变变量是不随时变的,直接生成上述四个非时变变量在1969年的初始水平
. gen c_race=race69
. gen c_birth_yr=birth_yr69
. gen c_collgrad=collgrad69
. gen c_south=south69

. * 最后,生成个体在1969年职业的固定效应
. gen c_occ_code=occ_code69

3.2 图像绘制

. multicoefplot ln_wage, window(69(2)77) command  legend(off) ///
>     treatment(tenure, varying(tenure)) absorb(c_occ_code)   ///
>     controls(c_race c_birth_yr c_collgrad c_south)          ///
>     timecontrols(age ttl_exp not_smsa)                      ///
>     xlabel(1 "1969" 2 "1971" 3 "1973" 4 "1975" 5 "1977")    ///
>     yline(0, lp(dash) lc(red*0.7)) 

该命令绘制的图形还是十分美观的,详细展示了 1969、1971、1973、1975、1977 五个不同年份个体工作任期 tenure 对收入自然对数 ln_wage 影响的点估计和置信区间。从图中可以看出,只有在 1969 年,tenureln_wage 的影响未通过 5% 的统计显著性检验。1973 年 tenureln_wage 的估计系数最大。

该命令估计出的五个系数和如下回归完全一致:

. reghdfe ln_wage69 tenure69 c_race c_birth_yr c_collgrad c_south age69 ttl_exp69 not_smsa69, a(c_occ_code)
. reghdfe ln_wage71 tenure71 c_race c_birth_yr c_collgrad c_south age71 ttl_exp71 not_smsa71, a(c_occ_code)
. reghdfe ln_wage73 tenure73 c_race c_birth_yr c_collgrad c_south age73 ttl_exp73 not_smsa73, a(c_occ_code)
. reghdfe ln_wage75 tenure75 c_race c_birth_yr c_collgrad c_south age75 ttl_exp75 not_smsa75, a(c_occ_code)
. reghdfe ln_wage77 tenure77 c_race c_birth_yr c_collgrad c_south age77 ttl_exp77 not_smsa77, a(c_occ_code)

在图中,初始年份 1969 和终止年份 1977 存在两条虚线,影响美观,这可能是命令自身的问题。经过测试,可通过添加一条 xline 进行解决:

. multicoefplot ln_wage, window(69(2)77) command  legend(off) ///
>     treatment(tenure, varying(tenure)) absorb(c_occ_code)   ///
>     controls(c_race c_birth_yr c_collgrad c_south)          ///
>     timecontrols(age ttl_exp not_smsa)                      ///
>     xlabel(1 "1969" 2 "1971" 3 "1973" 4 "1975" 5 "1977")    ///
>     yline(0, lp(dash) lc(red*0.7)) xline(0)

3.3 同时估计并可视化不同模型

笔者认为,该命令最强大的一点是,其可以同时绘制在不同控制变量集下的估计系数及其置信区间。以下考虑三个不同的模型:不加控制变量、加入不随时变控制变量、以及加入随时变控制变量。Stata 具体代码如下:

. multicoefplot ln_wage, window(69(2)77) command treatment1(tenure, varying(tenure))      ///
>     absorb(c_occ_code) treatment2(tenure, varying(tenure)) absorb2(c_occ_code)          ///
>     controls2(c_race c_birth_yr c_collgrad c_south) treatment3(tenure, varying(tenure)) ///
>     absorb3(c_occ_code) timecontrols3(age ttl_exp not_smsa)                             ///
>     controls3(c_race c_birth_yr c_collgrad c_south)         /// 
>     xlabel(1 "1969" 2 "1971" 3 "1973" 4 "1975" 5 "1977")    ///
>     legend(1 "Baseline" 2 "Control Xi" 3 "Control Xi+Xit")  ///
>     yline(0, lp(dash) lc(red*0.7)) xline(0)

值得注意的是,如果此时想添加一条垂直于 x 轴的辅助线,以 1973 年为例,此时命令中不应该添加 xline(1973) ,而应该添加 xline(3)。即此时图中五个估计结果横轴对应的是 1~5 而不是 1969~1977。具体代码如下:

. multicoefplot ln_wage, window(69(2)77) command treatment1(tenure, varying(tenure))      ///
>     absorb(c_occ_code) treatment2(tenure, varying(tenure)) absorb2(c_occ_code)          ///
>     controls2(c_race c_birth_yr c_collgrad c_south) treatment3(tenure, varying(tenure)) ///
>     absorb3(c_occ_code) timecontrols3(age ttl_exp not_smsa)       ///
>     controls3(c_race c_birth_yr c_collgrad c_south)               /// 
>     xlabel(1 "1969" 2 "1971" 3 "1973" 4 "1975" 5 "1977")          ///
>     legend(1 "Baseline" 2 "Control Xi" 3 "Control Xi+Xit")        ///
>     yline(0, lp(dash) lc(red*0.7)) xline(3, lp(dash) lc(blue*0.7))

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 可视化, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

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

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh