作者:张伟广(东北财经大学) | 知乎 | | 码云 | github
Stata连享会 精彩推文1 || 精彩推文2
1. 添加经济周期阴影不再难:bgshade 命令
做宏观分析时,我们经常需要在时序图中加入反应经济周期的阴影,以映衬经济波动对我们所关注的变量的影响。对于多数 stata 用户而言,这是个很有挑战性的工作。
不过,今天我们给大家介绍的这个命令,不但可以非常快捷的完成这个颇具挑战的任务,而且还能绘制各种精美的阴影,让阴影不再是单调的灰色。
这个命令就是 bgshade
,它既可以使用 NBER 提供的经济周期划分时间节点 ( 数据来源于:https://fred.stlouisfed.org/series/USREC ),另一方面,也可以根据用户自行设定的虚拟变量来添加阴影区域,这对于研究中国经济周期的影响非常有帮助。
2. Stata 范例
命令语法
bgshade x/yvar [if] [in] [, options]
- 说明:
- 要求 x 和 y 变量应当为整数,以便于添加阴影区域。
-
options
为自定义的选项,可选择包括: 添加二维图 (twoway
)、设定阴影范围 (shaders
)、阴影属性 (sstyle
),以及legend
、oldshaders
、horizontal
等(后面逐一实例介绍)。 -
NBER options
包括quarter
、month
、week
、day
等时间选项。
2.2 具体实例
范例1:基本应用
sysuse gnp96, clear // 调入数据
format date %tq // 设定 date 变量为季度数据格式
bgshade date if date>=yq(1970,1), ///
legend shaders(quarter) ///
twoway(line gnp96 date if date>=yq(1970,1), ///
title("GNP") lcolor(blue*1.2))
说明:
- 这幅精美的图片实际上是由两个图层叠加而成的:
bgshade date
定义了第一个图层,用于绘制反映经济周期的阴影,bgshade
命令会自动比对用户指定的日期与 NBER 发布的经济周期时点,对于重叠的日期范围,会纵向绘制一个阴影区域。twoway()
则定义了第二个图层,用于绘制图形中的蓝色时序图。 -
if date>=yq(1970,1)
语句的作用在于界定date
的取值范围为 1970 年第 1 季度之后的时间段; - 附加
legend
选项,则在图形底部呈现图例,默认情况下则不呈现图例; -
twoway()
选项用于设定时序图的外观,包括图形的种类 (line, connected 等)、图形的标题(title())、线条的颜色 (lcolor(),blue*1.2
表示线条的颜色是标准蓝色的 1.2 倍,即为深蓝色) 等。我们可以将其视为一个图层,至于图层中的内容及其设定方式,与普通的 stata 二维图没有任何差异。 - 以季度为单位的基础上添加经济衰退的阴影区域,使用
twoway
作图显示;使用title
和lcolor
设定“表头”和“颜色”。
范例2: NBER 经济衰退期的全部时间系列
*-实时下载最新的 NBER 经济周期标示数据
copy "https://fred.stlouisfed.org/graph/fredgraph.xls?chart_type=line&recession_bars=off&log_scales=&bgcolor=%23e1e9f0&graph_bgcolor=%23ffffff&fo=Open+Sans&ts=12&tts=12&txtcolor=%23444444&show_legend=yes&show_axis_titles=yes&drp=0&cosd=1854-12-01&coed=2017-10-01&height=450&stacking=&range=Custom&mode=fred&id=USREC&transformation=lin&nd=1854-12-01&ost=-99999&oet=99999&lsv=&lev=&mma=0&fml=a&fgst=lin&fgsnd=2009-06-01&fq=Monthly&fam=avg&vintage_date=&revision_date=&line_color=%234572a7&line_style=solid&lw=2&scale=left&mark_type=none&mw=2&width=968" aa.xls, replace
import excel "aa.xls", sheet("FRED Graph") ///
cellrange(A11:B1966) firstrow clear
rename observation_date date
gen edate = date(date, "YMD") //转化为“年月日”
gen month= mofd(edate) //保留到“年月”
format month %tm //设定为月份数据格式
rename month date1
bgshade date1, twoway(line usrec date1, title("USREC") lcolor(red*1.2))
说明:
- 使用
date()
命令将日期数据转化为stata
的“年月日”格式,再使用mofd()
命令保留到“年月”格式; - 同上例一样,使用
bgshade
命令,画出NBER
最新给出的美国经济周期的衰退波动标识线。 - 以月度为单位的,使用
twoway
命令作图显示,以title
设定表头,以lcolor
设定颜色为红色。
drop _all
set obs 2000
gen date = _n-1280
format date %tm
gen series = sqrt(_n)+runiform()
gen series2 = series*runiform()/2
bgshade date, shaders(month) ///
twoway(line series date, ///
title("All Monthly Recessions"))
说明:
时序图以月份为单位,为 NBER 提供的全部时间区间添加经济衰退阴影区域。
范例3: 所有默认着色选项
drop _all
set obs 12
gen date = _n-1
gen res1 = inlist(date,4,5,6,7,8,9)
gen res2 = inlist(date,2,3,4,5)
gen res3 = inlist(date,4,9,10,11,12)
gen res4 = inlist(date,5,6,10,11)
gen line1 = sqrt(_n)
gen line2 = _n*_n/20
bgshade date, shaders(res1 res2 res3 res4) ///
twoway( line line1 date || ///
scatter line2 date, xlab(-2(2)14) ///
title("All default shading colors and patterns"))
范例4: 使用
twoway
画图命令的其他选项
bgshade date, shaders(res1 res2 res3 res4) ///
twoway(line line1 date, lcolor(magenta) || (sc line2 date, msize(huge)), xlab(-2(2)14) ///
title("Using extra options in twoway"))
范例5: 同时使用自定义和 NBER 着色器
bgshade date, shaders(quarter res2 res3 res4) ///
twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
title("Using custom and NBER shaders") ///
subtitle("We recommend putting nber shaders first because it looks best"))
范例6:
sstyle
选项
bgshade date, shaders(res2 res3 res4) ///
sstyle(noextend lcolor("255 0 0" green blue) lpattern(_ - -_)) ///
twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
title("Using some sstyle options"))
说明:
sstyle
命令是为阴影区域设置各种线条样式选项,主要包括 axis
、style
、lstyle
、noextend
、lpattern
、lwidth
和 lcolor
等。如本例中 noextend
设定为从绘图区域的边缘作延伸线、 lpattern
设定线条的图案。(具体使用在 stata 官方 added_line_options
有详细说明)
范例7:
legend
选项
lab var res1 "Shader 1"
lab var res2 "Shader 2"
bgshade date, shaders(res1 res2 res3 res4) legend ///
twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
title("Add shaders to the legend"))
说明:
legend
在图例中包含阴影区域,且是在 twoway
命令之前将着色器添加到图例,这与 twoway
的子选项是不同的。
范例8:
legend
的综合使用
bgshade date, shaders(res1 res2 res3 res4) legend ///
twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
title("Using order legend suboption") ///
legend(order(5 "Square Root of N" 6 "N Squared over 20" 2 "Res2" 4 "Res4") cols(2)))
范例9: 超过 4 种着色器的例子
drop res*
forvalues ii = 1/8 {
gen res`ii' = _n == `ii'+2
}
bgshade date, shaders(res1 res2 res3 res4 res5 res6 res7 res8) ///
sstyle(lpattern( l _ l _ l _ l _) lcolor(green blue red magenta orange navy "255 0 0" eltgreen)) ///
twoway(line line1 date || sc line2 date, xlab(0(1)12) ///
title("More than 4 shaders"))
范例10: 设定带宽使阴影区间更优美
bgshade date, shaders(res1 res2 res3 res4 res5 res6 res7 res8) ///
sstyle(lwidth(10) ///
lpattern( l _ l _ l _ l _) lcolor(green blue red magenta orange navy "255 0 0" elt green)) ///
twoway(line line1 date || sc line2 date, xlab(0(1)12) ///
title("Changing all widths"))
范例11: 分别设定每个阴影区间的宽度
bgshade date, shaders(res1 res2 res3 res4 res5 res6 res7 res8) ///
sstyle(lwidth(1 4 10 25 1 3 14 7) ///
lpattern( l _ l _ l _ l _) lcolor(green blue red magenta orange navy "255 0 0" elt green)) ///
twoway(line line1 date || sc line2 date, xlab(0(1)12) ///
title("Changing individual widths"))
范例12: 阴影区域延伸的例子(同样适用于
oldshaders
选项)
gen res = _n < 3 | _n > 10
bgshade date, shaders(res) sstyle(noxextend(100)) ///
twoway(line line1 date, title("Too hot")) oldshaders
bgshade date, shaders(res) sstyle(noxextend(-100)) ///
twoway(line line1 date, title("Too cold")) oldshaders
bgshade date, shaders(res) sstyle(noxextend(60)) ///
twoway(line line1 date, title("Just right")) oldshaders
说明:
图1设定过窄,图2设定过宽,图3设定较为合适。
范例13:
horizontal
选项,即水平添加阴影区域的例子
gen yvar = _n
replace res = yvar > 3 & yvar < 5
replace res2 = yvar > 5 & yvar < 7
bgshade yvar, shaders(res res2) ///
twoway(line yvar date) horiz
关于我们
- 【Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
- 公众号推文同步发布于 CSDN-Stata连享会 、-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词
Stata
或Stata连享会
后关注我们。 - 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
- Stata连享会 精彩推文1 || 精彩推文2
联系我们
- 欢迎赐稿: 欢迎将您的文章或笔记投稿至
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。 - 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
- 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
- 联系邮件: [email protected]
往期精彩推文
- Stata连享会推文列表1
- Stata连享会推文列表2
- Stata连享会 精彩推文1 || 精彩推文2