Peter Verbeet
Peter Verbeet

Reputation: 1816

test whether coefficients in quantile regression model differ from each other significantly

I have a quantile regression model, where I am interested in estimating effects for the .25, .5, and .875 quantile. The coefficients in my model differ from each other in a way that is in line with the substantive substantive theory underlying my model.

The next step is to test whether the coefficient of a particular explanatory variable for one quantile differs significantly from the estimated coefficient for another quantile. How do I test that? Further, I also want to test whether the coefficient for that variable for a given quantile differs significantly from the estimnate in a OLS model. How do I do that?

I am interested in any answer, although I would prefer an answer that involves R. Here's some test code: (NOTE: this is not my actual model or data, but is an easy example as the data is available in the R installation)

data(airquality)
library(quantreg)
summary(rq(Ozone ~ Solar.R + Wind + Temp, tau = c(.25, .5, .75), data = airquality, method = "br"), se = "nid")

tau: [1] 0.25

Coefficients:
            Value     Std. Error t value   Pr(>|t|) 
(Intercept) -69.92874  12.18362   -5.73957   0.00000
Solar.R       0.06220   0.00917    6.77995   0.00000
Wind         -2.63528   0.59364   -4.43918   0.00002
Temp          1.43521   0.14363    9.99260   0.00000

Call: rq(formula = Ozone ~ Solar.R + Wind + Temp, tau = c(0.25, 0.5, 
    0.75), data = airquality, method = "br")

tau: [1] 0.5

Coefficients:
            Value     Std. Error t value   Pr(>|t|) 
(Intercept) -75.60305  23.27658   -3.24803   0.00155
Solar.R       0.03354   0.02301    1.45806   0.14775
Wind         -3.08913   0.68670   -4.49853   0.00002
Temp          1.78244   0.26067    6.83793   0.00000

Call: rq(formula = Ozone ~ Solar.R + Wind + Temp, tau = c(0.25, 0.5, 
    0.75), data = airquality, method = "br")

tau: [1] 0.75

Coefficients:
            Value     Std. Error t value   Pr(>|t|) 
(Intercept) -91.56585  41.86552   -2.18714   0.03091
Solar.R       0.03945   0.04217    0.93556   0.35161
Wind         -2.95452   1.17821   -2.50764   0.01366
Temp          2.11604   0.45693    4.63103   0.00001

and the OLS model:

summary(lm(Ozone ~ Solar.R + Wind + Temp, data = airquality))

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -64.34208   23.05472  -2.791  0.00623 ** 
Solar.R       0.05982    0.02319   2.580  0.01124 *  
Wind         -3.33359    0.65441  -5.094 1.52e-06 ***
Temp          1.65209    0.25353   6.516 2.42e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 21.18 on 107 degrees of freedom
  (42 observations deleted due to missingness)
Multiple R-squared:  0.6059,    Adjusted R-squared:  0.5948 
F-statistic: 54.83 on 3 and 107 DF,  p-value: < 2.2e-16

(don't worry about the actual model estimated above, this is just for illustrative purposes) How now to test whether, for example, the coefficient for Temp differs statistically significantly (at some give level) between quantiles .25 and .75 and whether the coefficient at the .25 quantile for Temp differs significantly from the OLS coefficient for Temp?

Answers welcome in R or those that focus on the statistical approach.

Upvotes: 3

Views: 2886

Answers (1)

Raad
Raad

Reputation: 2715

For quantile regression, I generally prefer visual inspection.

data(airquality)
library(quantreg)

q <- rq(Ozone ~ Solar.R + Wind + Temp, tau = 1:9/10, data = airquality)
plot(summary(q, se = "nid"), level = 0.95)

The dotted red lines are the 95% confidence interval for linear regression and the shaded grey area is the 95% confidence interval for each of the quantreg estimates.

In the plot below, we can visualize that the quantreg estimates are within the bounds of the linear regression estimates which suggests that there may not be a statistically significant difference. enter image description here

You can further test whether the differences in the coefficients are statistically significant using anova. See ?anova.rq for more details.

q50 <- rq(Ozone ~ Solar.R + Wind + Temp, tau = 0.5, data = airquality)
q90 <- rq(Ozone ~ Solar.R + Wind + Temp, tau = 0.9, data = airquality)
anova(q50, q90)

Upvotes: 5

Related Questions