Stata结果输出:addest自己定制输出的统计量

发布时间:2021-12-02 阅读 624

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

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

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

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

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

⛳ Stata 系列推文:

丁晨:厦门大学, 3049378404@qq.com
王文泽:中山大学,wangwz5@sysu.edu.cn


目录


1. 应用背景

用户使用 Stata 估计后,往往需要将标量,向量,矩阵或文本信息附加到估计结果中。

本文介绍的 addest 命令,就是起到这个作用。此命令扩展了 Stata 的 ereturn 命令及一些估计检验命令的特性,它使用存储在 ereturn 中的估计结果,允许用户附加一些数据项到估计结果中。

估计命令的结果集都存储在内存中,用户可以输入 ereturn list 读取数据集,并运用到后面的计算中。比如,用户输入 display e(N) 可以获取最新估计结果中的样本数。

此外,Stata 内置或用户提供的很多估计检验命令都需要借助 ereturn 做进一步分析。比如,Stata 中功能强大的 marginsmarginsplot 命令,及非常通用的 estimates table 命令。包括 xml_tableoutreg 在内的很多程序,都是将多个模型的估计结果,用一种相似的 table 进行展示。

addest 命令致力于解决这么一种情境,用户希望用一个估计检验命令展示或处理原始估计模型的一些特性,但目前这些特性并不在存储结果中。在执行回归语句后,用户可通过 addest 命令将一些选项添加到已有存储项中,进一步丰富 ereturn 中的存储内容。在此基础上,通过 esttab 等命令,方便快速的输出新增选项。

后面将从用法实例说明两方面,介绍此命令的使用。

2. 用法介绍

本小节分别介绍 addest 命令的基本语法选项

2.1 addest 命令安装

*findit addest
net install addest, replace

2.1 基本语法

addest 命令的基本语法如下:

 addest [ , name(charstring) value(numeric value) bvector(vector name)
          vcematrix(matrix name) rename augbvector(number)
          augvcematrix(number) augcoefname(string) augeqname(string)
          textname(string) textstring(string) matname(ematrix_name)
          matrix(existing_matrix) findomitted buildfvinfo post repost *
        ]

其中,addest 为命令主体,不可省略;addest_options 为在基础命令上添加的选项,包含5组,每组各有2-3 个选项,同组选项必须搭配使用。下面是它们的详细介绍。

  • name(charstring)value(numeric value):这是一对选项,必须一起使用。
  • name() 定义新增标量的名称,只能使用 charsting 类型,不能包含特殊字符,它也是 Stata macro 变量的名称。value 则为对应的数值。如果用户使用了一个已存在的标量名称,那么它的值会被覆盖。
  • bvectore(vector name)vceatrix(matrix value):这对选项的作用是使用户替换估计结果中的相关系数及方差-协方差矩阵的向量值。新的相关系数及方差-协方差矩阵必须和 ereturn 空间中原来的矩阵有相同的行数和列数。
  • rename:这个选项只能配合 bvectorvceatrix 这组选项使用,它让 Stata 使用 bvector 中的 names 作为 bv 估计矩阵的标签。这些标签接下来会被用在 ereturn displayestimates table 的输出结果中。
  • augbvector(number), haugvceatrix(number), augcoefname(string)[augeqname(string)]:这4个选项也是一组。前3个选项需要一起使用,第4个选项是给新增的相关性估计指定一个方程名称,当 e(b)e(V) 的结果集包括等式名称还存储在 e(return) 时,才需要附加。这组选项使用户能在相关系数矩阵中添加一个单独估计的相关系数,并在原来估计的相关系数的方差-协方差矩阵添加新估计的方差,e(V)
  • textname(string_with_no_blanks), textstring(string_with_no_blanks):这组选项的作用使用户可以在 e(return) 结果集中添加任意的字符串作为 macro
  • matname(ematrix_name) matrix(existing_matrix):这两个选项是必须同时进行设定。它们先将之前创建命名为 existing_matrix 的 Stata 矩阵加载进入 ereturn 的存储空间中,并更改为名为 ematrix_name 的矩阵,其中 ematrix_name 中不能包含空格或特殊字符。如果用户在设定使用了一个已经存在于 ereturn 空间中的名称,那个名称将被覆盖;
  • postrepost:当用户更改或更新 ereturn 存储空间中的估计结果时,addest 命令默认设定为 repost 选项。当用户更改或更新涉及到ereturn存储空间的其他内容时,addest命令默认设定为post选项。同时用户也可以通过直接输入postrepost指令来覆盖这些默认选项;
  • findomitted:通过 ereturn postereturn repost 来指定。将省略运算符 o. 添加到列表中 e(V) 的零值对角线元素对应的变量中,此选项的设定会同样传递给 ereturn repost
  • buildfvinfo:通过 ereturn postereturn repost 来指定,并计算用于测定可估计函数的 H 矩阵,该矩阵将会用于一些 post-estimation 命令,例如:contrastmarginspwcompare。此选项的设定会同样传递给 ereturn repost
  • *(other options):任何其他选项的设定都会被传递到 ereturn postereturn repost

3. 实例说明

下面本文基于数据集 nlsw88.dta 来简要说明 addest 命令的使用。以 wage (妇女的小时工资) 作为被解释变量、 以 collgrad (是否大学毕业)race (种族类别) 及它们的交乘项作为解释变量建立线性回归模型。 使用 因子变量 的语法格式,在变量前面加上前缀 i. 生成虚拟变量 i.race ,基准组为第一个类别 white。collgrad 本身是虚拟变量,1 代表大学毕业,0 代表大学未毕业。

3.1 基础数据分析

sysuse nlsw88.dta

* 描述性统计
tabulate race collgrad,summarize(wage) mean st o

table race collgrad,c(count wage mean wage sd wage)

* 相关系数矩阵
pwcorr wage race collgrad,sig star(.01)
return list
mat pwcmat = r(C)

3.2 将线性回归后的各检验结果加入 ereturn 中

线性回归,并进行系数显著性检验、异方差、共线性检验,使用addest , name(charstring)) value(numeric value) 命令,将检验结果加入 ereturn。

* 线性回归
reg wage i.race##collgrad
ereturn list

* 检验变量系数的显著性;将检验结果存入结果集中
local varlist
test 2.race 3.race 1.race 1.collgrad
addest,name(F_of_test) value(50.21)
addest,name(p_of_test) value(0.000)

* 异方差检验:使用怀特检验;将检验结果存入结果集中
estat imtest,white //p值为0.0106,存在异方差
addest ,name("wtest_p") value(0.0106)

* 多重共线性检验:VIF<=10 或者1/VIF>0.1 说明没有多重共线性
estat vif
addest,name("VIF") value(1.42)

如下所示,ereturn list 结果集中,新增了几个标量,存储各检验结果

. ereturn list

scalars:
                e(VIF) =  1.42
            e(wtest_p) =  .0106
          e(p_of_test) =  0
          e(F_of_test) =  50.21

3.3 替换估计结果集中的相关系数及方差-协方差矩阵

注意:使用addest,bvectore(vector value) vceatrix(matrix value) rename命令仅替换 ereturn 中的 e(b) e(V) 两矩阵,不改变其它值。并且替换矩阵会被同步删除。该选项实用性不强,小编没有想到有哪个场景,需要使用该选项。

* 线性回归,并保存估计结果为e1
reg wage i.race##collgrad
est store e1
mat eb1 = e(b)
mat ev1 = e(V)

* 使用稳健的标准差对数据进行回归分析,并保存估计结果为e2
reg wage i.race##collgrad,robust
est store e2
mat eb2 = e(b)
mat ev2 = e(V)

* 用e2中的e(b) e(V) 替换e1的e(b) e(V)
est restore e1
addest,b(eb2) vce(ev2) rename //该命令会同时删除eb2 ev2矩阵
mat list e(b)
mat list e(V)

e1 中的 e(b) e(V) 已发生改变, 详细结果,可运行上述代码查看。

3.4 扩展结果集中的 b、v 矩阵

使用addest , augbvector(number) augvceatrix(number)augcoefname(string)[augeqname(string)]扩展结果集中的 b、v 矩阵。

* 线性回归,并保存估计结果为e1
reg wage i.race#collgrad
est store e1
* 增加自变量进行线性回归,并保存估计结果为e2
reg wage i.race#collgrad 2.race 1.collgrad
est store e2
* 扩展e1的e(b) e(V)矩阵值
est restore e1
addest,augb(-1.437)augvce(0.0881) augcoefname("2.race")
addest,augb(3.013)augvce(0.0956) augcoefname("collgrad")

使用以下命令,查看结果,e1 中的 e(b) e(V) 各新增了一行

est table //或者使用 matrix list e(b) 看系数
ereturn list //看估计的结果集列表
matrix list e(V) //可以检验方差-协方差矩阵

3.5 增加 ereturn 中的暂元

使用addest,textname(string) textstring(string) 增加 ereturn 中的暂元

reg wage i.race#collgrad
addest,textname("baserace") textstring("1-white")
ereturn list

如下图所示,ereturn 中新增了暂元baserace

. ereturn list

scalars:
                  e(N) =  2246
               e(df_m) =  5
               e(df_r) =  2240
                  e(F) =  40.22007771936102
                 e(r2) =  .0823810399343723
               e(rmse) =  5.519505061068133
                e(mss) =  6126.510492139263
                e(rss) =  68241.45690691109
               e(r2_a) =  .0803327833270829
                 e(ll) =  -7020.747213722369
               e(ll_0) =  -7117.294949670645
               e(rank) =  6

macros:
           e(baserace) : "1-white"

4. 小结

addest 命令主要作用是在估计结果 ereturn 中增加标量、矩阵、暂元等功能( eret2 命令同样可以实现,代码精简,使用方便), 方便用户可以将估计和检验结果存储在同一个结果集中,但有些选项,如替换相关系数扩展 b、v 矩阵,小编认为实用性不强。读者可以根据自身需求,使用此命令。

5. Stata 实操范例

在本部分,我们以「nlsw88.dta」数据为例,来演示说明 addest 命令的用法。具体来看,我们进行了两组回归:第一组是根据种族类别进行分组回归,以检验工作经历是否在两组中存在显著差别,并将系数差异检验结果添加到最后回归报告中;第二组是在第一组回归基础上,增加行业固定效应,并在报告中 “Industry = Yes” 的形式汇报。

具体 Stata 代码和结果如下:

sysuse nlsw88.dta, clear

global xx "ttl_exp married south hours tenure age"

*分组差异检验

reg wage $xx if race==1 
est store m1
reg wage $xx if race==2 
est store m2

suest m1 m2        
test [m1_mean]ttl_exp = [m2_mean]ttl_exp //系数差异检验
local chi2 = `r(chi2)'
local chi2_p = `r(p)'

reg wage $xx if race==1 
addest, name("chi2") value(`chi2')  //将系数差异检验结果添加到回归结果中
addest, name("chi2_p") value(`chi2_p')
est store m3

reg wage $xx if race==2
addest, name("chi2") value(`chi2')
addest, name("chi2_p") value(`chi2_p')
est store m4

*控制行业固定效应

reg wage $xx i.industry if race==1 
addest, textn("Industry") texts("Yes") //textname,简称 textn;textstring,简称 texts
est store m5
reg wage $xx i.industry if race==2 
addest, textn("Industry") texts("Yes")
est store m6	

. esttab m3 m4 m5 m6, b(%6.3f) nogap compress      ///
    star(* 0.1 ** 0.05 *** 0.01) drop(*.industry)  ///
    ar2 scalar(N Industry chi2 chi2_p)

--------------------------------------------------------------
                 (1)          (2)          (3)          (4)   
                wage         wage         wage         wage   
--------------------------------------------------------------
ttl_exp        0.291***     0.288***     0.251***     0.271***
              (7.62)       (5.18)       (6.49)       (4.82)   
married       -0.641**      0.176       -0.737**      0.082   
             (-2.03)       (0.44)      (-2.31)       (0.21)   
south         -0.893***    -2.307***    -0.814***    -2.038***
             (-2.97)      (-5.58)      (-2.72)      (-4.92)   
hours          0.056***     0.045*       0.051***     0.036   
              (4.25)       (1.72)       (3.81)       (1.35)   
tenure         0.031        0.037        0.025       -0.003   
              (0.98)       (0.87)       (0.76)      (-0.08)   
age           -0.084*      -0.254***    -0.073       -0.216***
             (-1.82)      (-3.64)      (-1.58)      (-3.12)   
_cons          6.284***    12.478***     5.576**      9.490** 
              (3.27)       (4.34)       (2.22)       (2.53)   
--------------------------------------------------------------
N               1625          576         1615          572   
adj. R-sq      0.091        0.134        0.112        0.166   
Industry                                   Yes          Yes   
chi2           0.002        0.002                             
chi2_p         0.961        0.961                             
--------------------------------------------------------------
t statistics in parentheses
* p<0.1, ** p<0.05, *** p<0.01

6. 相关推文

Note:产生如下推文列表的命令为:
lianxh esttab 行业虚拟变量 suest 暂元 outreg2 四表 结果输出
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

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

课程主页

课程主页

关于我们

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

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

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

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

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

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