Home > Statistics > Quantile regression allows covariate effects to differ by quantile

Quantile regression allows covariate effects to differ by quantile

Quantile regression models a quantile of the outcome as a function of covariates. Applied researchers use quantile regressions because they allow the effect of a covariate to differ across conditional quantiles. For example, another year of education may have a large effect on a low conditional quantile of income but a much smaller effect on a high conditional quantile of income. Also, another pack-year of cigarettes may have a larger effect on a low conditional quantile of bronchial effectiveness than on a high conditional quantile of bronchial effectiveness.

I use simulated data to illustrate what the conditional quantile functions estimated by quantile regression are and what the estimable covariate effects are.

Simulated data to understand conditional quantiles

Suppose that each number between 0 and 1 corresponds to the fortune of an individual, or observational unit, in the population. In a sense, each number between 0 and 1 specifies the rank of an individual. For a given \(x\), a conditional quantile \(Q(\tau|x)\) maps a rank \(\tau\in[0,1]\) to an outcome \(y\). This mapping is essentially an inverse of the conditional distribution function. For each \(x\), a conditional distribution function \(F(y|x)\) maps an outcome \(y\) into a probability that must be between 0 and 1.

I drew simulated data from a Weibull distribution to illustrate what conditional quantiles are. The graph below contains a scatterplot of the outcome \(y\) against the covariate \(x\). I include plots of the conditional mean \(y\) given \(x\) (E[y|x]), the conditional 0.8 quantile of \(y\) given \(x\) (Q(0.8|x)), the conditional median of \(y\) given \(x\) (Q(0.5|x)), and the conditional 0.2 quantile of \(y\) given \(x\) (Q(0.2|x)).

graph1

The Q(0.8|x) curve plots the outcome \(y\) corresponding to the rank of 0.8 for each \(x\). The Q(0.5|x) curve plots the outcome \(y\) corresponding to the rank of 0.5 for each \(x\). The Q(0.2|x) curve plots the outcome \(y\) corresponding to the rank of 0.2 for each \(x\). Q(0.8|x)>Q(0.5|x)>Q(0.2|x) for each \(x\) because \(0.8>0.5>0.2\).

The conditional mean and the conditional quantiles curve upward because I used a quadratic in \(x\) in the Weibull distribution of \(y\) given \(x\). The conditional mean is above the conditional median because the Weibull distribution has a long, thin right tail.

While the graph of the simulated data and the conditional quantiles provides some intuition, some technical details provide a deeper understanding. The functional form for the distribution of \(y\) given \(x\) from which I drew the data is

\begin{equation}
\label{F}\tag{1}
F(y|x)=1 -\exp\left[-\left(\frac{y}{
\beta_0 + \beta_1 x + \beta_2 x^2
}\right)^{\alpha}\right]
\end{equation}

The quantile function is the inverse distribution function for a continuous distribution. For quantile \(\tau\in[0,1]\), the conditional quantile function implied by the \(F(y|x)\) in \eqref{F} is

\begin{equation}
\label{Q}\tag{2}
Q(\tau|x) =
(\beta_0 + \beta_1 x + \beta_2 x^2)
\left[
-\ln(1-\tau)
\right]^{\frac{1}{\alpha}}
\end{equation}

For a specified value of \(x\), \(Q(\tau|x)\) produces the \(\tau\)(th) quantile of \(y\) conditional on \(x\).

I got \eqref{Q} by setting

$$
\tau=1 -\exp\left[-\left(\frac{y}{
\beta_0 + \beta_1 x + \beta_2 x^2
}\right)^{\alpha}\right]
$$

and solving for \(y\) as a function of \(\tau\). This inverse relationship is the foundation for the interpretation of the conditional quantile curves given above. For a given \(x\), \(F(y|x)\) maps \(y\) into where it ranks in \([0,1]\). For a given \(x\), \(Q(\tau|x)\) maps the rank \(\tau\) into the outcome \(y\).

Estimating conditional quantile functions

qreg estimates the parameters of conditional quantile functions. Like ordinary least squares, the conditional quantile functions are assumed to be linear combinations of covariates. Powers and interactions are accommodated using factor variables.

In example 1, I estimate \(\delta_0\), \(\delta_1\), and \(\delta_2\) in \(Q(0.2|x)= \delta_0 + \delta_1 x + \delta_2 x^2\).

Example 1: qreg for 0.2 conditional quantile

. use quantile1

. qreg y x c.x#c.x, quantile(0.2)
Iteration  1:  WLS sum of weighted deviations =  2549.6656

Iteration  1: sum of abs. weighted deviations =  2675.4783
Iteration  2: sum of abs. weighted deviations =  2382.9844
Iteration  3: sum of abs. weighted deviations =  2261.3777
Iteration  4: sum of abs. weighted deviations =  1855.4505
Iteration  5: sum of abs. weighted deviations =  1687.6014
Iteration  6: sum of abs. weighted deviations =  1664.1955
Iteration  7: sum of abs. weighted deviations =  1663.5237
Iteration  8: sum of abs. weighted deviations =  1661.7397
Iteration  9: sum of abs. weighted deviations =  1661.4886
Iteration 10: sum of abs. weighted deviations =   1661.485
Iteration 11: sum of abs. weighted deviations =  1661.4436
Iteration 12: sum of abs. weighted deviations =   1661.441
Iteration 13: sum of abs. weighted deviations =  1661.4379
Iteration 14: sum of abs. weighted deviations =  1661.4378

.2 Quantile regression                              Number of obs =      5,000
  Raw sum of deviations  1907.42 (about .95246261)
  Min sum of deviations 1661.438                    Pseudo R2     =     0.1290

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           x |   .4528183   .1370586     3.30   0.001     .1841233    .7215133
             |
     c.x#c.x |   .3749397   .0625822     5.99   0.000     .2522511    .4976282
             |
       _cons |   .4922369   .0650939     7.56   0.000     .3646242    .6198496
------------------------------------------------------------------------------

You can download the data by clicking on this link quantile1.dta.

As reflected in the iteration log, qreg obtains its estimates by minimizing the sum of asymmetrically weighted absolute deviations; see Koenker and Bassett (1978), Cameron and Trivedi (2010, chap. 7.2.2), and Wooldridge (2010, chap. 12.10) for details. The output table presents point estimates and inference for the \(\delta_0\), \(\delta_1\), and \(\delta_2\) in \(Q(0.2|x)= \delta_0 + \delta_1 x + \delta_2 x^2\).

When I simulated the data, I set \(\beta_0=1\), \(\beta_1=1\), \(\beta_2=.8\), and \(\alpha=2\) in \eqref{F}. These values imply that the true values of \(\delta_0\), \(\delta_1\), and \(\delta_2\) are 0.47, 0.47, and 0.38, respectively. The estimated coefficients are close to their true values.

Comparing the estimated 0.2 conditional quantiles with the true function is another way of providing intuition for quantile regression. Example 2 computes the predictions and plots them on a graph that also contains a scatterplot of a subset of the data and a plot of the true 0.2 conditional quantile function.

Example 2: Estimated and true 0.2 conditional quantile functions

. predict xb0
(option xb assumed; fitted values)

. label variable xb0 "original predictions"

. sort x

. twoway (scatter y x if y<6)                                             
>  (function q20  = (1+x+0.8*x^2)*((-ln(1-0.2))^(1/2)) , range(0 3) )      
>  (line xb0 x)                                                           
>  , legend(label(2 "Q(0.2|x)")) legend(cols(3))

graph1

The estimated 0.2 conditional quantile function is very close to the true 0.2 conditional quantile function. In fact, I excluded larger observations from the scatterplot so that some difference in the curves is apparent.

Estimating covariate effects

The change in the \(\tau\)(th) conditional quantile function that results from a change in a covariate defines a covariate effect. For example, the difference in the 0.2 conditional quantile function that results from each unit getting an additional unit of \(x\) is \(Q(0.2|(x+1))-Q(0.2|x)\) is one such effect. Using the predictions computed in example 2, I compute and plot these estimated effects in example 3.

Example 3: Q(0.2|(x+1))-Q(0.2|x)

. generate orig = x

. replace x = x+1
(5,000 real changes made)

. predict xb1
(option xb assumed; fitted values)

. label variable xb1 "x=x+1 predictions"

. replace x = orig
(5,000 real changes made)

. generate effects = xb1 - xb0

. label variable effects "Q(0.2|(x+1)) - Q(0.2|x)"

. scatter effects x

graph1

This graph shows how the effects vary over \(x\), but there is no information about how well these effects are estimated. predictnl estimates observation-level expressions of estimated parameters and produces pointwise confidence intervals. The expression for the effect of interest is

_b[x] + 2*_b[c.x#c.x]*x + _b[c.x#c.x]

because

_b[x]*(x+1) + _b[c.x#c.x]*(x+1)^2 + _b[_cons]
-(_b[x]*x + _b[c.x#c.x]*x^2 + _b[_cons])
= _b[x] + 2*_b[c.x#c.x]*x + _b[c.x#c.x]

In example 4, I use predictnl to compute these effects and pointwise confidence intervals.

Example 4: predictnl estimates of Q(0.2|(x+1))-Q(0.2|x)

. predictnl effects2 = _b[x] + 2*_b[c.x#c.x]*x + _b[c.x#c.x], 
>         ci(low up)
note: confidence intervals calculated using Z critical values

. list effects effects2 in 1/5

     +---------------------+
     |  effects   effects2 |
     |---------------------|
  1. | .8279508   .8279508 |
  2. |  .828063   .8280631 |
  3. | .8281841   .8281842 |
  4. | .8283278   .8283277 |
  5. | .8286009   .8286009 |
     +---------------------+

. label variable effects2 "Q(0.2|(x+1)) - Q(0.2|x)"

. sort x

. twoway (rarea up low x) (scatter effects2 x),              
>         ytitle("Q(0.2|(x+1)) - Q(0.2|x)") legend(off)

I list the first five estimated effects to illustrate that the two computations yield the same results. Having illustrated this equivalence, I plot the effects with a confidence interval.

graph1

One of the reasons that researchers use quantile regression is that the effects can differ by quantile. The hypothesis is that the covariate effects differ for those dealt a low rank (quantile) than for those who are dealt a high rank (quantile). To compare the estimated effects of an additional unit of \(x\) on the 0.2 conditional quantile with these effects on the 0.8 conditional quantile, I begin by estimating the parameters of 0.8 conditional quantile function.

Example 5: qreg for 0.8 conditional quantile

. qreg y x c.x#c.x, quantile(.8)
Iteration  1:  WLS sum of weighted deviations =  2598.5922

Iteration  1: sum of abs. weighted deviations =  2602.1666
Iteration  2: sum of abs. weighted deviations =  2137.2076
Iteration  3: sum of abs. weighted deviations =  2060.0299
Iteration  4: sum of abs. weighted deviations =  2023.7347
Iteration  5: sum of abs. weighted deviations =  2019.0775
Iteration  6: sum of abs. weighted deviations =  1989.5983
Iteration  7: sum of abs. weighted deviations =  1984.2083
Iteration  8: sum of abs. weighted deviations =  1984.1369
Iteration  9: sum of abs. weighted deviations =  1983.9698
Iteration 10: sum of abs. weighted deviations =  1983.9663
Iteration 11: sum of abs. weighted deviations =  1983.9286
Iteration 12: sum of abs. weighted deviations =  1983.8811
Iteration 13: sum of abs. weighted deviations =  1983.8722
Iteration 14: sum of abs. weighted deviations =   1983.866

.8 Quantile regression                              Number of obs =      5,000
  Raw sum of deviations 3221.082 (about 3.7893667)
  Min sum of deviations 1983.866                    Pseudo R2     =     0.3841

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           x |   1.350297   .1776428     7.60   0.000     1.002039    1.698555
             |
     c.x#c.x |   .9258261   .0811133    11.41   0.000     .7668085    1.084844
             |
       _cons |   1.252304   .0843688    14.84   0.000     1.086904    1.417703
------------------------------------------------------------------------------

While the output indicates that the coefficients on these terms are not zero, the relative size of the effects is not readily apparent. In example 6, I use predictnl to estimate the effects of an additional unit of \(x\) on the 0.8 conditional quantile function and their pointwise confidence intervals.

Example 6: Q(0.8|(x+1))-Q(0.8|x)

. predictnl effects3 = _b[x] + 2*_b[c.x#c.x]*x + _b[c.x#c.x],
>         ci(low3 up3)
note: confidence intervals calculated using Z critical values

. label variable effects3 "Q(0.8|(x=1)) - Q(0.8|x)"

In example 7, I plot the effects of an additional unit of \(x\) on the 0.2 conditional quantile function and on the 0.8 conditional quantile function.

graph1

Both the magnitude and the slope of the effects are larger for the 0.8 conditional quantile function than for the 0.2 conditional quantile function.

Done and undone

I used simulated data to illustrate what conditional quantile functions are, and I illustrated that the effects of a covariate can vary over conditional quantiles.

References

Cameron, A. C., and P. K. Trivedi. 2010. Microeconometrics Using Stata. Rev. ed. College Station, TX: Stata Press.

Koenker, R., and G. Bassett. 1978. Regression quantiles. Econometrica 46: 33–50.

Wooldridge, J. M. 2010. Econometric Analysis of Cross Section and Panel Data. 2nd ed. Cambridge, MA: MIT Press.