Stata绘图:一套高效绘图命令-plottabs

发布时间:2023-04-29 阅读 813

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

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

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

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

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

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:李其璋 (中山大学)
邮箱3456899246@qq.com


目录


1. 简介

本文介绍 Stata 中的一个高效绘图套件 plottabs,包括 plottabsplotsharesplotbetasplotmeans 四个命令。此套件的四个命令可以混合使用,比传统绘图命令可视化形式更丰富,图表表现力更强,能更直观地体现数据特征。

plottabs 套件避免了绘图耗时过长的问题,且在大样本数据中速度比传统命令快 300 倍。此外,plottabs 套件支持用户在内存中储存多个绘图数据,方便随时调用。四个命令功能如下:

  • plottabs:绘制条件频率或份额 (tabulate oneway 的可视化模拟);
  • plotshares:绘制条件分类频率或份额 (tabulate twoway 的可视化模拟);
  • plotbetas:绘制可视化回归系数估计 (回归后);
  • plotmeans:绘制条件均值 (mean y, over x 的可视化模拟)。

2. 命令介绍

命令安装:

ssc install plottabs, replace

命令语法:

plottabs varname [if] [in] [, options]
plotshares varname [if] [in] , over(groupvar) [options]
plotbetas varlist [if] [in] [, options]
plotmeans varname [if] [in] , over(groupvar) [options]

其中,varname 为需要可视化的变量,varlist 为回归中的变量集。groupvar 表示作为分组依据的变量。options 包括:

基本选项

  • over(varname):指定条件变量的另一种方法;
  • output(output_type):指定绘图类型,频率 (默认) /份额/累计;将 output_type 设置为 share 会产生相对份额,而设置为 cummulative 会产生累积份额;
  • graph(graph_type):指定二维图表类型:线型图 (默认) /条形图/连线图/散点图等;
  • invert:倒转被分类变量在图表中的排列顺序;
  • rgraph(rgraph_type):指定置信区间区域的图表类型,包括 rarea (默认)、barrcaprspike 等;
  • ci(#,ci_options):指定置信区间水平 (# 为 0 到 100 的数,95 为默认值,off 表示不显示置信区间;ci_options 表示rgraph_type 的自定义选项,包括 colortransparency 等)。

存储/数据管理选项

  • frame(frame_name):指定存储输出数据的数据框名称 (默认为 frame_pt);
  • clear:清除存储在 frame_name 中的所有输出的数据;
  • replace(#):覆盖替换现有变量;
  • plotonly:显示已存储在 frame_name 中的图表。

自定义选项

  • command:输出用于显示图表的二维命令 (更好地自定义);
  • global:将相同的自定义选项应用于 frame_name 中的所有绘图;
  • plname(plot_name):命名当前绘图 (当同时使用多个图表时在图例中使用);
  • xshift(real):把绘制的变量沿着 x 轴移动;
  • yshift(real):把绘制的变量沿着 y 轴移动;
  • yzero:用于在 y 轴上显示零的缩略选项 (并按 y 轴);
  • twoway_options:更改标题、图例、坐标轴、纵横比等;
  • connect_options:更改图线外观或连线方式;
  • marker_options:更改标记的外观 (颜色、大小等);
  • area_options:更改图表区域的设置 (仅在 plotshares 中适用);
  • barlook_options:更改条形图外观。

其他选项

  • nodraw:不显示绘制的图表 (在覆盖半成品图表时很有用);
  • times(real):将绘图的数值乘以一个常数 (对变量标准化处理时很有用)。

3. Stata 实操

3.1 plottabs 命令实操

3.1.1 基础用法

这是 plottabs 最基本的用法,通过使用条形图描述了变量 mpg 的频数分布情况。代码和结果如下图:

. clear all
. sysuse auto
. plottabs mpg, graph(bar)

3.1.2 比较两个子样本的累计份额

对于一个变量,我们有时候需要考察它的值落在某个区间内的样本量,以及它与总样本量的关系。这时使用 output(cummulative) 选项可达到目的。以下例子用阶梯折线考察了国内和国外两个子样本中变量 mpg 逐渐增大时其累计份额的变化情况。

若折线上某点的坐标为 (x, y),则意味着在从变量 mpg 的最小值到 x 这一区间内,mpg 的值出现的次数占总样本量的比为 y。

. clear all
. sysuse auto
. plottabs mpg if foreign == 0, output(cummulative) connect(stairstep) plname(Domestic)
. plottabs mpg if foreign == 1, output(cummulative) connect(stairstep) plname(Foreign)

3.1.3 两种类型图表的合用

plottabs 也支持同时使用两种图表,并在同一个图表中显示,同时执行以下几行命令即可。以下例子把变量 mpg 的条形图和阶梯折线图同时呈现,还使用了 scheme 选项调整背景。

. clear all
. sysuse auto
. plottabs mpg, graph(bar)
. plottabs mpg, output(cummulative) connect(stairstep) legend(off) scheme(gg_tableau) yaxis(2)

当然,plottabs 也可以和 plotmeans 等其他三个命令合用,这一点在后面的例子中会看到。

3.1.4 其他用法

隐藏图表

. clear all
. sysuse auto
. plottabs mpg if foreign == 0, nodraw plname(Domestic)
. plottabs mpg if foreign == 1, nodraw plname(Foreign)

nodraw 选项表示命令已执行,图表储存在内存中,但不显示。再输入以下指令,则显示此前未显示的图表:

plottabs, plotonly

替换图表:以下指令把上述第二个图表替换为另一个。

. plottabs mpg if headroom>3, replace(2)

替换自定义选项

. plottabs mpg, plotonly replace(2) color(pink) plname("Headroom > 3")

合并以上两个指令

. plottabs mpg if headroom>3, rep(2) col(pink) pln("Headroom > 3")

清除内存中的图表并绘制新图

. plottabs mpg, clear graph(bar)

创建一个新的独立图表

. plottabs turn, graph(bar) frame(frame_hr)

为内存中每个图表命名

. plottabs, plotonly name(fig1)
. plottabs, plotonly name(fig2) frame(frame_hr)

3.1.5 关于 frame 的说明

切换数据集:输入以下指令,得到图表。

. clear all
. sysuse auto
. plottabs mpg if foreign==0, out(cumm) connect(stairstep) pln(Domestic)
. plottabs mpg if foreign==1, out(cumm) connect(stairstep) pln(Foreign) scheme(economist)

再输入以下指令:

. frame change frame_pt
. browse //查看 frame_pt 中图表的数据

此时数据集被切换至图表处,并查看图表中的数据。若无 frame 步骤,则仅能查看整份 auto 数据。

查看自定义选项

. frame change frame_pt_cust
. describe      // 详细描述 frame_pt_cust 中的数据

------------------------------------------------------------------------
Variable Storage  Display    
    name    type   format  Variable label
------------------------------------------------------------------------
cust_out   str16  %16s Output type corresponding to _n-th plot
cust_gra   str4   %9s  Graph type corresponding to _n-th plot
cust_opt   str18  %18s Graphing options specific to _n-th plot
cust_two   str17  %17s Two-way options applicable to the overall graph
cust_oth   str1   %9s  Any other options specific to _n-th plot
cust_rgr   str1   %9s  Graph type corresponding to the CIs of _n-th plot
cust_lci   str1   %9s  Legend for the CIs of _n-th plot
cust_oci   str1   %9s  Graphing options specific to the CIs of _n-th plot
-------------------------------------------------------------------------

. browse        // 查看数据

恢复默认数据集

frame change default

注:当 frame 被定义后,每次添加新的图表,都要加上 frame 选项来切换,否则系统会用新的图表替换原有图表。

3.2 plotshares 命令实操

3.2.1 基础用法

这是 plotshares 最基本的用法,以下描述了 nlsw88 数据中变量 race 按年龄 age 变化统计时,每个类别的相对份额情况,且三个类别相对份额之和为 1。

. clear all
. sysuse nlsw88
. plotshares race, over(age)

3.2.2 使用频数对比

以下使用具体频数来对比三个子样本中 race 随年龄变化的统计。

. clear all
. sysuse nlsw88
. plotshares race, over(age) output(stacked) graph(bar)

3.2.3 综合应用

以下例子倒转了 race 子样本的排列顺序。同时使用 plotmeans 指令展示变量 ttl_ 随年龄变化的条件均值,使用线图连接散点,再自定义其他选项。

. clear all
. sysuse nlsw88
. plots race, over(age) invert
. plotm ttl_, over(age) graph(connect) plname(Yrs of Exp) ///
>     scheme(white_ptol) color(red) yaxis(2) yzero

3.3 plotbetas 命令实操

3.3.1 基础用法

以下探究 ttl_expi.age 回归时,i.age 的回归系数,并在图表中绘制 95% 置信区间。

. clear all
. sysuse nlsw88
. reg ttl_exp i.age

      Source |       SS           df       MS      Number of obs   =     2,246
-------------+----------------------------------   F(12, 2233)     =      4.96
       Model |  1238.37396        12   103.19783   Prob > F        =    0.0000
    Residual |  46476.8864     2,233  20.8136526   R-squared       =    0.0260
-------------+----------------------------------   Adj R-squared   =    0.0207
       Total |  47715.2603     2,245  21.2540135   Root MSE        =    4.5622
------------------------------------------------------------------------------
     ttl_exp | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         age |
         35  |      0.730      0.688     1.06   0.289       -0.619       2.078
         36  |      0.867      0.688     1.26   0.208       -0.483       2.216
         37  |      1.410      0.697     2.02   0.043        0.044       2.776
         38  |      1.409      0.698     2.02   0.044        0.040       2.779
         39  |      2.614      0.694     3.77   0.000        1.253       3.975
         40  |      1.915      0.702     2.73   0.006        0.538       3.292
         41  |      2.068      0.697     2.96   0.003        0.700       3.436
         42  |      2.220      0.723     3.07   0.002        0.802       3.638
         43  |      2.109      0.720     2.93   0.003        0.697       3.522
         44  |      2.787      0.721     3.86   0.000        1.372       4.201
         45  |      1.517      0.812     1.87   0.062       -0.075       3.110
         46  |      9.552      3.286     2.91   0.004        3.108      15.997
       _cons |     10.842      0.627    17.30   0.000        9.613      12.071
------------------------------------------------------------------------------

. plotbetas i.age

若使用箱线图绘制,可用以下指令:

. plotbetas i.age, clear graph(scatter) rgraph(rcap)  

3.3.2 对比两个子样本的回归系数

union 等于 0 或 1 分为两组分别进行回归,比较两组 i.age 的回归系数。

. clear all
. sysuse nlsw88
. reg ttl_exp i.age if union==0
. plotbetas i.age, graph(connect) plname(Non-union)
. reg ttl_exp i.age if union==1
. plotbetas i.age, graph(connect) plname(Union)

3.3.3 自定义应用

以下自定义线型、置信区间颜色及透明度。

. clear all
. sysuse nlsw88
. reg ttl_exp i.age
. plotbetas i.age, color(green) ci(, color(gold%35))

3.4 plotmeans 命令实操

3.4.1 基础用法

以下绘制 ttl_exp 关于年龄的条件均值,并绘制 95% 置信区间。

. clear all
. sysuse nlsw88
. plotmeans ttl_exp, over(age)

改用箱线图:

. plotmeans ttl_exp, over(age) graph(scatter) rgraph(rcap) clear

3.4.2 对比两个子样本的条件均值

union 等于 0 或 1 分为两组,对比 ttl_exp 在两组样本中的条件均值。

. clear all
. sysuse nlsw88
. plotmeans ttl_exp if union==0, over(age) graph(connect) plname(Non-union)
. plotmeans ttl_exp if union==1, over(age) graph(connect) plname(Union)

3.4.3 综合应用

先用 plottabs 的条形图绘制 age 的分布,再用 plotmeans 的散点连线图绘制 ttl_exp 关于 age 的条件均值,两幅图在一个图表中显示。

. clear all
. sysuse nlsw88
. plottabs, over(age) graph(bar) plname(Frequencies) color(green%15)
. plotmeans ttl_exp, over(age) graph(connect) plname(Yrs of Exp) yaxis(2)

3.4.4 自定义应用

以下自定义图线颜色、置信区间颜色及透明度。

. clear all
. sysuse nlsw88
. plotmeans ttl_exp, over(age) color(green) ci(, color(gold%35))

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 绘图, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

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

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

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh