• R语言实现分位数回归和二次分位数回归


          大家好,我是带我去滑雪!新的一年,新的气象,在接下来的日子里我将继续和各位小伙伴们分享我在科研道路上,学习的一些知识!

         分位数回归和二次分位数回归是统计学中用于分析因变量与自变量之间关系的方法,特别适用于处理非线性和异方差的情况。在以往的学习中,大家最常用的是分位数回归,也比较容易找到分位数回归的相关R代码,但是在后续的学习中,我发现网上关于二次分位数回归的代码与学习内容比较少,代码难以获取,为了解决这个问题,就有了这一篇博客的由来。

    目录

    一、认识分位数回归和二次分位数回归

    (1)什么是分位数回归?

    (2)什么是二次分位数回归?

    二、代码实现与实战

    (1)下载相关包并导入

    (2)导入数据

    (3)绘制散点图

    (4)验证因变量y是否服从正态分布

    (5)分位数回归

     (6)二次分位数回归


    一、认识分位数回归和二次分位数回归

    (1)什么是分位数回归?

    • 分位数回归是一种回归分析方法,它估计的不是依变量的均值,而是给定分位数下的条件分布。通常,我们感兴趣的不仅仅是了解自变量如何影响因变量的期望值,还想了解自变量如何影响因变量在不同分位数下的表现。
    • 分位数回归提供了更全面的关于因变量与自变量之间关系的信息,能够捕捉到数据中存在的各种异质性和非线性关系。

    (2)什么是二次分位数回归?

    • 二次分位数回归是分位数回归的一种扩展,它在分位数回归的基础上引入了自变量的平方项或其他高次项。
    • 通过引入二次项,二次分位数回归可以更好地捕捉到因变量和自变量之间的非线性关系。这样的非线性关系可能在特定的分位数下更为显著或重要。
    • 二次分位数回归能够提供更精细的数据拟合,进一步改善了对数据的解释和预测能力。 

    二、代码实现与实战

    (1)下载相关包并导入

    1. install.packages("hrbrthemes")
    2. install.packages("palmerpenguins")
    3. install.packages("ggplot")
    4. library(tidyverse)
    5. library(ggsci)
    6. library(ggExtra)
    7. library(ggpmisc)
    8. library(palmerpenguins)
    9. library(ggplot2)
    10. library(quantreg)

    (2)导入数据

    1. data<-read.csv("E:/工作/硕士/博客/data.csv",header=TRUE,sep=",",fileEncoding = "GBK")
    2. data

    部分数据展示:

              x           y         type
    1   13.2567 6.3488    5
    2   13.2099 6.2226    5
    3   12.8984 6.0332    3
    4   12.9607 6.0837    4
    5   12.8361 5.8060    5
    6   12.8049 5.6924    5
    7   12.5245 5.6420    4
    8   12.5401 5.6672    5
    9   12.2285 5.5031    5
    10  11.3718 5.1876    3

    (3)绘制散点图

    plot(data$x, data$y, xlab='x', ylab='y')
    plot(data$x, data$type, xlab='x', ylab='type')

    输出结果:

    (4)验证因变量y是否服从正态分布

    boxplot(data$y, xlab='y')
    #简单验证一下因变量y是否服从正态分布
    qqnorm(data$y, main='QQ plot')
    qqline(data$y, col='red', lwd=2)
    attach(data)

    输出结果:

    (5)分位数回归

    1. rq_result <- rq(x ~ y, tau=c(0.05, 0.25, 0.55, 0.80, 0.99))
    2. summary(rq_result)

    输出结果:

     

    Call: rq(formula = x ~ y, tau = c(0.05, 0.25, 0.55, 0.8, 0.99))

    tau: [1] 0.05

    Coefficients:
                coefficients lower bd upper bd
    (Intercept)  5.90509     -0.04805  6.97585
    y            0.92993      0.69762  1.96490

    Call: rq(formula = x ~ y, tau = c(0.05, 0.25, 0.55, 0.8, 0.99))

    tau: [1] 0.25

    Coefficients:
                coefficients lower bd upper bd
    (Intercept) 1.95680      0.86718  3.95382 
    y           1.77132      1.37449  1.98130 

    Call: rq(formula = x ~ y, tau = c(0.05, 0.25, 0.55, 0.8, 0.99))

    tau: [1] 0.55

    Coefficients:
                coefficients lower bd upper bd
    (Intercept) 2.16670      0.54266  2.77642 
    y           1.77877      1.65164  2.09980 

    Call: rq(formula = x ~ y, tau = c(0.05, 0.25, 0.55, 0.8, 0.99))

    tau: [1] 0.8

    Coefficients:
                coefficients lower bd upper bd
    (Intercept) 2.36689      1.27416  3.19410 
    y           1.79510      1.63677  1.98807 

    Call: rq(formula = x ~ y, tau = c(0.05, 0.25, 0.55, 0.8, 0.99))

    tau: [1] 0.99

    Coefficients:
                coefficients lower bd upper bd
    (Intercept)  1.78244     -1.46488  6.81231
    y            1.97464      1.25385  2.64396

    1. plot(x, y, cex=2, type='n', xlab='x', ylab='y',lty=2,pch=16)
    2. points(x, y, cex=2, col='blACK',pch=16)
    3. abline(rq(y~x, tau=0.99), col='red',lty=1,lwd=2)
    4. plot(type, y, cex=2, type='n', xlab='type', ylab='y',lty=2,pch=16)
    5. points(type, y, cex=2, col='blue',pch=16)
    6. abline(rq(y~type, tau=0.99), col='red',lty=1,lwd=2)
    7. plot(type, y, cex=2, type='n', xlab='type', ylab='y',lty=2,pch=16)
    8. points(type, y, cex=2, col='blue',pch=16)
    9. abline(rq(y~type, tau=0.99), col='red',lty=1,lwd=2)

     输出结果:

     (6)二次分位数回归

    1. rq_result1 <- lrq(y~A*x+B*x^2+C,start = list(A=0,B=0,C=0),tau=0.99,data=data)
    2. summary(rq_result1 )
    3. summary.nlrq(rq_result1 )
    4. plot(x, y, cex=2, type='n', xlab='x', ylab='y',lty=2,pch=16)
    5. points(x, y, cex=2, col='black',pch=16)
    6. curve(-5.96362*x+0.26132*x^2+39.48284, col='red',lty=1,lwd=2, add = TRUE)
    7. text(12.5,6.3,"n=169,tau=0.99",cex=1.5,font=1)

     输出结果:

    需要数据集的家人们可以去百度网盘(永久有效)获取:

    链接:https://pan.baidu.com/s/173deLlgLYUz789M3KHYw-Q?pwd=0ly6
    提取码:2138 


    更多优质内容持续发布中,请移步主页查看。

    若有问题可邮箱联系:1736732074@qq.com 

    博主的WeChat:TCB1736732074

       点赞+关注,下次不迷路!

  • 相关阅读:
    深入理解Django:中间件与信号处理的艺术
    【技术实战】Vue功能样式实战【四】
    java毕业设计网上订餐系统mybatis+源码+调试部署+系统+数据库+lw
    满意度从50%到90%,客服系统是怎么做到的
    【斗破年番】火火抱彩鳞把她整害羞啦!女王解锁新造型,身形丰满超有料
    『SD』AI绘画,不会写提示词怎么办?
    SAP中己经用MBST冲销的凭证,可以再次用MBST冲销吗?
    坦克大战Netty网络联机版项目笔记
    OpenAI打破文本和图像次元壁,提出基于对比学习的多模态预训练模型CLIP
    python爬取网站数据笔记分享
  • 原文地址:https://blog.csdn.net/qq_45856698/article/details/136230789