Amber Memo

分位数回归:条件分位数、控制变量与 RIF 回归

分位数回归RIF异质性Stata

分位数回归在国内论文里的典型用法:均值回归得到一个显著的系数,再补一个 10%、25%、50%、75%、90% 分位数回归,说“政策对高分位企业的作用更强”。这篇记这类结论的读法,主要说明一件事:加了控制变量之后,分位数回归的系数回答的已经是另一个问题。

分位数回归估计什么

对 0<τ<10<\tau<1,分位数回归最小化“检查函数”(Koenker and Bassett, 1978):

β^(τ)=arg⁡min⁡b∑iρτ(yi−xi′b),ρτ(u)=u (τ−1{u<0})\hat\beta(\tau) = \arg\min_b \sum_i \rho_\tau\bigl(y_i - x_i'b\bigr),\qquad \rho_\tau(u) = u\,\bigl(\tau - \mathbf 1\{u<0\}\bigr)

τ=0.5\tau=0.5 就是中位数回归。它估计的是条件分位数:Qτ(y∣x)=x′β(τ)Q_\tau(y\mid x) = x'\beta(\tau),即“在 xx 取这个值的所有个体里,yy 的第 τ\tau 分位数”。

读系数时有两点要分清:

  1. “高分位”指的是给定 xx 之后的高分位:一家企业被归在 90% 分位,是因为它的结果在“和它特征相同的企业”里算高,不是因为它的结果在全样本里算高。
  2. 分位数处理效应是两个分布之间的差,不是同一批个体的效应。只有在处理不改变个体在分布中的排序(rank invariance)时,才能说“处在 90% 位置上的那些企业受到的影响更大”,这个假定通常没法检验。

一个模拟:随机分配,加不加控制变量

DD 是随机分配的 0/1 处理,w∼N(0,1)w\sim N(0,1) 是一个与 DD 无关的控制变量,e∼N(0,1)e\sim N(0,1):

y=1+D+2w+(1+0.5D) ey = 1 + D + 2w + (1+0.5D)\,e

处理的平均效应是 1。处理还使 ee 的作用放大了一半,所以处理效应在分布的上端更大、下端更小。

两种分位数处理效应有各自的解析值:

  • 不控制 ww: 比较 D=1D=1 和 D=0D=0 两组 yy 的第 τ\tau 分位数,1+zτ(6.25−5)=1+0.264 zτ1 + z_\tau(\sqrt{6.25}-\sqrt 5)=1+0.264\,z_\tau,其中 zτz_\tau 是标准正态的 τ\tau 分位数;
  • 控制 ww: 条件在 ww 上的分位数效应是 1+0.5 zτ1 + 0.5\,z_\tau。

用 200 万个观测核对过,不控制 ww 时 τ=0.1,0.5,0.9\tau = 0.1, 0.5, 0.9 的差分别是 0.663、1.002、1.339,与解析值 0.662、1.000、1.338 吻合。

2000 个观测,重复 500 次,估计 DD 的系数:

τ\tau 解析值:不控制 ww 解析值:控制 ww 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 的 DD 系数不管加不加 ww 都在 1.0 附近(均值 1.006 和 1.002),区别只在精度:抽样标准差从 0.102 降到 0.054。OLS 里控制一个与处理无关的变量只是提高精度,分位数回归里它改变了估计对象:0.9 分位数的处理效应从 1.34 变成了 1.64,下端则从 0.66 变成 0.36。两个数都估计得很准,但回答的不是同一个问题。

  • 不控制 ww:处理使整个 yy 的分布的第 90% 分位点上移多少;
  • 控制 ww:在 ww 相同的个体里,处理使他们 yy 的条件分布的第 90% 分位点上移多少。

前一个对应“政策使最高的那批结果变得更高”,后一个对应“政策使同类企业里相对靠前的那批更靠前”。大多数论文的叙述想表达的是前者,却跑了后者。

一份样本上的结果(分位数回归的两行是 τ=0.9\tau=0.9,标准误是 qreg 的默认值):

方法 DD 的系数 标准误
OLS,不控制 ww 0.991 0.105
OLS,控制 ww 0.938 0.057
qreg,不控制 ww 1.242 0.150
qreg,控制 ww 1.570 0.093

RIF 回归:无条件分位数的偏效应

如果想回答“解释变量变化时整个分布的某个分位点怎么变”,用 Firpo, Fortin and Lemieux(2009)的 RIF 回归。它把 yy 换成再中心化的影响函数(recentered influence function):

RIF⁡(y;qτ)=qτ+τ−1{y≤qτ}fy(qτ)\operatorname{RIF}(y; q_\tau) = q_\tau + \frac{\tau - \mathbf 1\{y\le q_\tau\}}{f_y(q_\tau)}

其中 qτq_\tau 是 yy 的无条件 τ\tau 分位数,fyf_y 是 yy 的密度。对 RIF 做 OLS,系数是解释变量的分布发生一个小的移动时,无条件分位数的变化。同样的数据上:

方法 DD 的系数 标准误
rifhdreg y D w, rif(q(90)) 1.328 0.162
rifhdreg y D, rif(q(90)) 1.380 0.183

两个都围绕总体值 1.349(把 DD 的分布做一个小的移动、无条件 90% 分位数的变化,解析算出),与不控制 ww 的 qreg 想回答的是同一类问题;线性设定大致成立时,它也基本不随控制多少变量而变,控制变量只是提高精度。RIF 回归只是一个 OLS,估计快,加固定效应、聚类也方便。另一条思路是 Powell(2020)的做法:在有控制变量的情况下直接估计无条件的分位数处理效应。

它有自己的限制:回归的是 RIF 的条件均值,所以线性设定要大致对;估计的是“小幅度移动”的偏效应,不是 0 变成 1 的有限变化,对 0/1 处理变量来说,两者在这个例子里很接近(1.349 对 1.338)但一般不相等;RIF 里的密度 fy(qτ)f_y(q_\tau) 在分布稀疏的地方估计得不稳。

实操

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.9\tau=0.9 时 0.097 对 0.099,95% 区间覆盖率 94.0% 和 94.6%)。样本量和设计不同时不一定如此,论文里的做法通常是用稳健或 bootstrap。
  • 分位数之间系数的差异(比如 τ=0.9\tau=0.9 和 τ=0.1\tau=0.1 的 DD 系数是否相等)要用 sqreg,分别用 qreg 估计的两个结果没有联合的协方差矩阵。
  • 分别估计各个分位数,条件分位数函数可能出现交叉(低分位数预测值超过高分位数的),要注意样本里的取值范围。

面板数据

直接把企业哑变量放进 qreg 在 TT 较小时有附带参数问题;Koenker(2004)提出对固定效应加惩罚,Canay(2011)则是先用组内去均值估计出固定效应、再从 yy 里减掉,最后做普通的分位数回归,但它假定固定效应只是位置平移,在各个分位数上相同。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() 选项吸收固定效应,对应的是无条件分位数的偏效应,含义同上。

小结

  1. 分位数回归给出的是条件分位数,系数的含义随控制变量变化;论文里要说明想回答的是“同类企业里的相对位置”还是“整个分布上的位置”。
  2. 想回答“政策使整个分布的上端怎么移动”,用不控制或少控制的分位数回归(随机分配时)或 RIF 回归。
  3. 分位数处理效应是分布之间的差,解释成“同一批个体”需要排序不变的假定。
  4. 分位数之间系数是否不同,用 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.