基于R语言的分位数回归(quantile regression)

article/2025/9/21 21:51:35

分位数回归(quantile regression)
这一讲,我们谈谈分位数回归的知识,我想大家传统回归都经常见到。分位数回归可能大家见的少一些,其实这个方法也很早了,大概78年代就有了,但是那个时候这个理论还不完善。到2005年的时候,分位数回归的创立者Koenker R写了一本分位数回归的专著,剑桥大学出版社出版的。今年本来老爷子要出一本《handbook of quantile regression》,还没有正式出来呢,目前来看,分位数回归应用的范围非常广。在金融领域尤为重要。下面先给大家简单介绍一下,分位数回归的基本原理,完后拿R做一个完整的案例。为什么拿R软件,因为分位数回归的发明者最早拿R写了一个包,叫quantreag,是当时唯一一个分位数回归的包,现在的话,看到python,julia也有相关的包了。但是感觉这个R的还是最好的。
那么什么是分位数回归呢,这个就要从传统的回归说起,传统回归呢,一般叫最小二乘回归,也叫均值回归。这个均值是指条件均值。比较抽象,在前面有一篇博文中,我比较详细地解释过。那么分位数回归就是均值回归的拓展,也就是它可以拟合均值以外的其它分位点,形成多条回归线,这里首先需要强调的是分位数回归的分位点是指因变量y的分位点,不是x的。这样我们如果设定多个分位点就得到了多条回归直线。当然分位数回归现在也发展出来非线性分位数回归,就是可以拟合出多条曲线,或者和广义线性回归模型一样可以适用二值变量。要说分位数回归具体的原理,后面有空再细谈。下面我们拿R语言做一个案例,大家就可以逐渐感受到分位数回归具体的含义了。案例所用的数据呢,大家应该都比较熟悉,就是收入和食品消费支出的数据,下面看代码。

#导入分位数回归的包
library(quantreg)                         
# 引入数据
data(engel)
#查看数据格式
mode(engel)
[1] "list"
#查看变量名
names(engel)
[1] "income"  "foodexp"
#查看格式
class(engel)
[1] "data.frame"
#查看数据的前五行
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
#画个散点图看看数据
plot(engel$income, engel$foodexp, xlab='income', ylab='foodexp')

图是这样的
原始数据散点图
下面我们继续简单查看一下数据

#查看foodexp的变化范围
boxplot(engel$foodexp, xlab='foodexp')
#简单验证一下因变量foodexp是否服从正态分布
qqnorm(engel$foodexp, main='QQ plot')
qqline(engel$foodexp, col='red', lwd=2)

结果如下:
foodexp变化范围
下面是QQ图
QQ图
结果表明,因变量y明显不服从正态分布,但是呢,分位数回归不要求y服从正态分布,不仅如此,而且分位数回归还对异常值点不敏感。下面我们继续,为了对比,我们仍然做一个均值回归,再做一个分位数回归。

#可以直接调用数据框里变量
attach(engel)
#设置0.05, 0.25, 0.5, 0.75, 0.95五个分位点,并且进行分位数回归,这样可以得到五条分位数回归线
rq_result <- rq(foodexp ~ income, tau=c(0.05, 0.25, 0.5, 0.75, 0.95))
summary(rq_result)
Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95))tau: [1] 0.05Coefficients:coefficients lower bd  upper bd 
(Intercept) 124.88004     98.30212 130.51695
income        0.34336      0.34333   0.38975Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95))tau: [1] 0.25Coefficients:coefficients lower bd  upper bd 
(Intercept)  95.48354     73.78608 120.09847
income        0.47410      0.42033   0.49433Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95))tau: [1] 0.5Coefficients:coefficients lower bd  upper bd 
(Intercept)  81.48225     53.25915 114.01156
income        0.56018      0.48702   0.60199Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95))tau: [1] 0.75Coefficients:coefficients lower bd  upper bd 
(Intercept)  62.39659     32.74488 107.31362
income        0.64401      0.58016   0.69041Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95))tau: [1] 0.95Coefficients:coefficients lower bd upper bd
(Intercept) 64.10396     46.26495 83.57896
income       0.70907      0.67390  0.73444
#上面就是没条回归线的回归系数,我们做个图看一下
plot(income, foodexp, cex=0.25, type='n', xlab='income', ylab='foodexp')
points(income, foodexp, cex=0.5, col='blue')
#加中位数数回归的直线
abline(rq(foodexp~income, tau=0.5), col='blue')
#加均值回归的五条直线
abline(lm(foodexp~income), lty=2, col='red')
#将分位数回归的五条线加上去
taus <- c(0.05, 0.1, 0.25, 0.75, 0.9, 0.95)
#
for (i in 1:length(taus)){abline(rq(foodexp~income, tau=taus[i]), col='gray')
}

效果如下:
效果图
从上图,我们可以看到,分位数回归可以拟合出多条直线,这个对于我们数据分布比较复杂的时候,很有用处,每条线反应了不同档次下,自变量与因变量的关系。实际上这个只是分位数回归的一小部分应用,得到不同分位点下的数据,我们还可以进行概率密度估计,得到相应的概率密度预测。
这一讲我们就到这。


http://chatgpt.dhexx.cn/article/KcD7kkc6.shtml

相关文章

分位数回归和stata

分位数回归与stata 找了半天也没找到我想看的那种完整点的stata教程&#xff0c;只好自己写一个了… 参考教材&#xff1a;《用STATA学微观计量经济学》&《高级计量经济学及STATA应用_第2版》 第一部分 纯理论 更加详细的百度吧&#xff0c;很长很长&#xff0c;这里主要是…

分位数回归的求解

分位数回归 分位数回归实际上是一种特殊的 ℓ 1 \ell_1 ℓ1​回归问题&#xff0c;特别地&#xff0c;当所求分位数 τ 0.5 \tau0.5 τ0.5时就是中位数回归。 1 线性规划 1.1 将分位数回归看做是线性规划问题来求解 一般的&#xff0c;线性回归问题可以写为 ℓ p \ell_p ℓ…

分位数回归模型学习笔记

我读硕士老师给我的第一篇论文就是一个分位数回归的文章&#xff0c;当时觉得这个模型很简单&#xff0c;我很快就用R的示例文件写了一个例子&#xff0c;但是&#xff0c;在后面的研究中&#xff0c;我越来越觉得&#xff0c;这个模型没有我想的那么简单&#xff0c;而且有着非…

Python统计学11——分位数回归

分位数回归也是数理统计里面经典的模型&#xff0c;他相对于在最小二乘模型上进行了改进&#xff0c;虽然本身还是线性的参数模型&#xff0c;但对损失函数进行了改进。我们都知道最小二乘的损失函数是均方误差最小&#xff0c;分位数的损失函数是&#xff1a; 可以看到分位数损…

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

分位数回归&#xff08;quantile regression&#xff09;R实现 一、基本介绍二、使用分位数回归的原因三、R 语言实现分位数回归 一、基本介绍 回归分析的主要目的&#xff1a;实证检验理论分析中因变量与自变量之间的关系。传统的均值回归&#xff0c;主要使用因变量的条件均…

分位数回归(Stata)

基于分位数回归的成都空气质量指数的数据分析 空气质量指数计算公式为&#xff1a; &#xff08;1&#xff09;线性回归模型得到的是一种条件均值&#xff0c;并未考虑到因变量总体上的分布特征&#xff0c;在需要了解因变量位置&#xff08;分位数&#xff09;上的信息时&…

分位数回归—R语言实现

大家好&#xff0c;我是带我去滑雪&#xff0c;每天教你一个小技巧&#xff01; 分位数回归—R语言实现 1、分位数基本介绍——什么是分位数&#xff1f; 2、分位数回归用途——为什么要使用分位数回归&#xff1f; 3、图形分析——如何进行分位数回归图像分析&#xff1f; …

分位数回归-Quantile regression

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

分位数回归(Quantile regression)笔记

分位数回归&#xff08;Quantile regression&#xff09;是在给定 X \mathbf{X} X的条件下估计 y \mathbf{y} y的中位数或其他分位数&#xff0c; 这是与最小二乘法估计条件均值最大的不同。 分位数回归也是一种线性回归&#xff0c;它为第 q q q个分位数&#xff08; q ∈ ( …

分位数回归(quantile regression)简介和代码实现

普通最小二乘法如何处理异常值&#xff1f; 它对待一切事物都是一样的——它将它们平方&#xff01; 但是对于异常值&#xff0c;平方会显著增加它们对平均值等统计数据的巨大影响。 我们从描述性统计中知道&#xff0c;中位数对异常值的鲁棒性比均值强。 这种理论也可以在预测…

分位数回归(Quantile Regression)

在介绍分位数回归之前&#xff0c;先重新说一下回归分析&#xff0c;我们之前介绍了线性回归、多项式回归等等&#xff0c;基本上&#xff0c;都是假定一个函数&#xff0c;然后让函数尽可能拟合训练数据&#xff0c;确定函数的未知参数。尽可能拟合训练数据&#xff0c;一般是…

C语言最全函数大全

以下图片以字母顺序排列&#xff0c;语法着色版本。 每个函数包含函数名&#xff0c;功能&#xff0c;用法&#xff0c;举例...

C语言函数大全-- s 开头的函数(2)

s 开头的函数&#xff08;2&#xff09; 1. setlinestyle1.1 函数说明1.2 演示示例1.3 运行结果 2. setmem2.1 函数说明2.2 演示示例 3. setmode3.1 函数说明3.2 演示示例3.3 运行结果 4. setpalette4.1 函数说明4.2 演示示例4.3 运行结果 5. setrgbpalette5.1 函数说明5.2 演示…

C语言函数大全-- i 开头的函数

i 开头的函数 1. imagesize1.1 函数说明1.2 演示示例1.3 运行结果 2. initgraph2.1 函数说明2.2 演示示例2.3 运行结果 3. inport3.1 函数说明3.2 演示示例 4. insline4.1 函数说明4.2 演示示例 5. installuserdriver5.1 函数说明5.2 演示示例 6. installuserfont6.1 函数说明6…

函数 C语言】

函数的声明和定义 函数间调用关系是&#xff0c;由于函数调用其他函数&#xff0c;替他函数也可以互相调用&#xff0c;同一个函数可以被一个或多个函数调用任意次。 先声明&#xff0c;后调用。 #include <stdio.h> //去标准库下找文件 #include "stdio.h"…

【C语言】函数详解

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️专栏&#xff1a;✈️C语言快速入门       &#x1f6f0;️欢迎关注&#xff1a;&#x1f44d;点…

C语言函数大全-- s 开头的函数(1)

s 开头的函数&#xff08;1&#xff09; 1. sbrk1.1 函数说明1.2 演示示例 2. scalb&#xff0c;scalbf&#xff0c;scalbl2.1 函数说明2.2 演示示例 3. scalbln&#xff0c;scalblnf&#xff0c;scalblnl3.1 函数说明3.2 演示示例3.3 运行结果 4. scalbn&#xff0c;scalbnf&a…

【详解C语言】函数

文章目录 1. 函数是什么&#xff1f;2. C语言中函数的分类&#xff1a;1. 库函数&#xff1a;2. 自定义函数 3. 函数的参数3.1 实际参数&#xff08;实参&#xff09;3.2 形式参数&#xff08;形参&#xff09; 4. 函数的调用&#xff1a;4.1 传值调用4.2 传址调用4.3 练习 5. …

C语言函数介绍

1.字母的大小写转换-->islower() 2.快速排序函数-->qsort() 下面正式给大家介绍这两个函数 &#xff08;1&#xff09;islower() islower() 函数用来检测一个字符是否是小写字母。 在默认情况下&#xff0c;小写字母包括&#xff1a; a,b,c,d,e,f,g,h,i,j,k,l,m,n,o…

C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)

文章目录 C语言函数库:一. <ctype.h>二. <math.h>三. <stdio.h>四. <stdlib.h>五. <time.h>六. <string.h> 文档资料 C语言函数库: C语言的常用的标准头文件有 &#xff1a; <ctype.h>   <time.h>   <stdio.h> <…