分位数回归:条件分位数、控制变量与 RIF 回归
分位数回归在国内论文里的典型用法:均值回归得到一个显著的系数,再补一个 10%、25%、50%、75%、90% 分位数回归,说“政策对高分位企业的作用更强”。这篇记这类结论的读法,主要说明一件事:加了控制变量之后,分位数回归的系数回答的已经是另一个问题。
分位数回归估计什么
对 ,分位数回归最小化“检查函数”(Koenker and Bassett, 1978):
就是中位数回归。它估计的是条件分位数:,即“在 取这个值的所有个体里, 的第 分位数”。
读系数时有两点要分清:
- “高分位”指的是给定 之后的高分位:一家企业被归在 90% 分位,是因为它的结果在“和它特征相同的企业”里算高,不是因为它的结果在全样本里算高。
- 分位数处理效应是两个分布之间的差,不是同一批个体的效应。只有在处理不改变个体在分布中的排序(rank invariance)时,才能说“处在 90% 位置上的那些企业受到的影响更大”,这个假定通常没法检验。
一个模拟:随机分配,加不加控制变量
是随机分配的 0/1 处理, 是一个与 无关的控制变量,:
处理的平均效应是 1。处理还使 的作用放大了一半,所以处理效应在分布的上端更大、下端更小。
两种分位数处理效应有各自的解析值:
- 不控制 : 比较 和 两组 的第 分位数,,其中 是标准正态的 分位数;
- 控制 : 条件在 上的分位数效应是 。
用 200 万个观测核对过,不控制 时 的差分别是 0.663、1.002、1.339,与解析值 0.662、1.000、1.338 吻合。
2000 个观测,重复 500 次,估计 的系数:
| 解析值:不控制 | 解析值:控制 | qreg y D(均值) |
qreg y D w(均值) |
|
|---|---|---|---|---|
| 0.1 | 0.662 | 0.359 | 0.664 | 0.364 |
| 0.5 | 1.000 | 1.000 | 1.011 | 0.998 |
| 0.9 | 1.338 | 1.641 | 1.348 | 1.640 |
作为对照,OLS 的 系数不管加不加 都在 1.0 附近(均值 1.006 和 1.002),区别只在精度:抽样标准差从 0.102 降到 0.054。OLS 里控制一个与处理无关的变量只是提高精度,分位数回归里它改变了估计对象:0.9 分位数的处理效应从 1.34 变成了 1.64,下端则从 0.66 变成 0.36。两个数都估计得很准,但回答的不是同一个问题。
- 不控制 :处理使整个 的分布的第 90% 分位点上移多少;
- 控制 :在 相同的个体里,处理使他们 的条件分布的第 90% 分位点上移多少。
前一个对应“政策使最高的那批结果变得更高”,后一个对应“政策使同类企业里相对靠前的那批更靠前”。大多数论文的叙述想表达的是前者,却跑了后者。
一份样本上的结果(分位数回归的两行是 ,标准误是 qreg 的默认值):
| 方法 | 的系数 | 标准误 |
|---|---|---|
| OLS,不控制 | 0.991 | 0.105 |
| OLS,控制 | 0.938 | 0.057 |
qreg,不控制 |
1.242 | 0.150 |
qreg,控制 |
1.570 | 0.093 |
RIF 回归:无条件分位数的偏效应
如果想回答“解释变量变化时整个分布的某个分位点怎么变”,用 Firpo, Fortin and Lemieux(2009)的 RIF 回归。它把 换成再中心化的影响函数(recentered influence function):
其中 是 的无条件 分位数, 是 的密度。对 RIF 做 OLS,系数是解释变量的分布发生一个小的移动时,无条件分位数的变化。同样的数据上:
| 方法 | 的系数 | 标准误 |
|---|---|---|
rifhdreg y D w, rif(q(90)) |
1.328 | 0.162 |
rifhdreg y D, rif(q(90)) |
1.380 | 0.183 |
两个都围绕总体值 1.349(把 的分布做一个小的移动、无条件 90% 分位数的变化,解析算出),与不控制 的 qreg 想回答的是同一类问题;线性设定大致成立时,它也基本不随控制多少变量而变,控制变量只是提高精度。RIF 回归只是一个 OLS,估计快,加固定效应、聚类也方便。另一条思路是 Powell(2020)的做法:在有控制变量的情况下直接估计无条件的分位数处理效应。
它有自己的限制:回归的是 RIF 的条件均值,所以线性设定要大致对;估计的是“小幅度移动”的偏效应,不是 0 变成 1 的有限变化,对 0/1 处理变量来说,两者在这个例子里很接近(1.349 对 1.338)但一般不相等;RIF 里的密度 在分布稀疏的地方估计得不稳。
实操
qreg y D w, quantile(0.9) // 单个分位数
qreg y D w, quantile(0.9) vce(robust) // 稳健标准误
sqreg y D w, quantiles(0.1 0.5 0.9) reps(200) // 同时估计,bootstrap 标准误,可以检验分位数之间系数是否相等
test [q10]D = [q90]D
几点:
qreg的vce()只接受iid和robust,聚类标准误要用 bootstrap 前缀:bootstrap, cluster(id) reps(500): qreg y x, quantile(0.5)(我试过vce(cluster id),报 r(198))。- 在这个模拟里,
qreg默认标准误和vce(robust)的差别很小( 时 0.097 对 0.099,95% 区间覆盖率 94.0% 和 94.6%)。样本量和设计不同时不一定如此,论文里的做法通常是用稳健或 bootstrap。 - 分位数之间系数的差异(比如 和 的 系数是否相等)要用
sqreg,分别用qreg估计的两个结果没有联合的协方差矩阵。 - 分别估计各个分位数,条件分位数函数可能出现交叉(低分位数预测值超过高分位数的),要注意样本里的取值范围。
面板数据
直接把企业哑变量放进 qreg 在 较小时有附带参数问题;Koenker(2004)提出对固定效应加惩罚,Canay(2011)则是先用组内去均值估计出固定效应、再从 里减掉,最后做普通的分位数回归,但它假定固定效应只是位置平移,在各个分位数上相同。Stata 里更常用的是下面几种:
* Machado and Santos Silva (2019):位置—尺度模型,吸收固定效应,聚类
mmqreg y x, absorb(id) quantile(10 50 90)
* RIF 回归:吸收固定效应,聚类到企业
rifhdreg y x, rif(q(90)) abs(id) vce(cluster id)
mmqreg 把分位数写成位置加尺度的形式,所以估计出来的分位数函数不会交叉,代价是对分布形状的假定更强:所有分位数的变化都来自位置和尺度两个函数。rifhdreg 的 abs() 选项吸收固定效应,对应的是无条件分位数的偏效应,含义同上。
小结
- 分位数回归给出的是条件分位数,系数的含义随控制变量变化;论文里要说明想回答的是“同类企业里的相对位置”还是“整个分布上的位置”。
- 想回答“政策使整个分布的上端怎么移动”,用不控制或少控制的分位数回归(随机分配时)或 RIF 回归。
- 分位数处理效应是分布之间的差,解释成“同一批个体”需要排序不变的假定。
- 分位数之间系数是否不同,用
sqreg检验;标准误用稳健或 bootstrap,聚类的用 bootstrap 前缀。
代码
模拟:
capture program drop onesim
program define onesim, rclass
clear
set obs 2000
gen D = rbinomial(1, 0.5)
gen w = rnormal()
gen e = rnormal()
gen y = 1 + D + 2*w + (1 + 0.5*D)*e
quietly reg y D
return scalar ols_nw = _b[D]
quietly reg y D w
return scalar ols_w = _b[D]
foreach t in 10 50 90 {
quietly qreg y D, quantile(0.`t')
return scalar q_nw`t' = _b[D]
quietly qreg y D w, quantile(0.`t')
return scalar q_w`t' = _b[D]
return scalar se_iid`t' = _se[D]
quietly qreg y D w, quantile(0.`t') vce(robust)
return scalar se_rob`t' = _se[D]
}
end
simulate ols_nw=r(ols_nw) ols_w=r(ols_w) q_nw10=r(q_nw10) q_nw50=r(q_nw50) q_nw90=r(q_nw90) ///
q_w10=r(q_w10) q_w50=r(q_w50) q_w90=r(q_w90) ///
se_iid10=r(se_iid10) se_iid50=r(se_iid50) se_iid90=r(se_iid90) ///
se_rob10=r(se_rob10) se_rob50=r(se_rob50) se_rob90=r(se_rob90), reps(500) seed(20261027) nodots: onesim
summarize
RIF 回归需要 ssc install rif(rifhdreg 在这个包里),mmqreg 也在 SSC:
ssc install rif, replace
ssc install mmqreg, replace
参考文献
- Canay, I. A. (2011). A simple approach to quantile regression for panel data. Econometrics Journal, 14(3), 368–386.
- Firpo, S., Fortin, N. M., & Lemieux, T. (2009). Unconditional quantile regressions. Econometrica, 77(3), 953–973.
- Koenker, R. (2004). Quantile regression for longitudinal data. Journal of Multivariate Analysis, 91(1), 74–89.
- Koenker, R., & Bassett, G. (1978). Regression quantiles. Econometrica, 46(1), 33–50.
- Machado, J. A. F., & Santos Silva, J. M. C. (2019). Quantiles via moments. Journal of Econometrics, 213(1), 145–173.
- Powell, D. (2020). Quantile treatment effects in the presence of covariates. Review of Economics and Statistics, 102(5), 994–1005.
- Rios-Avila, F. (2020). Recentered influence functions (RIFs) in Stata: RIF regression and RIF decomposition. Stata Journal, 20(1), 51–94.