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

文摘   教育   2024-11-10 22:00   中国  


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

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

 课程特色 · 2024机器学习与因果推断

  • 懂原理、会应用。本次课程邀请了两位老师合作讲授,目的在于最大限度地实现理论与应用的有机结合。为期四天的课程,分成两个部分:第一部分讲解常用的机器学习算法和适用条件,以及文本分析和大语言模型;第二部分通过精讲 4-6 篇发表于 Top 期刊的论文,帮助大家理解各类机器学习算法的应用场景,以及它们与传统因果推断方法的巧妙结合。
  • 以 Top 期刊论文为范例。目前多数人的困惑是不清楚如何将传统因果推断方法与机器学习结合起来。事实上,即便是 MIT 和 Harvard 的大牛们也都在「摸着石头过河」。为此,通过论文精讲和复现来学习这部分内容或许是目前最有效的方式了。张宏亮老师此前在浙江大学按照这一模式教授了「因果推断和机器学习」课程,效果甚佳:学生们能够逐渐建立起研究设计的理念,并在构造识别策略时适当地嵌入机器学习方法。

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


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


目录

  • 1. 简介

  • 2. 命令介绍

  • 3. Stata 实操

    • 3.1 plottabs 命令实操

    • 3.2 plotshares 命令实操

    • 3.3 plotbetas 命令实操

    • 3.4 plotmeans 命令实操

  • 4. 相关推文



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

  • 专题:Stata教程
    • 普林斯顿Stata教程(二) - Stata绘图
  • 专题:Stata绘图
    • 值得收藏!三个Stata可视化绘图网站
    • Stata绘图:spider-绘制蜘蛛网图-雷达图
    • Stata绘图:绘图模板介绍-cleanplot
    • Stata绘图:为图形选择优美的配色方案-color_style
    • Stata绘图:circlepack-绘制圆堆图
    • Stata绘图:COVID-19数据可视化
    • Stata绘图:唯美的函数图-自定义水平附加线和竖直附加线
    • Stata绘图:复现组间均值差异图
    • Stata绘图:sunflower-向日葵图-克服散点重叠
    • Stata绘图:环形柱状图-实时全球新冠确诊人数
    • Stata绘图:绘制二维地图
    • Stata绘图:峰峦图绘制 joy_plot
    • Stata绘图:绘制华夫饼图-waffle
    • Stata绘图:绘制美观的散点图-superscatter
    • Stata绘图:回归系数可视化-multicoefplot
    • Stata绘图:如何更高效的绘制图形
    • Stata绘图:绘制桑基图-sankey_plot
    • Stata绘图-可视化:组间差异比较散点图
    • Stata绘图:addplot-fabplot-多图层美化图片
    • Stata绘图:箱形图与小提琴图-vioplot
    • Stata绘图:太美了!羊皮卷风格图形
    • Stata绘图:自定义绘图利器-palettes
    • 史上最牛Stata绘图模版-schemepack:酷似R中的ggplot2-袁子晴

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

尊敬的老师 / 亲爱的同学们:

连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

New! Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all

🍏 关于我们

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

连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
 最新文章