Stata:控制变量组合的筛选-tuples

发布时间:2022-06-15 阅读 3659

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

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

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

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

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

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:左祥太 (武汉纺织大学)
邮箱Shutter_Z@outlook.com


目录


1. 命令介绍

tuples 命令的主要作用是从给定列表集合中抽取所有的真子集。例如,我们可以通过命令语句 tuples A B,来分别抽取集合 {A,B} 中的子集,抽取结果分别是 {A}{B}{A,B}。单从这里看来,或许会觉得 tuples 命令有些鸡肋,但当我们利用 tuples 命令从众多控制变量中筛选出我们满意的组合时,就能够解锁 tuples 的进阶用法了。

tuples 命令安装:

ssc install tuples, replace

tuples 命令语法:

tuples list [ , options]

list 表示变量时,不需要缩写;而当其表示包含空格的其他内容时,则需配合双引号使用。options 主要包括以下内容:

  • max(#):指定返回子集中元素的最大个数;
  • min(#):指定返回子集中元素的最小个数;
  • display:在屏幕上展示真子集结果;
  • nopython:不用 Python 进行运算 (未正确安装 Python 环境可以使用此选项);
  • nomata 不用 Mata 进行运算;
  • nosort 不对子集进行排序。

2. 主要思路

接着,我们介绍下如何利用 tuples 命令来筛选控制变量,以使得主要解释变量显著。具体思路如下:

  • 控制变量子集:利用 tuples 命令先返回全部控制变量的真子集;
  • 逐个回归:依次利用这些真子集作为控制变量进行回归,返回 X 对应的 t 值 (命名为 t0fIndX);
  • 计算 t 值:通过模型的自由度 (degreeOfFreedom) 以及给定的显著性水平 (significance),确定 t 分布下使 X 显著的 t 值 (命名为 tValue);
  • 筛选出显著的变量集:当 t0fIndX > tValue 时,则该控制变量组能够很好地保证主要解释变量 X 是显著的。
. sysuse auto.dta, clear
(1978 automobile data)

. * 设定显著性水平
. global significance 0.01

. * 设定变量
. global dependentVariable price    // 设置被解释变量
. global independentVariable weight // 设置解释变量
. global controlVariables headroom trunk length displacement // 设置控制变量

. * 以下不用修改
. gen degreeOfFreedom = .
. gen tValue = .
. gen bOfIndX = .
. gen seOfIndX = .
. gen tOfIndX = .
. gen rSq = .
. gen controlVariableSet = ""
. tuples $controlVariables
. forvalues i = 1/`ntuples' {
  2.     regress $dependentVariable $independentVariable `tuple`i'', r
  3.     replace bOfIndX = _b[$independentVariable] in `i'
  4.     replace seOfIndX = _se[$independentVariable] in `i'
  5.     replace tOfIndX = bOfIndX / seOfIndX in `i'
  6.     replace degreeOfFreedom = e(df_r) in `i'        
  7.     replace tValue = invttail(degreeOfFreedom, $significance) in `i'
  8.     replace rSq = e(r2) in `i'
  9.     replace controlVariableSet = "`tuple`i''" in `i'
 10. }
 
. preserve
.     replace tOfIndX = abs(tOfIndX)
.     replace tValue = abs(tValue)
.     keep if tOfIndX > tValue
.     gen controlVariableNumbers = wordcount(controlVariableSet) if controlVariableSet != ""
.     sort controlVariableNumbers rSq
.     keep if rSq != .
.     list controlVariableSet tOfIndX tValue rSq
. restore

     +--------------------------------------------------------+
     |    controlVariableSet    tOfIndX     tValue        rSq |
     |--------------------------------------------------------|
  1. |                 trunk   3.639188   2.380024   .2942578 |
  2. |              headroom   5.325744   2.380024    .317878 |
  3. |                length   2.714205   2.380024   .3475631 |
  4. |        headroom trunk   3.801941   2.380807   .3185539 |
  5. | headroom displacement   2.516981   2.380807   .3200988 |
     |--------------------------------------------------------|
  6. |          trunk length    2.70173   2.380807   .3483588 |
  7. |       headroom length   2.690756   2.380807   .3618365 |
  8. | headroom trunk length   2.673256   2.381614   .3716414 |
     +--------------------------------------------------------+

结果说明如下:

  • 第一列是控制变量的组合;
  • 第二列是回归中主要解释变量 weight 所对应的 t 值;
  • 第三列是通过 invttail 的方式计算出来的 t 值;
  • 第四列是模型的 R2。

可以看到,这些控制变量组合都是能够使得主要解释变量 weight 在 1% 显著水平下显著的结果。

3. 适用性与局限

在阅读完文献后,我们通常会准备多个控制变量,选择不同的控制变量组可能会使结果出现不合意的变化。通过上述方法,我们可以很容易地从众多控制变量中筛选出比较满意的控制变量组合。

不过由于这种做法是我一时兴起所编,所以在实际运行过程当中或多或少会出现一些的 bug,比如当控制变量的真子集个数超过观测样本的总数时,就有可能报错。连享会之前的一篇推文「gsreg:自动模型设定和变量筛选」则很好地解决了这一问题,但同样也存在着一系列的局限性,如 gsreg 难以配合 reghdfe 等命令进行使用。

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 控制变量, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

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

课程主页

课程主页

关于我们

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

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

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

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

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