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

什么是分位数回归

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

与传统的OLS只得到均值方程相比,分位数回归可以更详细地描述变量的统计分布。它是给定回归变量X,估计响应变量Y条件分位数的一个基本方法;它不仅可以度量回归变量在分布中心的影响,而且还可以度量在分布上尾和下尾的影响,因此较之经典的最小二乘回归具有独特的优势。众所周知,经典的最小二乘回归是针对因变量的均值(期望)的:模型反映了因变量的均值怎样受自变量的影响,

\(y=\beta X+\epsilon\)\(E(y)=\beta X\)

分位数回归的核心思想就是从均值推广到分位数。最小二乘回归的目标是最小化误差平方和,分位数回归也是最小化一个新的目标函数:
\(\min_{\xi \in \mathcal{R}} \sum \rho_{\tau}(y_i-\xi)\)

quantreg包

quantreg即:Quantile Regression,拥有条件分位数模型的估计和推断方法,包括线性、非线性和非参模型;处理单变量响应的条件分位数方法;处理删失数据的几种方法。此外,还包括基于预期风险损失的投资组合选择方法。

实例

library(quantreg)  # 载入quantreg包
data(engel)        # 加载quantreg包自带的数据集分位数回归(tau = 0.5)
fit1 = rq(foodexp ~ income, tau = 0.5, data = engel)         
r1 = resid(fit1)   # 得到残差序列,并赋值为变量r1
c1 = coef(fit1)    # 得到模型的系数,并赋值给变量c1summary(fit1)      # 显示分位数回归的模型和系数
`
Call: rq(formula = foodexp ~ income, tau = 0.5, data = engel)tau: [1] 0.5Coefficients:coefficients lower bd  upper bd 
(Intercept)  81.48225     53.25915 114.01156
income        0.56018      0.48702   0.60199
`summary(fit1, se = "boot") # 通过设置参数se,可以得到系数的假设检验
`
Call: rq(formula = foodexp ~ income, tau = 0.5, data = engel)tau: [1] 0.5Coefficients:Value    Std. Error t value  Pr(>|t|)
(Intercept) 81.48225 27.57092    2.95537  0.00344
income       0.56018  0.03507   15.97392  0.00000
`分位数回归(tau = 0.5、0.75)
fit1 = rq(foodexp ~ income, tau = 0.5, data = engel) 
fit2 = rq(foodexp ~ income, tau = 0.75, data = engel)模型比较
anova(fit1,fit2)    #方差分析
`   
Quantile Regression Analysis of Deviance TableModel: foodexp ~ income
Joint Test of Equality of Slopes: tau in {  0.5 0.75  }Df Resid Df F value    Pr(>F)    
1  1      469  12.093 0.0005532 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
`   
画图比较分析
plot(engel$foodexp , engel$income,pch=20, col = "#2E8B57",main = "家庭收入与食品支出的分位数回归",xlab="食品支出",ylab="家庭收入")
lines(fitted(fit1), engel$income,lwd=2, col = "#EEEE00")
lines(fitted(fit2), engel$income,lwd=2, col = "#EE6363")
legend("topright", c("tau=.5","tau=.75"), lty=c(1,1),col=c("#EEEE00","#EE6363"))

829106-20160804152758247-1032815619.jpg

不同分位点的回归比较
fit = rq(foodexp ~ income,  tau = c(0.05,0.25,0.5,0.75,0.95), data = engel)
plot( summary(fit))

829106-20160804153400309-426428549.png

多元分位数回归

data(barro)fit1 <- rq(y.net ~ lgdp2 + fse2 + gedy2 + Iy2 + gcony2, data = barro,tau=.25)
fit2 <- rq(y.net ~ lgdp2 + fse2 + gedy2 + Iy2 + gcony2, data = barro,tau=.50)
fit3 <- rq(y.net ~ lgdp2 + fse2 + gedy2 + Iy2 + gcony2, data = barro,tau=.75)
# 替代方式 fit <- rq(y.net ~ lgdp2 + fse2 + gedy2 + Iy2 + gcony2, method = "fn", tau = 1:4/5, data = barro)anova(fit1,fit2,fit3)             # 不同分位点模型比较-方差分析
anova(fit1,fit2,fit3,joint=FALSE)
`
Quantile Regression Analysis of Deviance TableModel: y.net ~ lgdp2 + fse2 + gedy2 + Iy2 + gcony2
Tests of Equality of Distinct Slopes: tau in {  0.25 0.5 0.75  }Df Resid Df F value  Pr(>F)  
lgdp2   2      481  1.0656 0.34535  
fse2    2      481  2.6398 0.07241 .
gedy2   2      481  0.7862 0.45614  
Iy2     2      481  0.0447 0.95632  
gcony2  2      481  0.0653 0.93675  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Warning message:
In summary.rq(x, se = se, covariance = TRUE) : 1 non-positive fis
`
不同分位点拟合曲线的比较
plot(barro$y.net,pch=20, col = "#2E8B57",main = "不同分位点拟合曲线的比较")
lines(fitted(fit1),lwd=2, col = "#FF00FF")
lines(fitted(fit2),lwd=2, col = "#EEEE00")
lines(fitted(fit3),lwd=2, col = "#EE6363")
legend("topright", c("tau=.25","tau=.50","tau=.75"), lty=c(1,1),col=c( "#FF00FF","#EEEE00","#EE6363"))

829106-20160804154816262-497922890.png

时间序列数据之动态线性分位数回归

library(zoo)
data("AirPassengers", package = "datasets")
ap <- log(AirPassengers)
fm <- dynrq(ap ~ trend(ap) + season(ap), tau = 1:4/5)
`
Dynamic quantile regression "matrix" data:
Start = 1949(1), End = 1960(12)
Call:
dynrq(formula = ap ~ trend(ap) + season(ap), tau = 1:4/5)Coefficients:tau= 0.2    tau= 0.4     tau= 0.6     tau= 0.8
(Intercept)    4.680165533  4.72442529  4.756389747  4.763636251
trend(ap)      0.122068032  0.11807467  0.120418846  0.122603451
season(ap)Feb -0.074408403 -0.02589716 -0.006661952 -0.013385535
season(ap)Mar  0.082349382  0.11526821  0.114939193  0.106390507
season(ap)Apr  0.062351869  0.07079315  0.063283042  0.066870808
season(ap)May  0.064763333  0.08453454  0.069344618  0.087566554
season(ap)Jun  0.195099116  0.19998275  0.194786890  0.192013960
season(ap)Jul  0.297796876  0.31034824  0.281698714  0.326054871
season(ap)Aug  0.287624540  0.30491687  0.290142727  0.275755490
season(ap)Sep  0.140938329  0.14399906  0.134373833  0.151793646
season(ap)Oct  0.002821207  0.01175582  0.013443965  0.002691383
season(ap)Nov -0.154101220 -0.12176290 -0.124004759 -0.136538575
season(ap)Dec -0.031548941 -0.01893221 -0.023048200 -0.019458814Degrees of freedom: 144 total; 131 residual
`
sfm <- summary(fm)
plot(sfm)

829106-20160804160848153-1319358267.png

不同分位点拟合曲线的比较
fm1 <- dynrq(ap ~ trend(ap) + season(ap), tau = .25)
fm2 <- dynrq(ap ~ trend(ap) + season(ap), tau = .50)
fm3 <- dynrq(ap ~ trend(ap) + season(ap), tau = .75)plot(ap,cex = .5,lwd=2, col = "#EE2C2C",main = "时间序列分位数回归")
lines(fitted(fm1),lwd=2, col = "#1874CD")
lines(fitted(fm2),lwd=2, col = "#00CD00")
lines(fitted(fm3),lwd=2, col = "#CD00CD")
legend("topright", c("原始拟合","tau=.25","tau=.50","tau=.75"), lty=c(1,1),col=c( "#EE2C2C","#1874CD","#00CD00","#CD00CD"),cex = 0.65)

829106-20160804161436887-496011338.png

除了本文介绍的以上内容,quantreg包还包含残差形态的检验、非线性分位数回归和半参数和非参数分位数回归等等,详细参见:用R语言进行分位数回归-詹鹏(北京师范大学经济管理学院)和Package ‘quantreg’。

反馈与建议

  • 作者:ShangFR
  • 邮箱:shangfr@foxmail.com

转载于:https://www.cnblogs.com/shangfr/p/5736738.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法—快速排序Sqrt (C语言)

/* 快速排序 */ #include"stdio.h" #include"stdlib.h" int compare(const void* a,const void* b) {return (*(int *)a-*(int *)b); }int main() {int i,a[]{32,29,59,8,22,68,89,77},n;nsizeof(a)/sizeof(a[0]);printf("排序前:\n");for(i0;i&…

常规单元测试和存根–测​​试技术4

我的上一个博客是有关测试代码的方法以及讨论您要做和不需要进行测试的方法的一系列博客中的第三篇。 它基于我使用一种非常常见的模式从数据库中检索地址的简单方案&#xff1a; …并且我提出了这样的想法&#xff1a;任何不包含任何逻辑的类都不需要进行单元测试。 在其中&am…

中微CMS32 Keil环境搭建

打开中微官网https://www.mcu.com.cn/Products/113/pids/.html 把这三个资料都下载好。 环境搭建需要用的就是第三个pack包了 坑爹的是pack包下载下来是.zip格式 下载好后需要修改为.pack格式 运行即可。 打开三个资料中的demo code的工程 target和device都能识别出 编…

Windows下sass无法编译

最近windows下使用sass老是出现各种莫名其买的问题&#xff0c;下面是我的一些解决办法 windows下编译sass不支持中文解决办法网上给的是 解决办法&#xff1a; 1.koala可视化编译工具&#xff0c; 找到安装目录里面sass-3.3.7模块下面的engine.rb文件&#xff0c;例如下面路径…

数据库面试中常用的10个问题

1&#xff0e;触发器的作用&#xff1f;答&#xff1a;触发器是一中特殊的存储过程&#xff0c;主要是通过事件来触发而被执行的。它可以强化约束&#xff0c;来维护数据的完整性和一致性&#xff0c;可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如&…

测试技巧–不编写测试

对此没有太多疑问&#xff0c;测试代码的方式是一个有争议的问题。 不同的测试技术因各种原因&#xff08;包括企业文化&#xff0c;经验和总体心理观点&#xff09;而受到不同开发人员的青睐。 例如&#xff0c;您可能更喜欢编写经典的单元测试&#xff0c;通过检查返回值来单…

Ubuntu镜像下载地址

https://mirrors.aliyun.com/ubuntu-releases/ 用迅雷下载速度挺快的

算法—实现排列 A(n,m)

/* 实现排列A&#xff08;n,m&#xff09;*/ #include "stdio.h" int m,n,a[30]; long s0; int main() {int p(int k);printf("input n(n<10):"); scanf("%d",&n);printf("input m(<1m<n):"); scanf("%d",&…

oracle忘记用户密码

在cmd命令行下输入sqlplus / as sysdba alter user system identified by abc; 就可以将system用户的密码改成abc了。 alter user sys identified by abc; sys用户的密码也改成abc了。 然后你再登录sqlplus: 转载于:https://www.cnblogs.com/zzlp/p/4936109.html

python初体验-hello world答案_Python初体验_基础(一)

一&#xff1a;变量 变量的赋值&#xff1a; name “Meng” 上述代码声明了一个变量&#xff0c;变量名为name&#xff0c;变量name的值为&#xff1a;”Meng“ 变量定义&#xff1a; 一个在内存存数据的容器。 变量的意义&#xff1a; 保存程序执行的中间结果或状态&#xff…

Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)

题目链接&#xff1a;http://codeforces.com/contest/703/problem/D 给你n个数&#xff0c;m次查询&#xff0c;每次查询问你l到r之间出现偶数次的数字xor和是多少。 我们可以先预处理前缀和Xor[i]&#xff0c;表示1~i的xor和。因为num^num0&#xff0c;所以Xor[r] ^ Xor[l - 1…

九齐NY8B072A单片机使用笔记(二)TIMER1/2/3定时器

先上代码 volatile unsigned long g_timer0_delay_conut 0;void main(void) {DISI(); //Disable all unmasked interruptsNy8b072a_Gpio_Init();//Ny8b072a_Timer1_Init();//Ny8b072a_Timer2_Init();Ny8b072a_Timer3_Init();ENI(); // Enable all unmasked interrupts whil…

新的Java缓存标准(javax.cache)

这篇文章探讨了新的Java缓存标准&#xff1a;javax.cache。 它如何适应Java生态系统 该标准由JSR107开发&#xff0c;作者是共同规范负责人。 JSR107包含在JSR342开发的Java EE 7中。 Java EE 7将于2012年底完成。但是与此同时&#xff0c;javax.cache将在Java SE 6和更高版本…

Eclipse搭建scala环境(解决“JDT weaving is currently disabled”问题)

随着Apache Spark&#xff0c;scala也成了必学的语言&#xff0c;下面讲一下Eclipse搭建scala开发环境。 网上有很多的教程&#xff0c;但是给的scala的地址下载的插件无法开发scala&#xff0c;会出现“JDT weaving is currently disabled”的问题,这是由于使用了错误的Scala地…

python如何输出结果_如何在python2.7中打印输出结果?

我正在存储一些数据&#xff0c;如温度&#xff0c;湿度和强度&#xff0c;这是我的Arduino输出和输入为我的python2.7&#xff0c;我正在绘制图表的数据。我也想将Arduino输出存储到文本文件中&#xff0c;但是我无法这样做&#xff1a; 这是我的python代码import serial impo…

python字符串连接的三种方法及其效率、适用场景详解

python字符串连接的方法&#xff0c;一般有以下三种:方法1&#xff1a;直接通过加号()操作符连接website& 39;python& 39;& 39;tab& 39;& 39; com& 39;方法2 python字符串连接的方法&#xff0c;一般有以下三种: 方法1&#xff1a;直接通过加号()操作符…

算法—递归实现 C(m,n)

/* 递归实现 C(m,n) */#include "stdio.h" int m,n,s,a[20];int main() {int c(int k);s0; a[0]0;scanf("%d%d",&m,&n);printf("\nC(%d,%d)%d\n",m,n,c(1));}//组合递归函数C(k) int c(int k) {int i,j;if(k<n){for(ia[k-1]1;i<m…

九齐51单片机使用注意事项:不要用float

在使用ADC计算电压值时用了float&#xff0c;NY8B072A堆栈直接炸了&#xff0c;用32机习惯了&#xff0c;一直想不通&#xff0c;查了手册才知道。 手册是&#xff1a;《NYC_NY8_UM_v1.5_SC.pdf》 链接&#xff1a;https://www.nyquest.com.tw/cn/support/download/Nyquest_SW…

有益的CountDownLatch和棘手的Java死锁

您是否曾经使用过java.util.concurrent.CountDownLatch &#xff1f; 这是在两个或多个线程之间实现同步的非常方便的类&#xff0c;在该类中&#xff0c;一个或多个线程可以等待&#xff0c;直到在其他线程中执行的一组操作完成为止&#xff08;请参阅javadoc和此文章 &#x…

算法—回溯法桥本分数式

/* 将1-9九个数不重复地赋给不同的9个元素 &#xff0c;实现形如a/bcd/eff/hi 的形式&#xff1a;例&#xff1a;1/265/784/39 1/325/967/84 &#xff08;注意&#xff1a;1/265/784/39 和5/781/264/39 只能算一种解&#xff09;求满足条件的解共有多少个&#xff1f; */ #in…