如何为波士顿数据集的分位数回归模型计算伪R-squared?
分位数回归伪R-squared的正确计算方法
分位数回归的伪R²需要对比仅含截距项的基准分位数模型的损失来计算,你目前只计算了目标模型的损失值,缺少基准模型的参照,所以得到的不是0-1区间的结果。以下是具体实现步骤:
1. 加载依赖包与数据
library(MASS) library(quantreg) # rq函数来自该包,需显式加载 data(Boston)
2. 拟合目标模型与基准模型
# 你的分位数回归模型(tau=0.9) qr_res_0.9 <- rq(medv ~ lstat + rm + crim + dis, tau = 0.9, data = Boston) # 基准模型:仅包含截距项的分位数回归(tau需与目标模型一致) qr_null_0.9 <- rq(medv ~ 1, tau = 0.9, data = Boston)
3. 手动计算伪R-squared
分位数回归的伪R²定义为 1 - 模型损失 / 基准模型损失,其中损失由分位数损失函数rho计算:
# 定义分位数损失函数 rho <- function(u, tau = .5) u * (tau - (u < 0)) # 计算目标模型的总损失 V <- sum(rho(qr_res_0.9$resid, qr_res_0.9$tau)) # 计算基准模型的总损失 V0 <- sum(rho(qr_null_0.9$resid, qr_null_0.9$tau)) # 计算伪R²(取值0-1) pseudo_r2 <- 1 - V / V0 pseudo_r2
4. 用quantreg内置函数快速计算
quantreg包提供了内置方法直接计算伪R²,结果与手动计算一致:
# 直接调用内置函数 pseudoR2(qr_res_0.9, type = "pseudo")
结果说明
该伪R²表示你的模型相比仅截距的基准模型,减少了多少分位数损失,数值越接近1,说明模型对分位数的拟合效果越好。
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

