STATA是回归分析的最常用的工具。当我们进行了大量的回归分析之后通常需要解决三个问题。怎样才能直观的展示需要关注的系数?如何才能方便的对比不同回归中的系数?怎样才能生成论文中可以直接使用的高质量的回归表格?本教程将试图对这三个问题给出自己的理解。
本教程将使用STATA中的$Estout Package$来回答以上三个问题。$Estout$功能非常强大,其中包括了estout, esttab, estadd等命令。Estout的具体细节介绍可以参考官方介绍文档。 但是由于它的选项非常丰富,学习起来有一定的难度,因此本文旨在对$Estout$的使用方法进行总结,来达到降低使用estout制作表格的难度的目的。
我们将首先介绍如何使用$Estout$输出最基本的回归表格,接着介绍如何把描述性数字以及回归中控制的变量类型加入到表格中,最后是如何生成pdf格式的表格。
使用$Estout$制作基本的表格非常简单,只需要在$regress$命令后使用esttab即可。 下面我们以STATA自带的auto数据来展示esttab的效果。
sysuse auto,clear. 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中的内容为数据的标签。具体效果可见下图。
.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.500Num of Obs 74 74--------------------------------------------t statistics in parentheses* p<0.05, ** p<0.01, *** p<0.001
如果所需要加入回归表格中的信息不是回归中返回值时,我们需要用到estout package中的estadd命令。例如,当需要加入因变量的均值时,我们可以使用以下命令
sum price estadd r(mean)
我们也常常需要在回归表格中标注所控制的变量的类型,这一步骤也同样的可以使用estadd来实现。例如,当我们希望在上述部分回归中控制车辆是否是外国品牌时,我们可以在回归表格中加入一行来显示每个回归是否控制了该变量。
estadd local Foreign_FE = " ", replace
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)0.foreign 0 (.)1.foreign 3526.8*** (5.51)_cons 11488.5* 5340.2 (2.53) (1.35)--------------------------------------------Foreign FE XDep Mean 6165.3 6165.3R Square 0.372 0.566Num of Obs 74 74--------------------------------------------t statistics in parentheses* p<0.05, ** p<0.01, *** p<0.001
上述表格都是在STATA窗口中的显示效果,并不是我们的最终目的。我们希望能够将表格制作完全自动化,从进行回归分析,到将表格加入到文章中,不需要进行任何手动的复制粘贴。将这一过程自动化的目的,是在不断修改回归的过程中,减少人为出错的概率。为了达到这个目的,我们需要使用estout 中的using .tex, 以及prehead, postfoot这几个选项。using x.tex 使得输出结果为tex格式,而prehead, postfoot分别包括了使得tex文档能够直接编译成pdf的tex代码。
#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 do file之后,我们会得到一个tex文档。编译tex文档即可得到如下图所示的表格。