Cieľom tohto Notebooku je predstaviť kvantilovú regresiu.
Táto metóda je užitočná, keď nechceme opísať iba priemerný vplyv vysvetľujúcej premennej na závislú premennú, ale aj to, ako sa tento vplyv líši pre pozorovania nachádzajúce sa v rôznych častiach podmieneného rozdelenia závislej premennej. Napríklad namiesto otázky:
Ako \(x\) ovplyvňuje priemer hodnoty \(y\)?
sa môžeme opýtať:
Ako \(x\) ovplyvňuje 10. percentil, medián alebo 90. percentil hodnoty \(y\)?
Toto je obzvlášť užitočné, keď:
V klasickej lineárnej regresii odhadovanej metódou OLS modelujeme podmienený priemer:
\[ E(y_i \mid x_i) = \beta_0 + \beta_1 x_i. \]
Naproti tomu v kvantilovej regresii modelujeme podmienený kvantil:
\[ Q_{\tau}(y_i \mid x_i) = \beta_0(\tau) + \beta_1(\tau) x_i, \]
kde:
Namiesto odhadu jednej regresnej priamky pre podmienený priemer môžeme odhadnúť niekoľko regresných priamok pre rôzne časti rozdelenia.
Predpokladajme, že príjem ovplyvňuje výdavky domácností. OLS nám hovorí, ako príjem mení priemerné výdavky. Kvantilová regresia však môže ukázať, či má príjem:
Týmto spôsobom nám kvantilová regresia umožňuje študovať heterogenitu efektov.
Metóda najmenších štvorcov minimalizuje súčet druhých mocnín rezíduí:
\[ \min_{\beta} \sum_{i=1}^n (y_i - x_i'\beta)^2. \]
Kvantilová regresia používa inú funkciu strát, nazývanú kontrolná funkcia strát (alebo asymetrická absolútna strata):
\[ \min_{\beta} \sum_{i=1}^n \rho_{\tau}(y_i - x_i'\beta), \]
kde
\[ \rho_{\tau}(u) = u\big(\tau - I(u < 0)\big). \]
To znamená:
Dôležitým praktickým dôsledkom je, že kvantilová regresia je často odolnejšia voči odľahlým hodnotám v závislej premennej ako OLS.
OLS odpovedá na otázku:
O koľko sa zmení podmienený priemer premennej \(y\), keď sa premenná \(x\) zvýši o jednu jednotku?
Kvantilová regresia odpovedá na otázku:
O koľko sa zmení podmienený \(\tau\)-kvantil premennej \(y\), keď sa premenná \(x\) zvýši o jednu jednotku?
Koeficient sklonu v kvantilovej regresii sa preto interpretuje podobne ako metóda najmenších štvorcov (OLS), ale vzťahuje sa na konkrétny kvantil, a nie na priemer.
V nasledujúcom príklade generujeme údaje, v ktorých sa rozptyl premennej \(y\) zvyšuje s premennou \(x\). To znamená, že podmienené rozdelenie sa rozširuje pre vyššie hodnoty premennej \(x\). Toto je situácia, v ktorej je kvantilová regresia veľmi informatívna.
# install.packages("quantreg") # uncomment if needed
library(quantreg)
library(ggplot2)
library(dplyr)
set.seed(123)
n <- 300
x <- runif(n, 0, 10)
# Heteroskedastic data: variability grows with x
u <- rnorm(n, mean = 0, sd = 0.8 + 0.5 * x)
y <- 2 + 1.5 * x + u
data_qr <- data.frame(x = x, y = y)
head(data_qr)
## x y
## 1 2.875775 8.076534
## 2 7.883051 17.471011
## 3 4.089769 9.079732
## 4 8.830174 9.986489
## 5 9.404673 15.449741
## 6 0.455565 2.395162
ggplot(data_qr, aes(x = x, y = y)) +
geom_point(alpha = 0.6) +
labs(
title = "Simulované údaje pre kvantilovú regresiu",
x = "Vysvetľujúca premenná x",
y = "Vysvetľovaná premenná y"
) +
theme_minimal()
We first estimate the standard OLS model, and then quantile regressions for:
m_ols <- lm(y ~ x, data = data_qr)
m_q10 <- rq(y ~ x, tau = 0.10, data = data_qr)
m_q50 <- rq(y ~ x, tau = 0.50, data = data_qr)
m_q90 <- rq(y ~ x, tau = 0.90, data = data_qr)
summary(m_ols)
##
## Call:
## lm(formula = y ~ x, data = data_qr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11.1828 -1.9437 -0.0017 1.7881 13.5687
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.05825 0.42229 4.874 1.78e-06 ***
## x 1.49394 0.07372 20.264 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.577 on 298 degrees of freedom
## Multiple R-squared: 0.5795, Adjusted R-squared: 0.5781
## F-statistic: 410.6 on 1 and 298 DF, p-value: < 2.2e-16
summary(m_q10)
##
## Call: rq(formula = y ~ x, tau = 0.1, data = data_qr)
##
## tau: [1] 0.1
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 1.05638 0.83518 1.60419
## x 0.86295 0.63656 0.97183
summary(m_q50)
##
## Call: rq(formula = y ~ x, tau = 0.5, data = data_qr)
##
## tau: [1] 0.5
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 2.32488 2.07794 2.59917
## x 1.40400 1.35303 1.50171
summary(m_q90)
##
## Call: rq(formula = y ~ x, tau = 0.9, data = data_qr)
##
## tau: [1] 0.9
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 2.98539 2.54812 3.91652
## x 2.15588 1.90586 2.34556
coef_table <- rbind(
OLS = coef(m_ols),
Q10 = coef(m_q10),
Q50 = coef(m_q50),
Q90 = coef(m_q90)
)
coef_table
## (Intercept) x
## OLS 2.058254 1.4939386
## Q10 1.056384 0.8629467
## Q50 2.324878 1.4039984
## Q90 2.985390 2.1558783
Ak sa koeficienty sklonu líšia v rámci kvantilov, potom vplyv \(x\) nie je rovnomerný v rámci podmieneného rozdelenia \(y\).
Napríklad:
To naznačuje, že vplyv \(x\) je heterogénny.
ggplot(data_qr, aes(x = x, y = y)) +
geom_point(alpha = 0.5) +
geom_abline(
intercept = coef(m_ols)[1],
slope = coef(m_ols)[2],
linewidth = 1
) +
geom_abline(
intercept = coef(m_q10)[1],
slope = coef(m_q10)[2],
linetype = "dashed",
color = "blue",
linewidth = 1
) +
geom_abline(
intercept = coef(m_q50)[1],
slope = coef(m_q50)[2],
linetype = "dotdash",
color = "green",
linewidth = 1
) +
geom_abline(
intercept = coef(m_q90)[1],
slope = coef(m_q90)[2],
linetype = "longdash",
color = "red",
linewidth = 1
) +
labs(
title = "Vyrovnané priamky OLS a kvanilových regresií",
subtitle = "čierna = OLS, Modrá, zelená, červená - Q10,Q50, Q90",
x = "x",
y = "y"
) +
theme_minimal()
Veľmi často chceme odhadnúť celú sadu kvantilov. Napríklad od 10. do 90. percentilu.
taus <- seq(0.1, 0.9, by = 0.1)
m_many <- rq(y ~ x, tau = taus, data = data_qr)
summary(m_many)
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.1
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 1.05638 0.83518 1.60419
## x 0.86295 0.63656 0.97183
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.2
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 1.32109 0.64882 1.91774
## x 1.14242 0.92742 1.22773
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.3
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 1.65101 1.11134 1.85084
## x 1.24082 1.16062 1.38763
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.4
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 1.91165 1.40716 2.46532
## x 1.38161 1.20784 1.44957
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.5
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 2.32488 2.07794 2.59917
## x 1.40400 1.35303 1.50171
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.6
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 2.47811 2.02466 2.79854
## x 1.51904 1.41448 1.64766
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.7
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 2.56724 2.33806 3.04354
## x 1.66664 1.58339 1.83000
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.8
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 2.64593 2.31301 3.30625
## x 1.92603 1.69915 2.07245
##
## Call: rq(formula = y ~ x, tau = taus, data = data_qr)
##
## tau: [1] 0.9
##
## Coefficients:
## coefficients lower bd upper bd
## (Intercept) 2.98539 2.54812 3.91652
## x 2.15588 1.90586 2.34556
coef_many <- data.frame(
tau = taus,
intercept = coef(m_many)[1, ],
slope = coef(m_many)[2, ]
)
coef_many
## tau intercept slope
## tau= 0.1 0.1 1.056384 0.8629467
## tau= 0.2 0.2 1.321093 1.1424229
## tau= 0.3 0.3 1.651011 1.2408208
## tau= 0.4 0.4 1.911652 1.3816066
## tau= 0.5 0.5 2.324878 1.4039984
## tau= 0.6 0.6 2.478112 1.5190388
## tau= 0.7 0.7 2.567240 1.6666354
## tau= 0.8 0.8 2.645930 1.9260282
## tau= 0.9 0.9 2.985390 2.1558783
ggplot(coef_many, aes(x = tau, y = slope)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
geom_hline(yintercept = coef(m_ols)[2], linetype = "dashed") +
labs(
title = "Sklon koeficientu naprieč kvantilmi",
subtitle = "čiarkovaná horizontálna čiara = OLS sklon",
x = "Quantile (tau)",
y = "Odhadnuté sklony regresných koeficientov"
) +
theme_minimal()
Tento graf je veľmi užitočný pre výučbu, pretože ukazuje, či sa vplyv \(x\) mení v rámci rozdelenia \(y\).
Predpokladajme, že pre \(\tau = 0,90\) je odhadovaný sklon \(1,9\). Potom je interpretácia:
Zvýšenie \(x\) o jednu jednotku je spojené so zvýšením približne o 1,9 jednotky v podmienenom 90. percentile \(y\).
Toto nie je to isté ako tvrdenie, že 90 % pozorovaní sa zvýši o 1,9 jednotky. Toto tvrdenie sa vzťahuje na podmienený kvantil závislej premennej.
Hlavné výhody:
Poskytuje bohatší pohľad na vzťah medzi premennými.
Je užitočná pri heteroskedasticite.
Je informatívna, keď sa vplyv líši v rámci rozdelenia.
Je menej citlivá na odľahlé hodnoty v závislej premennej ako OLS.
Nevyžaduje normalitu rezíduí rovnakým spôsobom ako mnohé klasické postupy založené na OLS.
Treba spomenúť aj niektoré obmedzenia:
Interpretácia je náročnejšia ako v OLS.
Výsledky v extrémnych kvantiloch môžu byť v malých vzorkách menej stabilné.
Kvantilná regresia je užitočným rozšírením klasickej regresnej analýzy. Zatiaľ čo OLS sa zameriava na podmienený priemer, kvantilová regresia nám umožňuje študovať celé podmienené rozdelenie závislej premennej.
Je obzvlášť cenná, keď:
Ak chcete, môžete kvantilovú regresiu demonštrovať aj na reálnom
súbore údajov. Balík quantreg obsahuje súbor údajov
engel o výdavkoch a príjmoch na potraviny.
data(engel, package = "quantreg")
head(engel)
## income foodexp
## 1 420.1577 255.8394
## 2 541.4117 310.9587
## 3 901.1575 485.6800
## 4 639.0802 402.9974
## 5 750.8756 495.5608
## 6 945.7989 633.7978
m_engel_ols <- lm(foodexp ~ income, data = engel)
m_engel_q25 <- rq(foodexp ~ income, tau = 0.25, data = engel)
m_engel_q50 <- rq(foodexp ~ income, tau = 0.50, data = engel)
m_engel_q75 <- rq(foodexp ~ income, tau = 0.75, data = engel)
rbind(
OLS = coef(m_engel_ols),
Q25 = coef(m_engel_q25),
Q50 = coef(m_engel_q50),
Q75 = coef(m_engel_q75)
)
## (Intercept) income
## OLS 147.47539 0.4851784
## Q25 95.48354 0.4741032
## Q50 81.48225 0.5601806
## Q75 62.39659 0.6440141
V aplikovanej ekonometrii sa kvantilová regresia často používa pri analýze:
Jej hlavnou silnou stránkou je, že umožňuje ekonometrovi povedať nielen čo sa deje v priemere, ale aj čo sa deje v rôznych častiach rozdelenia.