Stata结果输出:用esttab生成带组别名称的LaTeX回归表格

发布时间:2020-10-08 阅读 38

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者: 华晨 (The University of Manchester)
邮箱: huachen0108@foxmail.com


目录


1. 简介

最近在跑数据的时候做了许多分组的回归,由于在写作论文时使用 LaTeX 编辑,因此需要产生多个分组回归的表格插入 LaTeX 文档。

众所周知,LaTeX 表格的代码很(fan)复(ren)杂(lei),不适合人工编辑,因而许多用户都建议利用一些工具直接产生或将电子表格转换成 LaTeX 表格代码再插入 LaTeX 文档中进行编译。

我最开始使用常用的 esttab 命令将表格导入到 Excel 中,再在 Excel 中进一步美化和编辑各个分组回归的表格,最后用 excel2latex 插件转出表格的 LaTeX 代码再插入 LaTeX 主文档中。

虽然此方法可行,但毕竟还是需要一定量的手工作业。Excel2latex 插件导出的 LaTeX 代码也比较呆板,在插入主文档时还需要自己不断地调试和 debug,尤其是组别名要跨行的时候,简直无力吐槽。

对着满屏的数字和反斜线,头昏眼花。伟大的高尔基同志教导我们说,懒人改变世界。

因此,花了一个小时研究了一下用强大到令人畏惧的 esttab 生成分组回归表格的 LaTeX 表格代码,于此分享。

2. 分组列表 - 产生 LaTeX 代码

闲言少叙,书归正传。对于分组的样本的回归,我们通常想要一个这样的表格:

怎样用 Stata 来生成它的 LaTeX 表格代码呢?我们直接来看个例子。

cls
sysuse atuo, clear
eststo clear
eststo: quietly reg weight mpg
eststo: quietly reg weight mpg foreign
eststo: quietly reg price weight mpg
eststo: quietly reg price weight mpg foreign

我们利用 auto.dta 模拟了四个回归模型,下面我们想把前两个模型的结果归为一组,名称叫“A”,后两个结果的模型归为一组,叫“B”。根据esttab 网站上提供的例子,我们可以先执行以下一段代码:

esttab using mgroups1.tex, replace                        ///
       star(*0.1 ** 0.05 *** 0.01)                        ///
       mgroups(A B,                                       ///
               pattern(1 0 1 0) span                      ///
               prefix(\multicolumn{@span}{c}{) suffix(})  ///
               erepeat(\cmidrule(lr){@span}))

相信大家对 esttab 的基本用法已经熟悉了,下面主要解释 mgroups() 选项的含义。mgroup() 就是将模型分组的变量。括号中的参数 A B 就是指定两个组别的名称。注意,B 后面紧跟着一个逗号,逗号后面是mgroups() 的子选项,用来设定组别名称的性质:

  • pattern(1 0 1 0) 这个选项是用来从左到右将各个模型归入每个组别的。1 表示该组别的第一个模型,0 表示该组别的其他模型。因此,第一个和第二个回归的估计结果会被归入 A 组,第三个回归估计结果是第二组,也就是 B 组的第一个模型,第三四个回归估计结果会被归入 B 组。
  • span 是指定组别名能在表格中跨列,不指定则组别名称会保留在该组别第一个模型的顶部的单元格内。
  • prefix(\multicolumn{@span}{c}{)suffix(}) 这一前一后两个选项是用来设定组别名在 LaTeX 代码中跨行的。前面已经说了,LaTeX 表格中跨行的内容设定非常的不友好,手工写代码或者修改都极容易出错,强大的 Stata 免去了让我们手工数需要跨的行的数目,这就是@span的作用。熟悉 LaTeX 的胖友们应该一眼就能看出这就是 LaTeX 表格中设置跨行内容的代码。
  • erepeat(\cmidrule(lr){@span}) 这一次选项一看也能知道是设定跨行代码的。对,它是用来给组别名执行命令后在当前工作目录会生成一个 tex 文件,打开后如下图所示:下面加底部表格线的。

执行命令后在当前工作目录会生成一个 tex 文件,打开后如下图所示:

这一段代码不能直接编译,熟悉 LaTeX 的朋友知道,这个文件可以插入已经加载了必备的 package 的主文档方可编译。当然,我们也可以在这个 tex 文件上补充成完整的 LaTeX 文档代码结构进而编译。可是每次都要补充不麻烦吗?有没有打开就能编译的 tex 表格?答案当然是 Yes!执行以下 Stata 代码:

esttab using mgroups2.tex, replace                        ///
       star(* 0.1 ** 0.05 *** 0.01)                       ///
       mgroups(A B,                                       ///
               pattern(1 0 1 0) span                      ///
               prefix(\multicolumn{@span}{c}{) suffix(})  ///
               erepeat(\cmidrule(lr){@span}))             ///
       page booktabs

注意到,在底部加了两个选项 pagebooktabspage 的作用是在生成的 tex 文件中添加生成 LaTeX 文章的代码,而 booktabs 的作用是在生成的 tex 文档中添加加载 booktabs 宏包的代码。生成的 tex 文件如下图所示:

注意比较该 tex 文件和上一个 tex 文件在头部和底部的差异。这个 tex 文件是可以直接编译的,生成的 PDF 表格如下图,已经几乎达到我们的要求了。

需要说明的是,也可以使用选项 page(booktabs)产生可以直接编译的 tex 文件,但是生成的 PDF 表格的顶部和底部均为双线,这既浪费纸张油墨,也不像 Journal of Finance 里表格的高大(bi)上(ge),还不是男神连老师清新大气的审美风格,所以本人不推荐这个方案。

已经完了吗?既然我这么说那就肯定还没完。细心的胖友们肯定发现了,系数里的负号似乎不够长啊?是的,这个短短的横线不是负号(minus) 而是连字符 (hyphen)。之前用 excel2latex 插件导出 Excel 表格时,连字符不会自动改成负号,而我的变量里又有一个 Market-to-book ratio。因而每次选中表格替换 hyphen 都要将这个变成负号的连字符再改正过来,心中就是一万头草泥马飞奔。温柔体贴的 Stata 其实早就想到了这一点,不信我们执行以下代码:

#delimit ;
 esttab using mgroups3.tex, replace
        star(* 0.1 ** 0.05 *** 0.01)
        compress nogaps
        title(\textbf{An Illustration of mgroup() in esttab})
        mgroups(A B,
                pattern(1 0 1 0) span
                prefix(\multicolumn{@span}{c}{) suffix(})
                erepeat(\cmidrule(lr){@span}))
                booktabs page(dcolumn) alignment(D{.}{.}{-1})
;
#delimit cr

这段代码中,我们加入了 page(dcolumn)alignment(D{.}{.}{-1}) 两个选项。

  • page(dcolumn) 的作用是在生成的 tex 文件中添加完整 LaTeX 文章文档代码的同时,添加加载宏包 dcolumn 的代码。
  • alignment(D{.}{.}{-1}) 的作用是调整单元格对齐方式的。(具体是啥意思其实我也不懂啊啊啊!至少有一个功能是小数点对齐。)

生成的 tex 文件如下图所示:

编译之后呢?

惊喜地发现,所有 hyphen 都变成 minus 了!几乎产生了完美的分组回归表格的 LaTeX 代码!妈妈再也不用担心我的分组回归表格了!

其实 esttab 还有好多灵活用于生成 LaTeX 表格代码的选项,比如还有 longtable 的选项,期待胖友们一起来发掘更多更方便更强大的功能吧!

连享会计量方法专题……

3. 样例代码

*  = Example =
*
*  - If you did not install external commands below, please install them first.
*    Otherwise, the code would not be executed properly.
*  - For compiling LaTeX files, you should have installed necessary LaTeX systems
*    e.g. MikTeX on Windows
*
*      ssc install esttab
*	   ssc install estout
*      ssc install texify

	 cap mkdir "D:\_Temp_\"
	 cd "D:\_Temp_\"

     cls
     sysuse auto

     eststo clear
     eststo: quietly reg weight mpg
     eststo: quietly reg weight mpg foreign
     eststo: quietly reg price weight mpg
     eststo: quietly reg price weight mpg foreign

	 *- Basic code -
     esttab using mgroups1.tex, replace							///
	        star(* 0.1 ** 0.05 *** 0.01)						///
            mgroups(A B, 										///
			        pattern(1 0 1 0) span						///
	 				prefix(\multicolumn{@span}{c}{) suffix(})	///
	 				erepeat(\cmidrule(lr){@span}))

    *- Generate full LaTeX code -
    esttab using mgroups2.tex, replace							///
	       star(* 0.1 ** 0.05 *** 0.01)							///
           mgroups(A B, pattern(1 0 1 0)						///
				   prefix(\multicolumn{@span}{c}{) suffix(})	///
	 			   span erepeat(\cmidrule(lr){@span}))			///
		   page booktabs /* Strongly suggest */

	texify mgroups2.tex


	*- Beautify the LaTeX table -
	#delimit ;
     esttab using mgroups3.tex, replace
			star(* 0.1 ** 0.05 *** 0.01)
			compress nogaps
			title(\textbf{An Illustration of mgroup() in esttab})
            mgroups("Group A" "Group B",
			        pattern(1 0 1 0) span
                    prefix(\multicolumn{@span}{c}{) suffix(})
                    erepeat(\cmidrule(lr){@span}))
			booktabs page(dcolumn) alignment(D{.}{.}{-1})
	 ;
	#delimit cr

	texify mgroups3.tex

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata 数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2 小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata 连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

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

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

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD