获取基于quantreg包的分位数回归模型系数显著性水平(p值)
获取分位数回归模型系数的p值
嘿,我来帮你搞定分位数回归模型系数的显著性检验(也就是获取p值)的问题!首先先确认你已经完成的代码是没问题的,先把你的代码贴出来方便参考:
set.seed(5) library(quantreg) d <- data.frame(x=seq(-5, 5, len=51)) d$y <- 50 - 0.3*d$x^2 + rnorm(nrow(d)) Taus <- c(0.1,0.3,0.5,0.7,0.9) QR<-rq(y ~ 1 + x + I(x^2)+I(x^3), tau=Taus, data=d)
接下来,要拿到每个分位数水平下系数的p值,quantreg包的summary()函数针对rq对象提供了几种计算标准误的方式,进而能算出p值,这里给你两种常用的方法:
方法1:基于渐近正态性的快速计算
这种方法假设误差是独立同分布的,计算速度快,适合大样本场景:
# 生成每个分位数的汇总结果,指定se="nid" qr_summary <- summary(QR, se = "nid") # 遍历每个分位数,把系数和p值打印出来 for (i in seq_along(Taus)) { cat(sprintf("=== 分位数水平 τ = %.1f ===\n", Taus[i])) # 提取系数表,里面已经包含了p值 coef_table <- qr_summary[[i]]$coefficients # 给列名改得更易懂 colnames(coef_table) <- c("估计系数", "标准误", "t值", "p值") print(coef_table) cat("\n") }
方法2:自助法(更稳健,推荐小样本用)
如果你的样本量不大,或者误差分布不符合正态假设,自助法的结果会更可靠,只是计算时间会长一点:
# 用自助法计算标准误,这里设置自助次数R=1000,你可以根据需求调整 qr_summary_boot <- summary(QR, se = "boot", R = 1000) # 同样遍历每个分位数输出结果 for (i in seq_along(Taus)) { cat(sprintf("=== 分位数水平 τ = %.1f(自助法) ===\n", Taus[i])) coef_table <- qr_summary_boot[[i]]$coefficients colnames(coef_table) <- c("估计系数", "标准误", "t值", "p值") print(coef_table) cat("\n") }
小提示
- 因为你拟合的是多分位数模型(指定了多个tau值),
summary()返回的是一个列表,每个元素对应一个分位数的汇总结果,所以需要用循环来逐个提取 - 自助法的
R参数可以调大,比如2000,结果会更稳定,但计算时间也会增加 - 如果你只需要系数的话用
coef(QR)就可以,但p值必须通过summary()计算,因为rq对象本身不会自动存储显著性相关的统计量
内容的提问来源于stack exchange,提问作者Hanan
相关产品推荐
相关产品推荐

