查看原文
其他

Stata绘图:面板数据可视化-panelview

连享会 连享会 2023-10-24

👇 连享会 · 推文导航 | www.lianxh.cn

连享会 · 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 命令安装

首先,我们需要安装几个必备命令:grc1leggr0075labutilsencode

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:因变量、自变量和协变量。由于协变量中缺少值,包含协变量可能会改变图的外观;
  • ifin:添加限定条件;
  • i()t():指定单位 (组) 和时间指标;
  • type()type(treat) 使用热力图绘制处理组分配。type(outcome) 以时间序列的方式绘制结果变量。type(bivar)type(bivariate) 在同一图表中绘制结果和处理组与时间的关系。type(miss)type(missing) 绘制变量的数据缺失状态;
  • continuoustreat:处理变量表示为连续变量;
  • discreteoutcome:当变量是离散的,确保 panelviewtype(outcome) 图中保持它的离散性;
  • bytiming:按首次接受处理的时间对单位进行排序,如果时间是相同的,那么就是接受处理的总时长;
  • ignoretreat:省略处理指标,即 Y 之后的所有变量都被解释为协变量;
  • ignoreY:显示 varlist 中第一个变量的处理状态,而不是第二个,需要与 type(treat)type(missing) 结合使用。如果 varlist 中只有一个变量,则该选项禁用;
  • MYCOLor():改变配色方案;
  • PREpost:区分处理组的处理前和处理后阶段;
  • xlabdist()ylabdist():更改 x 轴和 y 轴上标签之间的整数间隔,默认值为 1;
  • bygroup:将每个单元放入不同的处理组,然后在调用 type(outcome) 时将它们分别绘制在列中;
  • style():确定绘图中元素的样式。第一项和第二项分别定义了结果变量和处理组的风格。Connectedc 表示连接线,linel 表示线;
  • 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 选项来更改标题、xtitleytitle 选项更改 x 轴和 y 轴的标题。对于处理指标为二分法的 DID 型面板数据,我们可以通过指定 prepost 来区分处理单元的处理前和处理后时期。

在下图中,turnout 是结果,policy_edr 是处理变量,policy_mail_inpolicy_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 是体制类型的二元指标。

从下图中,我们看到了相当多的民主逆转的案例,有许多缺失的变量 (白色区域)。在这里,我们使用 xlabdistylabdist 选项来改变 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)

如果 varlistD 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 选项指定显示单元。注意,如果变量没有包含在 varlisti()/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) 不需要 xlabdistylabdist。如果需要,我们应该使用 xlabelylabel 来代替。同时使用 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 绘制 DY 与时间的关系图,并将四个子图排列在一行中。

. 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 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存