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

基于R语言的分位数回归(quantile regression)分位数回归 quantileregr 这一讲 我们谈谈分位数回归的知识 我想大家传统回归都经常见到 分位数回归可能大家见的少一些 其实这个方法也很早了 大概 78 年代就有了 但是那个时候这个理论还不完善 到 2005 年的时候 分位数回归的创立者 KoenkerR 写了一本分位数回归的专著 剑桥大学出版社出版的 今年本来老爷子要出一本 handbookofqu

分位数回归(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是否服从正态分布 norm(engel$foodexp, main=' plot') line(engel$foodexp, col='red', lwd=2)
#可以直接调用数据框里变量 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.05 Coefficients: coefficients lower bd upper bd (Intercept) 124.88004 98.30212 130.51695 income 0.34336 0.34333 0.38975 Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95)) tau: [1] 0.25 Coefficients: coefficients lower bd upper bd (Intercept) 95.48354 73.78608 120.09847 income 0.47410 0.42033 0.49433 Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95)) tau: [1] 0.5 Coefficients: coefficients lower bd upper bd (Intercept) 81.48225 53.25915 114.01156 income 0.56018 0.48702 0.60199 Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95)) tau: [1] 0.75 Coefficients: coefficients lower bd upper bd (Intercept) 62.39659 32.74488 107.31362 income 0.64401 0.58016 0.69041 Call: rq(formula = foodexp ~ income, tau = c(0.05, 0.25, 0.5, 0.75, 0.95)) tau: [1] 0.95 Coefficients: 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') } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232215.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 制作html5移动端页面,移动端H5页面制作规范「建议收藏」

    制作html5移动端页面,移动端H5页面制作规范「建议收藏」计量单位的使用css的计量单位有三种选择:px:固定的相素值em:相对父级元素的font-size设置来作为当前元素1em所代表的像素值,如父节点的font-size:10px,当前节点的font-size:1.2em,则当前节点的font-size实为12px;rem:相对根节点html的font-size设置来作为当前元素1rem所代表的像素值,与em的区别就是rem的基本度量单位与父节点…

    2022年6月21日
    44
  • Traits技法[终于解决]

    扮演“特性萃取机”角色,萃取各个迭代器的特性(迭代器的相应类型)模板特例化:提供一份template定义式,而其本身仍为templatization通过classtemplatepartial

    2021年12月18日
    46
  • 基于epoll的TP传输层实现

    1.抽象TP传输层设计在使用epoll实现实际的传输层之前,先设计一个抽象的传输层,这个抽象的传输层是传输层实现的接口层。接口层中一共有以下几个通用的类或者接口:(1)Socket:通用的套接

    2021年12月28日
    50
  • 数据结构——HashMap

    数据结构——HashMap众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。对于HashMap,我们最常使用的是两个方法:Get和Put。1.Put方法的原理调用Put方法的时候发生了什么呢?…

    2022年5月12日
    44
  • oracle创建数据库文件时出错_oracle错误代码大全

    oracle创建数据库文件时出错_oracle错误代码大全一、创建数据库时报必须运行Netca以配置监听程序,然后才能继续。     解决方法:     1、停止Oracle该服务;    2、用系统管理员身份运行netmanager删除监听程序;    3、用netconfigurationassistant添加监听程序;    4、用系统管理员身份运行databaseconf…

    2025年11月26日
    3
  • Mac安装yarn

    Mac安装yarn1.全局安装yarnnpmi-gyran#查看安装是否成功yarn–version2.设置淘宝镜像,下载速度更快yarnconfigsetregistryhttps://registry.npm.taobao.com3.配置环境变量echo”PATH=$PATH:~/.yarn/bin”>>~/.bash_profile&&source.bash_profile…

    2022年5月26日
    354

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号