Stata:描述性统计分析新命令-dstat

发布时间:2022-04-17 阅读 4956

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下载 - 推文合集

刘欣妍 (香港中文大学),liuxinyan@link.cuhk.edu.hk
史 柯 (中央财经大学),shike2231128@gmail.com

编者按:本文主要整理自下文,特此致谢!
Source:Jann B. dstat: A new command for the analysis of distributions[J]. 2021. -PDF- -Github-


目录


1. 描述性统计

Stata 为高级统计和计量经济学分析提供了强大的功能。但是仍存在一定缺陷,主要包括以下几点:

  • 不同类型的统计数据需要通过各种不同的命令才能得到;
  • 每个命令都有特定的运行逻辑 (特定的语法、特定的输出、特定的返回值);
  • 不同命令对统计推断的支持差异很大 (有些命令甚至不允许设置权重,有些命令则完全支持复杂的统计分析);
  • 表格和图表的创建不够便捷,尤其是涉及置信区间的输出;
  • Stata 官方并没有涵盖某些问题,例如不同权重的描述性统计在某些命令中并不能实现。

2. 命令安装

当我们对置信区间很感兴趣时,Stata 目前的命令并不能直接输出变量的置信区间。基于 Stata 现有的描述性统计分析命令的不足,本文将着重于介绍一个新命令 dstat

. ssc install dstat,    replace
. ssc install moremata, replace
. ssc install coefplot, replace

3. 具体示例

3.1 计算多个变量的描述性统计值

. sysuse nlsw88, clear

. * 一个变量:不同union下的工资的均值
. dstat (mean) wage, over(union)

mean                                     Number of obs = 1,878
--------------------------------------------------------------
        wage | Coefficient  Std. err.     [95% conf. interval]
-------------+------------------------------------------------
       union |
   Nonunion  |      7.205      0.109         6.991       7.418
      Union  |      8.674      0.194         8.293       9.055
--------------------------------------------------------------

. * 多个变量:同时展示工资(wage)的均值,工资时长(median)的中位数,以及种族(race)的均值
. dstat (mean) wage (median) hours (mean) race 

Summary statistics                       Number of obs = 2,242
--------------------------------------------------------------
             | Coefficient  Std. err.     [95% conf. interval]
-------------+------------------------------------------------
wage         |
        mean |      7.775      0.122         7.536       8.013
-------------+------------------------------------------------
hours        |
      median |     40.000      0.006        39.988      40.012
-------------+------------------------------------------------
race         |
        mean |      1.282      0.010         1.263       1.302
--------------------------------------------------------------

3.2 变量的分布图

. dstat density wage, over(union) ll(0) graph // 选项ll(0)的作用是工资只能是正数

在上面的例子中,工会工人和非工会工人的工资密度分别显示在两个子图中。如果需要将两条曲线叠加在一个坐标系中,则可以使用以下命令:

. dstat graph, merge

如果想进一步了解整个工资分布是如何由两组构成的,我们可以使用选项 unonditional 重新调整密度,并使用选项 total 包括总密度。

. * 如果想要将下图的线条变成覆盖面积,则可以简单的修改为graph(recast(area))即可
. dstat density wage, over(union) total unconditional ll(0) graph(merge) 

除此之外,我们还可以通过 dstat 命令画出每个教育程度中,工会与非工会的分布情况。

. dstat prop grade, over(union) graph(merge)

3.3 控制其他变量

我们可以通过简单的 t-test 来判断出两个变量均值的区别。但是,如果我们想通过控制一些其他变量之后,再看核心变量均值区别,现有的 Stata 命令则无法满足。这时 dstat 命令可以帮助我们解决这一问题。

. *在不控制任何变量的情况下,工会与非工会的工资均值区别如下:
. sysuse nlsw88, clear
. dstat (mean) wage, over(union)

mean                                     Number of obs = 1,878
--------------------------------------------------------------
        wage | Coefficient  Std. err.     [95% conf. interval]
-------------+------------------------------------------------
       union |
   Nonunion  |      7.205      0.109         6.991       7.418
      Union  |      8.674      0.194         8.293       9.055
--------------------------------------------------------------

. lincom _b[1.union]-_b[0.union]

 (1)  - 0bn.union + 1.union = 0
------------------------------------------------------------------------------
        wage | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         (1) |      1.470      0.223     6.60   0.000        1.033       1.907
------------------------------------------------------------------------------

. *若我们控制了教育,工作时间,工作经验和任期后,工会与非工会的工资均值区别如下:
. dstat (mean) wage, over(union) balance(grade hours ttl_exp tenure)

--------------------------------------------------------------
        wage | Coefficient  Std. err.     [95% conf. interval]
-------------+------------------------------------------------
       union |
   Nonunion  |      7.372      0.108         7.160       7.584
      Union  |      8.330      0.203         7.933       8.727
--------------------------------------------------------------

. lincom _b[1.union]-_b[0.union]

 (1)  - 0bn.union + 1.union = 0
------------------------------------------------------------------------------
        wage | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         (1) |      0.958      0.220     4.36   0.000        0.527       1.389
------------------------------------------------------------------------------

. /*
> 另外注意,除了采用上面lincom的方法计算两个分组的均值差异之外,
> 我们还可以在dstat命令本身加constrast,自动计算均值差异。
> 其中,eb:代表熵值平衡, 是一种更加倾向于使用的平衡方法,具体可参考Jann 2021.
> */
. dstat (mean) wage, over(union, contrast(0)) balance(eb:grade hours ttl_exp tenure)

------------------------------------------------------------------------------
        wage | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
       union |
      Union  |      0.989      0.218     4.53   0.000        0.561       1.417
------------------------------------------------------------------------------

3.4 IF 函数和分解分析

dstat 命令还可以用作分解分析 (decomposition analysis)。在下面的例子中,加入工会的工人和未加入工会的工人之间的工资差距,被分解为由协变量差异解释部分和残差 (无法解释) 部分。

. * rif命令是用来计算Recentered Influence Functions(RIF)回归,有关RIF回归具体可参考(Firpo et al.2009) 
. dstat (mean) wage, over(union) balance(eb: grade hours ttl_exp tenure, reference(1)) rif(RIF0c) 
. dstat (mean) wage if e(sample), over(union) rif(RIF0 RIF1) 
. generate difference  = RIF1  - RIF0  // 工资的差异
. generate explained   = RIF0c - RIF0  // 解释的部分
. generate unexplained = RIF1  - RIF0c // 未解释的部分
. mean difference explained unexplained

--------------------------------------------------------------
             |       Mean   Std. err.     [95% conf. interval]
-------------+------------------------------------------------
  difference |      1.457      0.223         1.019       1.895
   explained |      0.607      0.136         0.341       0.872
 unexplained |      0.850      0.208         0.442       1.259
--------------------------------------------------------------

3.5 常见图形

带有置信区间的直方图:

. dstat histogram wage, ep n(20) graph // 其中ep代表equal probability

重叠的两个直方图:

. dstat histogram wage, over(union) common nose graph(merge)

分组分布情况的差异:

. * 工会与非工会的工资分布情况的差异
. dstat density wage, over(union, contrast) n(200) graph(yline(0))

分位数上的差异:

. dstat quantile wage, over(union, contrast) notable balance(eb:grade hours ttl_exp tenure)
. estimates store balanced
. dstat quantile wage if e(sample), over(union, contrast)
. estimates store raw
. coefplot raw balanced, se(se) at(at) keep(1:) recast(line) ciopts(recast(rarea) ///
>     pstyle(ci) color(%50) lcolor(%0)) plotlabels("raw wage gap" "adjusted wage gap")

4. 相关推文

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

html)

相关课程

免费公开课

最新课程-直播课

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

课程主页

课程主页

关于我们

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

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

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

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

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