Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:谢佳松 (中山大学)
邮箱:xiejs3@mail2.sysu.edu.cn
目录
本文主要介绍由苏黎世联邦理工学院教授 Matteo Pinna 开发的,用于时间维度横截面分析的可视化操作命令 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)
:添加估计的权重。
在本节,我们将使用 nlswork.dta
数据展示 multicoefplot
命令的具体应用。nlswork.dta
是一份针对美国年轻女性职业与工资状况的全国追踪调查数据。在本例中,我们使用收入的自然对数 ln_wage 作为被解释变量,个体的工作任期 tenure 作为核心解释变量。为了更好地熟悉该命令,模型中包括了非时变的控制变量与时变控制变量,具体设定如下:
. 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
. 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 年,tenure 对 ln_wage 的影响未通过 5% 的统计显著性检验。1973 年 tenure 对 ln_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)
笔者认为,该命令最强大的一点是,其可以同时绘制在不同控制变量集下的估计系数及其置信区间。以下考虑三个不同的模型:不加控制变量、加入不随时变控制变量、以及加入随时变控制变量。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))
Note:产生如下推文列表的 Stata 命令为:
lianxh 可视化, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh