Stata: 世行发布的一组神奇命令


作者:胡雨霄 (伦敦政治经济学院)

Stata 连享会: 知乎 | | 码云 | CSDN

Source: World Bank Stata GitHub: Other useful commands:

  • 连享会推文集锦
  • Stata连享会 精品专题 || 精彩推文
    Stata: 世行发布的一组神奇命令_第1张图片
    点击此处-查看完整推文列表

连享会计量方法专题……

连享会#金秋十月 @ 空间计量专题 (2019.10.24-27,成都)

本文介绍世界银行在 Github 公布的一系列有用的命令 (useful commands)。具体而言,包括 betterbarforestoutwritesumstats,以及 makeid命令。

1. 世界银行 DIME group 公布的 Stata 资源

世界银行的 Development Impact Evaluation (DIME) group 在 Github 上共享了许多用于影响评估的 Stata 命令,对于利用 Stata 进行实证研究的使用者,这是一个非常友好的学习平台。首先,本篇推文概括并总结了世界银行共享的资源,以供 Stata 使用者参考。

  • DIME Wiki

DIME group 将影响评估的研究过程分为四个板块,研究设计 (Research Design),数据收集(Data Collection),数据分析(Analysis),以及发表(Publication)。基于这四个板块,DIME 进一步细化,并提供了相关的资源链接。

  • Stata_Coding_Practices

该网页是影响评估的实用手册。DIME 公布了两个用于影响评估的 toolkit,iefiledkt 以及 ietoolkit。这两个toolkit 包含系列用于影响评估的命令。

  • DIME Github

该网页是 DIME 的 Github 主页,具体包括四个部分: Analytics Public Resources,DIME Analytics Code,DIME Analytics Blogposts,以及 Other useful commands。

本文主要介绍最后一个部分: Other useful commands


2. betterbar 和 betterbarci 命令

该命令允许输出带有置信区间的条形图。其基本语法如下:

betterbar varlist [if] [in] [weight], [options] [twoway_options]

各选项含义如下:

  • by(varname) 是一级 (top-level) 分组方式
  • `over(varname) 是二级 (bottom-level) 分组方式
  • bar 设定标注平均值

接下来我们使用 ssc install 命令安装 betterbar 命令的相关文件,并展示使用范例:

ssc install betterbar, replace  //安装命令
sysuse "auto.dta" , clear //数据

xtile temp = rnormal(), n(4)  //按照正态分布分成四个分位
label def temp 1 "I" 2 "II" 3 "III" 4 "IV"
betterbarci trunk mpg, over(foreign) ///
     by(temp) bar format(%9.2f)

输出的条形图如下所示:

Stata: 世行发布的一组神奇命令_第2张图片
Bar.png


3. forest 命令

forest 命令可以在一张图中输出某个解释变量 (x) 在不同回归中对不同被解释变量 (y1, y2, ……) 的影响。其基本命令如下

 forest estimator depvars = treatment  [if] [in] ,  ///
    [weight(weight)] [controls(varlist)]
    [graphopts(twoway_options)] 

其中,

  • depvars 列出被解释变量
  • treatment 列出独立变量
  • weight(weight) 允许加入权重
  • controls() 允许加入不同回归中的控制变量
  • [graphopts(twoway_options)] 允许对 graph 进行设定

通过 forest 命令,可以探究某一变量对不同 outcome 的影响。下图的例子中,三个回归均以 displacement 为解释变量,而分别以 mileage headroom 以及 trunk 为被解释变量。而上图则展示了着三个回归中 displacement 的系数以及置信区间。

/* 对graph的设定 */
global tw_opts ///
    title(, justification(left) color(black) span pos(11)) ///
    graphregion(color(white) lc(white) lw(med)) bgcolor(white) ///
    ylab(,angle(0) nogrid) xtit(,placement(left) justification(left)) ///
    yscale(noline) xscale(noline) legend(region(lc(none) fc(none)))

sysuse auto.dta , clear
forest reg mpg headroom trunk = displacement , graph($tw_opts)

结果如下图所示。从这张图中,研究者可以比较同一解释变量对不同被解释变量的解释力度。

Stata: 世行发布的一组神奇命令_第3张图片
Effect of Displacement on Mileage, Headroom, and Trunk Space.png


3. outwrite 命令

outwrite 命令可以输出不同回归的结果,并将不同回归的结果整合为一张表格,最终以 .xlsx, .xls, .csv, 或者 .tex 的格式导出。

其基本语法为

 outwrite estimates_1 estimates_2 [...] using "/path/to/output.[xlsx|xls|csv|tex]" ,
    [replace stats() drop(varlist)] [tstat|pvalue] [format(format)]
    [sheet(sheetname [,replace]) modify]
    [rownames("list" "of" "names") colnames("list" "of" "names")]

其中,

  • estimate_[] 是利用 estimates store 保存的回归结果

  • stats() 允许在表格底部加入统计量,例如 N,r2 等。

  • drop(varlist) 可以只保留必要留在输出表格中的变量

  • tstat|pvalue 可以选择输出 t 统计量或者 p-value

  • format() 规定输出数字的格式,通常默认为 %9.2f

  • rownames 规定了输出表格的行名

  • colnames 则规定了输出表格的列名

  • 举例

  sysuse auto.dta, clear
    reg price i.foreign##c.mpg
    est sto reg1
    reg price i.foreign##c.mpg##i.rep78
    est sto reg2
    estadd scalar h = 4
    reg price i.rep78
    est sto reg3
    estadd scalar h = 2.5

  outwrite reg1 reg2 reg3 using "test.tex",   ///
     stats(N r2 h) replace col("TEST" "(2)")  ///
     drop(i.rep78) format(%9.3f)

运行该命令后,输出的表格如下图所示。

|                                                         | TEST         | (2)           |             |
| ------------------------------------------------------- | ------------ | ------------- | ----------- |
| Car type=Foreign                                        | -13.587      | 10778.100     |             |
|                                                         | 2634.664     | 29479.229     |             |
| Mileage (mpg)                                           | -329.255***  | -123.167      |             |
|                                                         | 74.985       | 610.350       |             |
| Car type=Foreign * Mileage (mpg)                        | 78.888       | -306.273      |             |
|                                                         | 112.481      | 920.727       |             |
| Car type=Domestic * Repair Record 1978=1                |              |               |             |
|                                                         |              |               |             |
| Car type=Foreign * Repair Record 1978=3                 |              | -19235.155    |             |
|                                                         |              | 34136.560     |             |
| Car type=Foreign * Repair Record 1978=4                 |              | -2139.158     |             |
|                                                         |              | 30896.784     |             |
| Repair Record 1978=2 * Mileage (mpg)                    |              | -507.656      |             |
|                                                         |              | 663.585       |             |
| Repair Record 1978=3 * Mileage (mpg)                    |              | -396.619      |             |
|                                                         |              | 622.879       |             |
| Repair Record 1978=4 * Mileage (mpg)                    |              | 7.265         |             |
|                                                         |              | 642.175       |             |
| Repair Record 1978=5 * Mileage (mpg)                    |              | 233.417       |             |
|                                                         |              | 1100.325      |             |
| Car type=Foreign * Repair Record 1978=3 * Mileage (mpg) |              | 689.032       |             |
|                                                         |              | 1180.072      |             |
| Car type=Foreign * Repair Record 1978=4 * Mileage (mpg) |              | 4.446         |             |
|                                                         |              | 1000.733      |             |
| Constant                                                | 12600.538    | 7151.000      | 4564.500    |
|                                                         | 1527.888     | 12947.485     | 2107.347    |
| N                                                       | 74.000       | 69.000        | 69.000      |
| r2                                                      | 0.289        | 0.384         | 0.014       |
| h                                                       |              | 4.000         | 2.500       |


4. sumstats 命令

该命令可以简便得制作描述性统计表格。其基本语法如下

sumstats (varlist_1 [if]) [(varlist_2 [if])] [...]
        using "/path/to/output.xlsx" [weight], stats(stats_list) [replace]

其中,

  • varlist 设定变量名称

  • [weight] 允许引入权重

  • stats(stats_list) 明确要输出的统计量

  • 举例

 sysuse auto.dta , clear
  sumstats ///
    (price mpg if foreign == 0) ///
    (price displacement length if foreign == 1) ///
    using "test.xlsx" , replace stats(mean sd)

输出表格如下所示。可以看出,该命令可以实现分组的描述性统计的分组输出。

|                         | mean    | sd      |
| ----------------------- | ------- | ------- |
| Subsample: foreign == 0 |         |         |
| Price                   | 6072.42 | 3097.10 |
| Mileage (mpg)           | 19.83   | 4.74    |
|                         |         |         |
| Subsample: foreign == 1 |         |         |
| Price                   | 6384.68 | 2621.92 |
| Displacement (cu. in.)  | 111.23  | 24.88   |
| Length (in.)            | 168.55  | 13.68   |


5. makeid 命令

该命令允许创建 Unique ID。其基本命令为:

 makeid varlist, generate(newvarname) project(Project Name)

需要注意的是,varlist 中的变量必须本身即是 unique 的,而不能有 duplicate。

  • 举例
. ssc install makeid
. sysuse auto.dta , clear
(1978 Automobile Data)

. makeid foreign make , gen(uniqueid) project(Demo)
(data now sorted by foreign make)
(data now sorted by uniqueid)

. de uniqueid

              storage   display    value
variable name   type    format     label  variable label
-----------------------------------------------------------------
uniqueid        str4    %9s               Demo ID: foreign + make

. list foreign make uniqueid in 1/5

     +-------------------------------------+
     |  foreign   make            uniqueid |
     |-------------------------------------|
  1. | Domestic   AMC Concord         D101 |
  2. | Domestic   AMC Pacer           D102 |
  3. | Domestic   AMC Spirit          D103 |
  4. | Domestic   Buick Century       D104 |
  5. | Domestic   Buick Electra       D105 |
     +-------------------------------------+

. list foreign make uniqueid in 53/57

     +---------------------------------+
     | foreign   make         uniqueid |
     |---------------------------------|
 53. | Foreign   Audi 5000        D201 |
 54. | Foreign   Audi Fox         D202 |
 55. | Foreign   BMW 320i         D203 |
 56. | Foreign   Datsun 200       D204 |
 57. | Foreign   Datsun 210       D205 |
     +---------------------------------+

连享会计量方法专题……

关于我们

  • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
  • 公众号推文同步发布于 CSDN-Stata连享会 、-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。
  • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
  • Stata连享会 精品专题 || 精彩推文

联系我们

  • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。您也可以从 连享会选题平台 → [002_备选主题] 中选择感兴趣的题目来撰写推文。
  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
  • 联系邮件: [email protected]

往期精彩推文

  • Stata连享会推文列表
  • Stata连享会 精品专题 || 精彩推文

Stata: 世行发布的一组神奇命令_第4张图片
点击此处-查看完整推文列表


Stata: 世行发布的一组神奇命令_第5张图片
欢迎加入Stata连享会(公众号: StataChina)

你可能感兴趣的:(Stata: 世行发布的一组神奇命令)