分位数回归(quantile regression)R实现

  • 一、基本介绍
  • 二、使用分位数回归的原因
  • 三、R 语言实现分位数回归

一、基本介绍

回归分析的主要目的:实证检验理论分析中因变量与自变量之间的关系。传统的均值回归,主要使用因变量的条件均值函数来描述在自变量每一个特定数值下的因变量的均值,从而揭示自变量与因变量的关系。

条件均值模型存在不足:当研究收入分配等问题时,我们可能主要关注的是处于分布低尾的穷人和分布高尾的富人等处于因变量非中心位置的情况,而 (1) 条件均值模型主要考虑的是因变量的均值,难以扩展到这种非中心位置,此时只能使用分位数模型进行估计。此外,(2) 条件均值模型经常受到离群值的困扰。在使用条件均值模型进行实证研究时,面对存在离群值的样本数据时,最常使用的方法是对数据进行缩尾,剔除离群值。然而,很多时候剔除离群值会导致对中心位置的测度具有误导性结论。尤其, (3) 条件均值模型假定残差项服从独立同分布、正态性、方差齐性等关键问题在现实中难以满足

因此,提出了中位数模型替代条件均值模型中位数是表示分布的中心位置,即0.5分位数。其他位置上的分位数则描述了一种分布的非中心位置。随着协变量的变化,分位数回归模型强调了条件分位数的变化由于所有分位数都是可用的,所以对任何预先决定的分布位置进行建模都是可能的。因此,可以对分布的任意非中心位置进行建模,可选的研究的问题也就变得更加广泛。例如贫困问题(对穷人进行研究)、收入分配问题(穷人与富人的收入),教育问题(好成绩与差成绩),税收问题(对穷人与富人的不同影响)等等。与条件均值模型相比,分位数回归则具有无法比拟的优势。

普通最小二乘估计(OLS)与分位数回归估计的异同

分位数回归是估计一组回归变量X与被解释变量Y的分位数之间线性关系的建模方法。以往的回归模型实际上是研究被解释变量的条件期望。而人们也关心解释变量与被解释变量分布的中位数、分位数呈何种关系。它最早由Koenker和Bassett(1978)提出。

OLS回归估计量的计算是基于最小化残差平方。分位数回归估计量的计算也是基于一种非对称形式的绝对值残差最小化。其中,中位数回归运用的是最小绝对值离差估计(LAD,least absolute deviations estimator)。

分位数回归的优点
(1) 能够更加全面的描述被解释变量条件分布的全貌,而不是仅仅分析被解释变量的条件期望(均值),也可以分析解释变量如何影响被解释变量的中位数、分位数等。不同分位数下的回归系数估计量常常不同,即解释变量对不同水平被解释变量的影响不同。
(2) 中位数回归的估计方法与最小二乘法相比,估计结果对离群值则表现的更加稳健,而且,分位数回归对误差项并不要求很强的假设条件,因此对于非正态分布而言,分位数回归系数估计量则更加稳健。

目前,分位数回归已经获得了巨大的发展,不仅可以进行简单的横断面数据的估计,而且还可以进行panel数据模型估计、干预效应模型估计、计数模型估计、因变量是区间值的logistic模型估计、工具变量估计等。

二、使用分位数回归的原因

大部分的计量模型都是在估计条件期望值,因为条件期望值是因变量最好的估计值。对于非连续变量,期望值本身已经能够很大程度上描述出随机变量的分布。但是对于连续变量,仅仅依靠期望值并不能完整描述出变量的分布形态。比如收入水平,中位数相比于平均数更有代表性。因为平均数容易受到异常值的影响,如果只考虑平均值,那么穷人就会被富人代表,一个国家的平均收入也许很高,但是这或许只能代表一小部分人,而中位数则能代表大部分普通人的真实收入。

下面这幅散点图反映了个人智商水平(IQ)和收入水平(wage)之间的关系,其中红线就是使用 OLS 进行线性回归得到的蓝线从上至下依次为 0.9 分位数、中位数、0.1 分位数的回归线。可以发现,对于前 10% 的收入群体,IQ 的增长对收入的边际效应更为明显。所以,使用分位数回归能够更加全面完整的分析因变量的条件分布

三、R 语言实现分位数回归

R语言进行分位数回归需要quantreg包,其中, rq()函数的用法和 lm() 类似,但是多了一个设定分位数的参数 tau,这个参数可以接受单个值,也可以接受向量值。plot() 函数则可以绘制不同分位数回归的系数值的折线图,和 OLS 线性回归的系数值做比较。

本文使用wooldridgeR包的示例数据集 wage2 进行解释说明,回归的因变量是收入水平 wageIQ某种程度上可以指代受访者的个人能力,educ 表示受访者的受教育年限,marriedblack 都分类变量,取值 1 表示受访者分别为已婚和黑裔。

首先只采用 IQ 作为自变量进行回归,分位数选取 [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]。

library(tidyverse)
library(wooldridge)
library(quantreg)
library(AER)### 查看分布
ggplot(data = wage2, mapping = aes(x = IQ, y = wage)) +geom_point() +geom_quantile(quantiles = c(0.1, 0.5, 0.9), size = 1) +geom_smooth(method = "lm", color = "red", se = F) +theme_bw()

### OLS回归
wage_lm1 <- lm(wage ~ IQ, data = wage2)
### 分位数回归
wage_qr1 <- rq(wage ~ IQ, data = wage2, tau = 1:9/10)### OLS回归和分位数回归线
ggplot(data = wage2, aes(x = IQ, y = wage)) +geom_point() +geom_abline(intercept = coef(wage_qr1)[1, ], slope = coef(wage_qr1)[2, ], color = "blue") +geom_abline(intercept = coef(wage_lm1)[1], slope = coef(wage_lm1)[2], color = "red") +theme_bw()

summary(wage_lm1)
# Call:
#   lm(formula = wage ~ IQ, data = wage2)
#
# Residuals:
#   Min     1Q Median     3Q    Max
# -898.7 -256.5  -47.3  201.1 2072.6
#
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)
# (Intercept) 116.9916    85.6415   1.366    0.172
# IQ            8.3031     0.8364   9.927   <2e-16 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 384.8 on 933 degrees of freedom
# Multiple R-squared:  0.09554, Adjusted R-squared:  0.09457
# F-statistic: 98.55 on 1 and 933 DF,  p-value: < 2.2e-16summary(wage_qr1)
wage_qr1
# Call:
#   rq(formula = wage ~ IQ, tau = 1:9/10, data = wage2)
#
# Coefficients:
#   tau= 0.1  tau= 0.2  tau= 0.3  tau= 0.4 tau= 0.5 tau= 0.6   tau= 0.7  tau= 0.8  tau= 0.9
# (Intercept) 100.846154 76.096774 33.333333 52.769231   87.500       81 187.958333 174.81633 214.65517
# IQ            4.173077  5.580645  6.933333  7.576923    8.125        9   9.041667  10.53061  11.93103
#
# Degrees of freedom: 935 total; 933 residual### 分位数回归和OLS回归系数对比图
plot(summary(wage_qr1), parm = "IQ")

上述回归只有一个变量 IQ,根据分位数回归结果可知,个人能力对收入水平的边际效应对于前 10% 的收入群体更为明显,回归系数的折线图直观反映了这一特点。比如对于 0.9 分位数回归,自变量系数为 11.93103,即个人能力每增长一个单位,0.9 分位数对应的工资水平增长约 11.93。图中的红色直线为 OLS 回归的系数估计值,红色虚线为估计值的置信区间。

下面我们将另外三个变量添加进 OLS 回归和分位数回归,和之前相比,个人能力对收入水平的边际效应有所降低。

wage_lm2 <- lm(wage ~ IQ + educ + married + black, data = wage2)
wage_qr2 <- rq(wage ~ IQ + educ + married + black, data = wage2, tau = 1:9/10)
summary(wage_lm2)
# Call:
#   lm(formula = wage ~ IQ + educ + married + black, data = wage2)
#
# Residuals:
#   Min      1Q  Median      3Q     Max
# -853.23 -247.90  -27.76  186.07 2081.80
#
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)
# (Intercept) -196.726    106.521  -1.847  0.06509 .
# IQ             3.944      1.002   3.935 8.94e-05 ***
#   educ          44.472      6.446   6.899 9.68e-12 ***
#   married      192.749     39.307   4.904 1.11e-06 ***
#   black       -124.086     39.344  -3.154  0.00166 **
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 370 on 930 degrees of freedom
# Multiple R-squared:  0.1662,  Adjusted R-squared:  0.1626
# F-statistic: 46.34 on 4 and 930 DF,  p-value: < 2.2e-16summary(wage_qr2)
wage_qr2
# Call:
#   rq(formula = wage ~ IQ + educ + married + black, tau = 1:9/10,
#      data = wage2)
#
# Coefficients:
#   tau= 0.1    tau= 0.2    tau= 0.3 tau= 0.4    tau= 0.5    tau= 0.6    tau= 0.7   tau= 0.8    tau= 0.9
# (Intercept)    30.00 -104.717514 -120.538462   -121.4 -168.230769 -206.190476 -254.484848 -380.45455 -476.949275
# IQ              2.00    3.028249    3.769231      3.6    4.153846    3.539683    4.139394    5.69697    6.963768
# educ           16.25   26.683616   26.038462     33.6   38.230769   50.333333   56.842424   60.94444   76.550725
# married        94.00  126.559322  161.692308    168.0  194.769231  222.126984  221.018182  238.93939  180.311594
# black         -74.00  -97.502825 -103.730769    -94.6 -118.846154 -141.809524 -141.521212 -124.66667  -37.985507
#
# Degrees of freedom: 935 total; 930 residualplot(summary(wage_qr2), parm = c("IQ", "educ", "married", "black"))


根据回归系数的折线图我们可知,educ对收入水平的边际效应随着分位数的增加而增加,也就是说对于高收入群体其边际效应更大一些。IQ 代表的个人能力虽然有所波动,但整体随着分位数向上。married 婚姻状态比较有意思的是对于处于社会财富前 10% 的收入群体,其边际效应并不是最高的。联想到前段时间离婚的某些富豪,好像也就不难理解了。black 的分位数回归系数曲线是这四个变量中最为特殊的,不论处于哪一个收入水平段,黑人族裔身份都会带来负面影响,并且在中产阶级中最为显著。

参考阅读:
【R语言】横截面数据分位数回归简介
【R语言】生存分析, 用R语言进行分位数回归(Quantile Regression)
【Stata+R】分位数回归一文读懂
【Stata】分位数回归
【Stata】qregplot:分位数回归图示
【SPSS】分位数回归[Quantile regression]

分位数回归(quantile regression)R实现相关推荐

  1. R语言分位数回归Quantile Regression分析租房价格

    全文链接:http://tecdat.cn/?p=18422 本文想在R软件中更好地了解分位数回归优化.在查看分位数回归之前,让我们从样本中计算中位数或分位数(点击文末"阅读原文" ...

  2. 【regression】分位数回归 quantile regression

    quantile regression --python实现 前言 分位数回归可调用的库 1. scikit-learn 2. statsmodels quantile loss function - ...

  3. R中怎么做加权最小二乘_Stata+R:分位数回归一文读懂

    NEW!连享会·推文专辑: Stata资源 | 数据处理 | Stata绘图 | Stata程序 结果输出 | 回归分析 | 时间序列 | 面板数据 | 离散数据 交乘调节 | DID | RDD   ...

  4. 用R语言的quantreg包进行分位数回归

    什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...

  5. Stata分位数回归I:理解边际效应和条件边际效应

    全文阅读:Stata分位数回归I:理解边际效应和条件边际效应| 连享会主页 目录 1. 简介 2. 从线性回归模型开始 3. 三种边际效应解释 3.1 个体效应--对 "我" 来说 ...

  6. R构建分位数回归模型(Quantile Regression)

    R构建分位数回归模型(Quantile Regression) 目录 R构建分位数回归模型(Quantile Regression) 数据集 分位数回归模型

  7. R语言构建分位数回归(Quantile Regression)并计算R方指标实战

    R语言构建分位数回归(Quantile Regression)并计算R方指标实战 目录 R语言构建分位数回归(Quantile Regression)并计算R方指标实战 R方指标 调整的R方指标

  8. 多项式回归、分位数回归(Quantile Regression)、保序回归(Isotonic Regression)、RANSAC回归、核岭回归、基准回归模型(baseline)

    多项式回归.分位数回归(Quantile Regression).保序回归(Isotonic Regression).RANSAC回归.核岭回归.基准回归模型(baseline) 目录

  9. 分位数回归(Quantile Regression)代码解析

    实验代码 本文采用python sklearn库中,作为quantile regression的示例代码.以下为详细解析: import numpy as np import matplotlib.p ...

  10. 分位数回归(Quantile regression)笔记

    分位数回归(Quantile regression)是在给定 X \mathbf{X} X的条件下估计 y \mathbf{y} y的中位数或其他分位数, 这是与最小二乘法估计条件均值最大的不同. 分 ...

最新文章

  1. 【微信小程序企业级开发教程】生命周期和app对象详解
  2. HBase常用功能和HBase+MapReduce使用总结
  3. oracle 大字段clob检索
  4. MVP open day 2009 (二)
  5. vim 批量注释代码
  6. APL开发日志--2012-11-18
  7. 运算放大器基本公式_运算放大器 - 产生的背景和解决的问题
  8. 调用阿里云接口实现短信消息的发送源码——CSDN博客
  9. 操作系统真实的虚拟内存是什么样的
  10. 事务的隔离级别 mysql
  11. 苹果召回6.3万台MacBook Pro;罗永浩回应“收购苹果”;新版Edge支持Windows 7/8 | 极客头条...
  12. python制作词云图设置停用词,Python生成词云图
  13. odbc数据库access丢失_有关使用access数据库,odbc中碰到的一些问题。
  14. SDL如何嵌入到QT中?!
  15. java游戏开发教程_JAVA快速开发游戏代码实现 aide教程
  16. 蚂蚁金服自研架构 SOFA 背后的工程师|1024快乐
  17. 在线LOGO的设计工具推荐
  18. 【阶段二】Python数据分析Pandas工具使用07篇:探索性数据分析:数据的描述:数据的集中趋势
  19. 华为linux版本wifi驱动,Ubuntu安装无线网卡驱动 Wifi/BT BCM4330 (AP6383)
  20. 常微分方程的数值解-欧拉、四阶龙格-库塔法等C语言

热门文章

  1. Android APP登录界面
  2. 如何实现自己的股票量化交易接口?
  3. pcb 受潮_PCB受潮影响性能有什么好的处理方法?
  4. 【案例分析】PCB行业产业服务平台开发案例分析
  5. 牛蛙怎么做好吃 牛蛙的家常做法
  6. 02-若依权限管理子系统简介(自己了解)
  7. 【JZOJ 6080】【GDOI2019模拟2019.3.23】IOer
  8. 基础-02-日语单词的词性与分类
  9. html边框流动效果,采用css实现流动的边框
  10. 【数字信号处理】数字信号处理简介 ( 数字信号处理技术 | 傅里叶变换 )