You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言拟合二次及高阶分位数回归模型与最优tau值选择方法

R语言连续变量高阶分位数回归实现与拟合效果评估

高阶非线性项的模型设置

你提到的den ~ salinity + salinity^2写法是错误的:R公式语法中^默认表示交互项层级,不会直接计算变量的幂次,高阶项的正确设置方式有两种:

  • 方法1:用I()函数包裹幂运算,强制解析为算术表达式,二次模型写法为den ~ salinity + I(salinity^2),需要更高阶项时直接追加对应幂次即可,例如三次项加I(salinity^3)
  • 方法2:用正交多项式函数poly(),二次模型写法为den ~ poly(salinity, 2),这种方式可以自动规避多重共线性问题,更推荐高阶拟合场景使用

完整示例代码

# 加载分位数回归依赖包
library(quantreg)

# 你的示例数据集
df <- structure(list(den = c(0, 12, 8.33, 5, 0, 0, 1, 1.33, 0, 3), 
                     salinity = c(37, 35, 36, 39, 36, 37, 35, 38, 36, 37)), 
                row.names = c(86L, 240L, 394L, 548L, 702L, 856L, 1010L, 1164L, 1318L, 1472L), 
                class = "data.frame")

# 拟合0.75分位的二次分位数回归
# 写法1:手动指定平方项
quantreg75_quad1 <- rq(den ~ salinity + I(salinity^2), data = df, tau = 0.75)
# 写法2:正交多项式
quantreg75_quad2 <- rq(den ~ poly(salinity, 2), data = df, tau = 0.75)

# 查看模型回归系数与显著性
summary(quantreg75_quad1)

注意:你示例代码中data=rain需要替换为实际数据集名称,这里示例用df

不同tau水平的拟合效果判断

常用的评估方法有以下4种:

    1. 分位数损失值(目标函数值)
      分位数回归的优化目标是最小化加权绝对损失,同一数据集下损失值越小,对应tau的拟合效果越好,可以直接用loss.rq()提取:
# 提取单模型损失
loss_75 <- loss.rq(quantreg75_quad1)

# 同时拟合多个tau模型并对比损失
quantreg_multi <- rq(den ~ poly(salinity, 2), data = df, tau = c(0.25, 0.5, 0.75))
sapply(quantreg_multi, loss.rq)
    1. 分位数拟合优度R1
      和线性回归的R2逻辑类似,R1取值范围为0-1,越接近1说明模型对对应分位的解释能力越强,可以从summary.rq()的返回结果中直接获取。
    1. 残差分布校验
      分位数回归的残差满足:对应tau下,正残差占比约为1-tau,负残差占比约为tau。例如0.75分位的模型,正残差占比应该接近25%,偏离越小说明拟合越符合分位数假设。
    1. 交叉验证预测误差
      将数据集拆分为训练集和测试集,在训练集拟合不同tau的模型,在测试集计算对应tau的加权绝对预测误差,误差越小说明模型的泛化能力越好,是更严谨的工业级评估方法。

如果你需要对比线性模型和二次模型的拟合效果,也可以用上述方法,同一tau下损失更小、R1更高的模型更优。

内容的提问来源于stack exchange,提问作者Nate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:06:03