查看原文
其他

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

连享会 连享会 2023-10-24

👇 连享会 · 推文导航 | www.lianxh.cn

连享会 · 2022暑期班

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

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


目录

  • 1. 命令介绍

  • 2. 主要思路

  • 3. 适用性与局限

  • 4. 相关推文



1. 命令介绍

tuples 命令的主要作用是从给定列表集合中抽取所有的真子集。例如,我们可以通过命令语句 tuples 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 命令先返回全部控制变量的真子集;
  • 逐个回归:依次利用这些真子集作为控制变量进行回归,返回 对应的 值 (命名为 t0fIndX);
  • 计算 值:通过模型的自由度 (degreeOfFreedom) 以及给定的显著性水平 (significance),确定 分布下使 显著的 值 (命名为 tValue);
  • 筛选出显著的变量集:当 t0fIndX > tValue 时,则该控制变量组能够很好地保证主要解释变量 是显著的。
. 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 所对应的 值;
  • 第三列是通过 invttail 的方式计算出来的 值;
  • 第四列是模型的 R2。

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

3. 适用性与局限

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

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

4. 相关推文

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

  • 专题:Stata命令
    • Stata新命令-pdslasso:众多控制变量和工具变量如何挑选?
  • 专题:回归分析
    • 调节效应是否需要考虑对控制变量交乘?
    • 控制变量!控制变量!
    • 不用太关心控制变量,真的!
    • 加入控制变量后结果悲催了!
  • 专题:IV-GMM
    • Lasso一下:再多的控制变量和工具变量我也不怕-T217
  • 专题:断点回归RDD
    • RDD:断点回归可以加入控制变量吗?
    • Stata:RDD-中可以加入控制变量
  • 专题:其它
    • 锚定情境法(一):有效控制变量自评偏差

课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
🍓 课程主页https://gitee.com/lianxh/YGqjp

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存