R语言中基于mtcars数据绘制分位数回归3D Q-Q图的方法问询
基于R实现mtcars分位数回归3D Q-Q图
依赖包准备
需要用到3个核心包,quantreg用于拟合分位数回归模型,plotly用于3D可视化,dplyr用于数据处理:
# 首次使用先安装依赖 install.packages(c("quantreg", "plotly", "dplyr")) # 加载包 library(quantreg) library(plotly) library(dplyr)
步骤1:拟合多分位点分位数回归并整理Q-Q数据
# 加载内置mtcars数据集 data(mtcars) # 定义需要拟合的分位点序列,范围0.05-0.95,可按需调整间隔控制精度 tau_seq <- seq(0.05, 0.95, by = 0.05) # 初始化存储Q-Q数据的空数据框 qq_data <- data.frame() for (tau in tau_seq) { # 拟合分位数回归:示例以mpg为因变量,wt、hp为自变量,可按需修改公式 rq_model <- rq(mpg ~ wt + hp, data = mtcars, tau = tau) # 提取模型残差 res <- residuals(rq_model) n <- length(res) # 计算残差的经验分位数、对应理论正态分位数 emp_quant <- sort(res) theo_quant <- qnorm(ppoints(n)) # 合并数据 tmp <- data.frame( theoretical_quant = theo_quant, tau = rep(tau, n), residual_quant = emp_quant ) qq_data <- rbind(qq_data, tmp) }
步骤2:绘制3D Q-Q图
plot_ly(data = qq_data, x = ~theoretical_quant, y = ~tau, z = ~residual_quant, type = "scatter3d", mode = "markers", marker = list(size = 2, color = ~residual_quant, colorscale = "Viridis")) %>% layout( scene = list( xaxis = list(title = "理论正态分位数"), yaxis = list(title = "分位点τ"), zaxis = list(title = "残差经验分位数") ), title = "分位数回归3D Q-Q图(mtcars数据集)" )
效果调整说明
- 若需要曲面效果代替散点,把
type = "scatter3d"修改为type = "mesh3d"即可 - 可通过调整
tau_seq的间隔控制分位点的覆盖密度,间隔越小图的精度越高 - 回归公式可按需调整,比如添加更多自变量、更换因变量等
内容的提问来源于stack exchange,提问作者user115916
相关产品推荐
相关产品推荐

