分位数回归--基于R

article/2025/9/21 23:38:49

分位数回归

分位数回归是估计一组回归变量X与被解释变量Y的分位数之间线性关系的建模方法。以往的回归模型实际上是研究被解释变量的条件期望。而人们也关心解释变量与被解释变量分布的中位数、分位数呈何种关系。它最早由Koenker和Bassett(1978)提出。OLS回归估计量的计算是基于最小化残差平方。分位数回归估计量的计算也是基于一种非对称形式的绝对值残差最小化。
在这里插入图片描述
当我们使用0.9分位数回归,重新得出新函数图像如左图上:
可以看到,这比起普通的回归分析,就能进一步显示出y的变化幅度其实是增大了。所谓的0.9分位数回归,就是希望回归曲线之下能够包含90%的数据点(y),这也是分位数的概念。
在这里插入图片描述
当然,我们仅仅得到0.9分位数回归曲线是不够的,进一步的我们可以画出不同的分位数回归曲线,这样才能能更加明显地反映出,随着x的增大,y的不同范围的数据是不同程度地变化的。

分位数回归优点

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

案例

用的是R自带的数据集engel
library(quantreg)#使用包quantreg
data(engel)
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
包含自变量income ,因变量foodexp

建模使用函数rq
rq(foodexp~income,tau = 1:49/50,data=engel)
其中tau为自己设置的分位数,当设置为-1时,所有分位数的结果全部显示出来
rq1 = rq(foodexp~income,data = data,tau = -1)
summary.rq(rq1)
rq1$sol[4:5,]#4,5行是各个分位数的截距、斜率

在这里插入图片描述
在这里插入图片描述
完整代码:
先看tau取值 1:49/50
library(quantreg);data(engel)
head(engel)
plot(summary(rq(foodexp~income,tau = 1:49/50,data=engel)))

library(quantreg);data(engel)
par(mfrow=c(1,2))
plot(foodexp ~ income, data = engel, main = “engel data”)#产生散点图
taus <- c(.15, .25, .50, .75, .95, .99)#选择6个tau参数
rqs <- as.list(taus)#构造和taus一样多元素的list来存储回归结果
for(i in seq(along = taus)) { #对每个tau做分位数回归并画图
rqs[[i]]=rq(foodexp~income, tau=taus[i],data=engel)
lines(engel$income, fitted(rqs[[i]]), col = i+1)}
legend(“bottomright”, paste("tau = ", taus), inset = .04,
col = 2:(length(taus)+1), lty=1)

#重复上面(把foodexp换成log10(foodexp)):
plot(log10(foodexp) ~ log10(income), data = engel,
main = “engel data (log10 - tranformed)”)
for(i in seq(along = taus)) {
rqs[[i]]=rq(log10(foodexp)~log10(income),
tau=taus[i],data=engel)
lines(log10(engel$income), fitted(rqs[[i]]), col = i+1)}
legend(“bottomright”, paste("tau = ", taus), inset = .04,
col = 2:(length(taus)+1), lty=1)

#tau=-1:取(0,1)中的密集的tau(这里271个回归, 结果在z中):
library(quantreg);data(engel);attach(engel)
z <- rq(foodexp~income,tau=-1,engel)#最密集的回归
#下面取贫富两个income值(x值):
x.poor=quantile(income,.05);x.rich=quantile(income,.95)
#下面算出贫富的income对所有tau斜率和截距的拟合值(各271个):
qs.poor <- c(c(1,x.poor)%*%zKaTeX parse error: Expected 'EOF', got '#' at position 11: sol[4:5,])#̲用公式x'b计算拟合值 qs.…sol[4:5,])#%5分位点算出的271个y值
#上面z s o l [ 4 : 5 , ] 为 z 中 相 应 于 不 同 分 位 数 的 斜 率 和 截 距 p s < − z sol[4:5,]为z中相应于不同分位数的斜率和截距 ps <- z sol[4:5,]zps<zsol[1,]#tau值
ps.wts <- (c(0,diff(ps)) + c(diff(ps),0)) / 2
ap <- akj(qs.poor, z=qs.poor, p = ps.wts)#akj: 自适应核密度估计
ar <- akj(qs.rich, z=qs.rich, p = ps.wts)
#ap d e n s 与 a r dens与ar densardens为两个密度估计
#下面是画图程序
par(mfrow = c(1,2))
plot(c(ps,ps),c(qs.poor,qs.rich), type=“n”, xlab = expression(tau), ylab = “foodexp”)
plot(stepfun(ps,c(qs.poor[1],qs.poor)),do.points=F,add=T)
plot(stepfun(ps,c(qs.rich[1],qs.rich)),do.points=F,add=T,lty=2)
legend(“topleft”, c(“poor”,“rich”), lty = c(1,2))
plot(c(qs.poor,qs.rich),c(ap d e n s , a r dens,ar dens,ardens),type=“n”,xlab= “FoodExpenditure”, ylab= “Density”)
lines(qs.poor, ap d e n s ) l i n e s ( q s . r i c h , a r dens) lines(qs.rich, ar dens)lines(qs.rich,ardens,lty=2)
legend(“topright”, c(“poor”,“rich”), lty = c(1,2))


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

相关文章

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

分位数回归&#xff08;quantile regression&#xff09; 这一讲&#xff0c;我们谈谈分位数回归的知识&#xff0c;我想大家传统回归都经常见到。分位数回归可能大家见的少一些&#xff0c;其实这个方法也很早了&#xff0c;大概78年代就有了&#xff0c;但是那个时候这个理论…

分位数回归和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…