Stata绘图:bgshade命令-在图形中加入经济周期阴影

发布时间:2020-10-08 阅读 35

Stata 连享会   主页 || 视频 || 推文

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

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

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

作者:张伟广(东北财经大学)


目录


1. 添加经济周期阴影不再难:bgshade 命令

做宏观分析时,我们经常需要在时序图中加入反应经济周期的阴影,以映衬经济波动对我们所关注的变量的影响。对于多数 stata 用户而言,这是个很有挑战性的工作。

不过,今天我们给大家介绍的这个命令,不但可以非常快捷的完成这个颇具挑战的任务,而且还能绘制各种精美的阴影,让阴影不再是单调的灰色。

这个命令就是 bgshade,它既可以使用 NBER 提供的经济周期划分时间节点 ( 数据来源于:https://fred.stlouisfed.org/series/USREC ),另一方面,也可以根据用户自行设定的虚拟变量来添加阴影区域,这对于研究中国经济周期的影响非常有帮助。

2. Stata 范例

2.1 命令语法

bgshade x/yvar [if] [in] [, options]
  • 说明:
    1. 要求 x 和 y 变量应当为整数,以便于添加阴影区域。
    2. options 为自定义的选项,可选择包括: 添加二维图 (twoway)、设定阴影范围 (shaders)、阴影属性 (sstyle),以及 legendoldshadershorizontal 等(后面逐一实例介绍)。
    3. NBER options 包括 quartermonthweekday等时间选项。

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))

说明:

  1. 这幅精美的图片实际上是由两个图层叠加而成的:bgshade date 定义了第一个图层,用于绘制反映经济周期的阴影,bgshade 命令会自动比对用户指定的日期与 NBER 发布的经济周期时点,对于重叠的日期范围,会纵向绘制一个阴影区域。twoway() 则定义了第二个图层,用于绘制图形中的蓝色时序图。
  2. if date>=yq(1970,1) 语句的作用在于界定 date 的取值范围为 1970 年第 1 季度之后的时间段;
  3. 附加 legend 选项,则在图形底部呈现图例,默认情况下则不呈现图例;
  4. twoway() 选项用于设定时序图的外观,包括图形的种类 (line, connected 等)、图形的标题(title())、线条的颜色 (lcolor(), blue*1.2 表示线条的颜色是标准蓝色的 1.2 倍,即为深蓝色) 等。我们可以将其视为一个图层,至于图层中的内容及其设定方式,与普通的 stata 二维图没有任何差异。
  5. 以季度为单位的基础上添加经济衰退的阴影区域,使用 twoway 作图显示;使用 titlelcolor 设定“表头”和“颜色”。

范例 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))

说明:

  1. 使用 date() 命令将日期数据转化为 stata 的“年月日”格式,再使用 mofd() 命令保留到“年月”格式;
  2. 同上例一样,使用 bgshade 命令,画出NBER最新给出的美国经济周期的衰退波动标识线。
  3. 以月度为单位的,使用 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 命令是为阴影区域设置各种线条样式选项,主要包括 axisstylelstylenoextendlpatternlwidthlcolor 等。如本例中 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

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

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

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

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD