STATA教程之:Estout

[TOC]

版本

2018.06.13 初稿
2018.07.15 第二稿

前言

STATA是回归分析的最常用的工具。当我们进行了大量的回归分析之后通常需要解决三个问题。怎样才能直观的展示需要关注的系数?如何才能方便的对比不同回归中的系数?怎样才能生成论文中可以直接使用的高质量的回归表格?本教程将试图对这三个问题给出自己的理解。

本教程将使用STATA中的Estout Package来回答以上三个问题。Estout功能非常强大,其中包括了estout, esttab, estadd等命令。Estout的具体细节介绍可以参考官方介绍文档。 但是由于它的选项非常丰富,学习起来有一定的难度,因此本文旨在对Estout的使用方法进行总结,来达到降低使用estout制作表格的难度的目的。

Estout介绍

我们将首先介绍如何使用Estout输出最基本的回归表格,接着介绍如何把描述性数字以及回归中控制的变量类型加入到表格中,最后是如何生成pdf格式的表格。

基本回归表格

使用Estout制作基本的表格非常简单,只需要在regress命令后使用esttab即可。 下面我们以STATA自带的auto数据来展示esttab的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
. sysuse auto
(1978 Automobile Data)

. eststo: quietly regress price weight mpg
(est1 stored)

. eststo: quietly regress price weight mpg foreign
(est2 stored)

. esttab

--------------------------------------------
(1) (2)
price price
--------------------------------------------
weight 1.747** 3.465***
(2.72) (5.49)

mpg -49.51 21.85
(-0.57) (0.29)

foreign 3673.1***
(5.37)

_cons 1946.1 -5853.7
(0.54) (-1.73)
--------------------------------------------
N 74 74
--------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001

. eststo clear

我们用了一个命令就得到了一个简单的回归表格,而这个回归表格已经能够满足清晰的对比不同回归中的相同变量的系数的目的。Esttab之所以如此简单,强大,因为它其实是更为复杂的estout命令的一个wrapper,也就是说当我们使用esttab命令时,其实已经使用了STATA设计好的初始设置。例如,回归系数,标准误差的小数点默认为三位,以及表格中会加入观测值数量等。当然,这个表格还不能满足我们的所有需求。当我们希望更为丰富的表格内容时该如何做呢?

加入描述性数据,以及控制变量类型

可以加入到回归表格中的描述性数据分为两类:回归本身返回的数据,例如R-Square, 观测值数量等;需要另外计算加入到回归表格中的数据,例如因变量的均值,控制变量类型等。

加入回归返回的数据

将回归本身返回的数据加入到表格的方法相对简单,只需要使用esttab中的选项stats即可。例如,当我们需要加入R Square和回归的观测值时,可以加入stats(r2 N, labels(“R Square” “Num of Obs”))。其中,r2,N分别代表了要加入的数据,而labels中的内容为数据的标签。具体效果可见下图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    
.esttab, stats(r2 N, labels("R Square" "Num of Obs"))

--------------------------------------------
(1) (2)
price price
--------------------------------------------
weight 1.747** 3.465***
(2.72) (5.49)

mpg -49.51 21.85
(-0.57) (0.29)

foreign 3673.1***
(5.37)

_cons 1946.1 -5853.7
(0.54) (-1.73)
--------------------------------------------
R Square 0.293 0.500
Num of Obs 74 74
--------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001

加入其他信息

如果所需要加入回归表格中的信息不是回归中返回值时,我们需要用到estout package中的estadd命令。例如,当需要加入因变量的均值时,我们可以使用以下命令

1
2
sum price 
estadd r(mean)

我们也常常需要在回归表格中标注所控制的变量的类型,这一步骤也同样的可以使用estadd来实现。例如,当我们希望在上述部分回归中控制车辆是否是外国品牌时,我们可以在回归表格中加入一行来显示每个回归是否控制了该变量。

1
estadd local  Foreign_FE = " ", replace

完整代码,以及输出的表格效果可见下图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    sysuse auto,clear

reg price trunk headroom length weight
estimates store est1
sum price
estadd r(mean)
estadd local Foreign_FE = " ", replace

reg price trunk headroom length weight i.foreign
estimates store est2
sum price
estadd scalar ymean = r(mean)
estadd local Foreign_FE = "X", replace

. esttab, stats(Foreign_FE ymean r2 N, ///
> labels("Foreign FE" "Dep Mean" "R Square" "Num of Obs"))

--------------------------------------------
(1) (2)
price price
--------------------------------------------
trunk 114.1 63.31
(1.04) (0.68)

headroom -711.6 -606.2
(-1.60) (-1.62)

length -101.7* -89.03*
(-2.41) (-2.52)

weight 4.753*** 5.780***
(4.24) (6.04)

1.foreign 3526.8***
(5.51)

_cons 11488.5* 5340.2
(2.53) (1.35)
--------------------------------------------
Foreign FE X
Dep Mean 6165.3 6165.3
R Square 0.372 0.566
Num of Obs 74 74
--------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001

制作tex文档

上述表格都是在STATA窗口中的显示效果,并不是我们的最终目的。我们希望能够将表格制作和文章写作打通起来,实现完全自动化,从进行回归分析,到将表格加入到文章中,不需要进行任何手动的复制粘贴。将这一过程自动化的目的,是在不断修改回归的过程中,减少人为出错的概率。为了达到这个目的,我们需要使用estout 中的using .tex, 以及prehead, postfoot这几个选项。using x.tex将输出结果更改为tex格式,而prehead, postfoot分别包括了使得tex文档能够直接编译成pdf的tex代码。具体代码可见下图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#delimit ; 

esttab est1 est2 using estout_eg.tex, replace style(tex) booktabs
keep(trunk headroom length weight 1.foreign)
stats(Foreign_FE ymean r2 N, labels("Foreign FE" "Dep Mean" "R-Squared" "N")
fmt(0 3 3 0)) // content options
b(3) se(3) star(* 0.1 ** 0.05 *** 0.01) // content formating options
mlabels(,none) numbers // column heading options
label varlabels(1.foreign "Foreign") // row head formating options
prehead( // tex code needed to compile document
\documentclass[leqno,11pt]{article}
\usepackage{booktabs}
\usepackage{tabularx}
\begin{document}
\begin{table}[h]
\def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\caption{Using Estout to Output Regression Coefficients}
\begin{center}
\begin{tabular}{l c c}
\toprule
)
postfoot( // more tex code needed to compile document
\end{tabular}
\end{center}
\end{table}
\end{document}
)
;
#delimit cr

STATA在执行完上述代码后,会生成一个estout_eg.tex的文档。通过Latex编译这个文档,我们可以得到如下图所示的PDF文档

代码下载链接
完整版本PDF下载链接

版权声明

STATA教程之:Tabout
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×