Stata绘图:面板数据可视化-panelview
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 2022 空间计量专题
作者:韩杰 (暨南大学)
邮箱:han_ovetk@foxmail.com
编者按:本文参考自「PANELVIEW: Stata module to visualize panel data」,特此致谢!
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
目录
1. 简介
2. 命令介绍
2.1 命令安装
2.2 命令语法
3. Stata 实例
3.1 制定处理组的特征
3.2 两种以上的处理组特征
3.3 连续的处理变量
3.4 离散的处理变量
3.5 同时绘制Y和D时间序列
4. 相关推文
1. 简介
本文主要介绍由 Mou、Hongyu 和 Yiqing Xu (2022) 共同开发的面板数据可视化命令——panelview
。该命令具备以下三大功能:
在面板数据集中绘制处理组状态和缺失值; 以时间序列的方式可视化感兴趣的变量; 以单位或总体描述自变量与因变量之间的二元关系。
这些工具可以帮助研究人员在进行统计分析之前,更好地理解他们的面板数据。
2. 命令介绍
2.1 命令安装
首先,我们需要安装几个必备命令:grc1leg
、gr0075
、labutil
和 sencode
。
net install grc1leg, from(http://www.stata.com/users/vwiggins) replace
net install gr0075, from(http://www.stata-journal.com/software/sj18-4) replace
ssc install labutil, replace
ssc install sencode, replace
在 Stata 15.1 或更高版本的安装 panelview
,一种方法是通过 ssc install
:
ssc install panelview, all replace
另一种方法是使用 net install
来安装最新版本的 panelview
:
net install panelview, all replace from("https://yiqingxu.org/packages/panelview_stata")
2.2 命令语法
该命令的语法如下:
panelview Y D X [if] [in] , i(varname) t(varname numeric) type(string) [options]
其中,
Y D X
:因变量、自变量和协变量。由于协变量中缺少值,包含协变量可能会改变图的外观;if
和in
:添加限定条件;i()
和t()
:指定单位 (组) 和时间指标;type()
:type(treat)
使用热力图绘制处理组分配。type(outcome)
以时间序列的方式绘制结果变量。type(bivar)
或type(bivariate)
在同一图表中绘制结果和处理组与时间的关系。type(miss)
或type(missing)
绘制变量的数据缺失状态;continuoustreat
:处理变量表示为连续变量;discreteoutcome
:当变量是离散的,确保panelview
在type(outcome)
图中保持它的离散性;bytiming
:按首次接受处理的时间对单位进行排序,如果时间是相同的,那么就是接受处理的总时长;ignoretreat
:省略处理指标,即Y
之后的所有变量都被解释为协变量;ignoreY
:显示varlist
中第一个变量的处理状态,而不是第二个,需要与type(treat)
或type(missing)
结合使用。如果varlist
中只有一个变量,则该选项禁用;MYCOLor()
:改变配色方案;PREpost
:区分处理组的处理前和处理后阶段;xlabdist()
和ylabdist()
:更改 x 轴和 y 轴上标签之间的整数间隔,默认值为 1;bygroup
:将每个单元放入不同的处理组,然后在调用type(outcome)
时将它们分别绘制在列中;style()
:确定绘图中元素的样式。第一项和第二项分别定义了结果变量和处理组的风格。Connected
或c
表示连接线,line
或l
表示线;byunit
:当调用type(bivar)
时,绘制每个单元的结果变量和处理变量与时间的关系图;theme(bw)
:使用黑白主题,当指定type(bivar)
时为默认;lwd()
:设置行宽的type(bivar)
,默认为medium
;leavegap
:如果时间分布不均匀,将时间间隔用白色条表示;bygroupside
:将分组的子图形排列在一行中而不是列中;displayall
:如果单位数超过 500,则显示所有单位,否则随机选择 500个单位呈现。
3. Stata 实例
3.1 制定处理组的特征
3.1.1 处理组的两种情形
利用 turnout.dta 数据集 (一个平衡面板),我们展示了给定年份每个州选举日登记 (EDR) 的处理状态。我们可以使用 title
选项来更改标题、xtitle
和 ytitle
选项更改 x 轴和 y 轴的标题。对于处理指标为二分法的 DID 型面板数据,我们可以通过指定 prepost
来区分处理单元的处理前和处理后时期。
在下图中,turnout 是结果,policy_edr 是处理变量,policy_mail_in 和 policy_motor 是协变量。由于在协变量中缺少值,包含协变量可能会改变图的外观。
. lxhuse turnout.dta, clear
. panelview turnout policy_edr policy_mail_in policy_motor, i(abb) t(year) ///
> type(treat) xtitle("Year") ytitle("State") title("Treatment Status")
我们可以使用 bytiming
选项来按接受处理的时间 (其次是按接受处理的总时间) 对单位进行排序,legend
选项来更改图例中的标签,以及 prepost
选项来区分处理组处理前和处理后的阶段。
. panelview turnout policy_edr policy_mail_in policy_motor, i(abb) t(year) type(treat) ///
> xtitle("Year") ytitle("State") title("Treatment Status") prepost bytiming
如果时间分布不均匀,我们可以使用 leavegap
来保持时间间隙为白条。否则,我们将跳过时间间隔,并警告 Time is not evenly distributed (possibly due to missing data)
。
. drop if year==1924
. drop if year==1928
. drop if year==1940
. panelview turnout policy_edr policy_mail_in policy_motor, i(abb) t(year) type(treat) leavegap
3.1.2 缺失和处理状态开关
对于处理组可能开启和关闭的面板数据集,我们不再区分处理前和处理后的状态。为了展示 panelview
如何在更一般的情况下使用,下图使用了 capacity.dta 数据集,该数据集用于调查民主的影响,其中 demo 是体制类型的二元指标。
从下图中,我们看到了相当多的民主逆转的案例,有许多缺失的变量 (白色区域)。在这里,我们使用 xlabdist
和 ylabdist
选项来改变 x 轴和 y 轴上标签之间的间隙。
. lxhuse capacity.dta, clear
. panelview lnpop demo lngdp , i(country) t(year) type(treat) mycolor(Reds) ///
> title("Democracy and State Capacity") xlabdist(3) ylabdist(10)
如果 varlist
是 D X
,我们可以用 ignoreY
来表示 D
的处理状态,不考虑 Y
缺失的状态。
. panelview lnpop demo lngdp , i(country) t(year) type(treat) mycolor(Reds) ///
> title("Democracy and State Capacity") xlabdist(3) ylabdist(10)
根据一个单位接受处理的第一个周期进行分类的单位,会提供一个更吸引人的视觉效果。
. panelview lnpop demo lngdp, i(country) t(year) type(treat) mycolor(Reds) ///
> title("Democracy and State Capacity") xlabdist(3) ylabdist(10) bytiming
3.1.3 绘制部分单位
有时,一个数据集有许多单位,我们只想取单位子集,此时可以通过 if
选项指定显示单元。注意,如果变量没有包含在 varlist
或 i()
/t()
后面,我们建议研究人员添加变量到 varlist
中。在下图中,我们绘制了前 25 个单位的处理状态。
. egen ccodeid = group(ccode)
. panelview lnpop demo lngdp ccodeid if ccodeid >= 1 & ccodeid <= 26, i(ccode) ///
> t(year) type(treat) mycolor(PuBu) title("Democracy and State Capacity") xlabdist(3)
3.2 两种以上的处理组特征
3.2.1 三种处理组类型
panelview
支持 2 级以上处理的面板数据。例如,我们创建了一个有三个处理水平的制度类型的变量。
. lxhuse capacity.dta, clear
. gen demo2 = 0
. replace demo2 = -1 if polity2 < -0.5
. replace demo2 = 1 if polity2 > 0.5
. panelview Capacity demo2 lngdp, i(ccode) t(year) type(treat) title("Regime Type") ///
> xlabdist(3) ylabdist(10) mycolor(Reds)
3.2.2 五种以上处理组类型
如果处理类型数大于 5,则处理指标视为连续变量。
. lxhuse capacity.dta, clear
. gen demo2 = 0
. replace demo2 = -2 if polity2 < -0.7
. replace demo2 = -1 if polity2 < -0.5 & polity2 > -0.7
. replace demo2 = 1 if polity2 > 0.5 & polity2 < 0.7
. replace demo2 = 2 if polity2 > 0.7
. tab demo2, m
. panelview Capacity demo2 lngdp, i(ccode) t(year) type(treat) title("Regime Type") ///
> xlabdist(3) ylabdist(10)
3.3 连续的处理变量
panelview
的第二个功能是以时间序列的方式显示面板数据集的原始结果变量。语法非常类似,只是我们需要指定 type(outcome)
。不同的颜色代表不同的处理条件。
3.3.1 连续的处理变量
我们把处理开始前的一段时间画成处理期。与 type(treat)
不同,type(outcome)
不需要 xlabdist
和 ylabdist
。如果需要,我们应该使用 xlabel
和 ylabel
来代替。同时使用 prepost
区分处理单元的处理前和处理后阶段。
. lxhuse turnout.dta, clear
. panelview turnout policy_edr policy_mail_in policy_motor, i(abb) t(year) type(outcome) ///
> xtitle("Year") ytitle("Turnout") title("EDR Reform and Turnout") prepost
3.3.2 处理变量分组绘图
为了更好地理解数据,有时我们希望根据观察区间内处理状态是否发生变化来绘制结果,此时可以通过选项 bygroup
实现。算法会对数据进行分析,并自动将每个单元分成不同的组,如 1)一直是处理的单元,2) 一直是控制的单元,3) 处理状态发生变化的单元。
. lxhuse turnout.dta, clear
. panelview turnout policy_edr policy_mail_in policy_motor, i(abb) t(year) type(outcome) ///
> xtitle("Year") ytitle("Turnout") by(, title("EDR Reform and Turnout")) ///
> bygroup xlabel(1920 (20) 2000)
3.4 离散的处理变量
我们可以通过设定 discreteoutcome
来绘制离散的变量。下面是一个使用 pvsimdata.dta 数据集的示例,其中结果变量有三个值:0、1、2。
. lxhuse pvsimdata.dta, clear
. panelview Y D if time >= 8 & time <= 15, type(outcome) i(id) t(time) mycolor(Reds) ///
> discreteoutcome title("Raw Data") xlabel(8 (2) 15) ylabel(0 (1) 2)
3.5 同时绘制Y和D时间序列
通过指定 type(bivar)
或 type(bivariate)
,实现在一个图中可视化结果和处理变量的时间序列。对于连续变量,我们默认使用线图,对于离散变量,我们使用条形图。
3.5.1 绘制所有单位的平均时间序列
对于连续的结果变量和离散的处理组,这里有两个例子。在前者中,style(c,b)
表示连接的散点图,而不是表示结果变量的默认线形图和处理组的条形图。如果有连接线,可以通过 msize()
指定符号的大小。
. lxhuse turnout.dta, clear
. panelview turnout policy_edr, i(abb) t(year) xlabdist(7) type(bivariate) msize(*0.5) ///
> style(c b) ytitle("turnout") ytitle("policy_edr", axis(2)) legend(label(1 "turnout") ///
> label(2 "policy_edr")) ylabel(40 (10) 70) ylabel(0 (0.1) 0.5, axis(2))
3.5.2 按每个单位绘制时间序列图
我们使用 byunit
绘制 D
和 Y
与时间的关系图,并将四个子图排列在一行中。
. lxhuse turnout.dta, clear
. panelview turnout policy_edr policy_mail_in policy_motor if abb >= 1 & abb <= 12, ///
> i(abb) t(year) xlabdist(10) type(bivar) byunit
. lxhuse capacity.dta, clear
. panelview lnpop demo if country >= 1 & country <= 24, i(country) t(year) xlabdist(20) ///
> type(bivar) byunit
4. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 可视化, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:专题课程 ⏩连享会公开课:实证研究中的数据可视化 专题:数据处理 Stata:边际处理效应及其可视化-mtefe-T309 Stata: 约翰霍普金斯大学 COVID-19 疫情数据处理及可视化 专题:Stata绘图 Stata可视化:能用图形就不用表格 Stata绘图:回归系数可视化-multicoefplot Stata绘图-可视化:组间差异比较散点图 Stata可视化:biplot一图看尽方差、相关性和主成分 Stata绘图-组间差异可视化:不良事件火山图、点阵图 forest-森林图:分组回归系数可视化 Stata绘图:回归系数可视化-论文更出彩 Stata绘图:世行可视化案例-条形图-密度函数图-地图-断点回归图-散点图 Stata绘图:随机推断中的系数可视化 专题:结果输出 Stata可视化:让他看懂我的结果! 专题:回归分析 Stata:在线可视化模拟-OLS-的性质 专题:Python-R-Matlab Python 调用 API 爬取百度 POI 数据小贴士——坐标转换、数据清洗与 ArcGIS 可视化 专题:工具软件 知乎热议:有哪些一用就爱上的可视化工具? 专题:其它 数据可视化:带孩子们边玩边学吧
课程推荐:因果推断实用计量方法
主讲老师:邱嘉平教授
🍓 课程主页:https://gitee.com/lianxh/YGqjp
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。