使用R中的rq函数计算分位数回归的95%置信区间

8

我希望能够获得一个分位回归的回归系数的置信区间,置信度为95%。您可以使用R语言中quantreg包的rq函数计算分位回归(相对于OLS模型):

library(quantreg)
LM<-lm(mpg~disp, data = mtcars)
QR<-rq(mpg~disp, data = mtcars, tau=0.5)

我可以使用confint函数为线性模型获取95%的置信区间:

confint(LM)

当使用分位数回归时,我知道以下代码会生成自助法标准误差:
summary.rq(QR,se="boot")

实际上,我需要的是类似于95%置信区间这样的东西。也就是说,可以解释成:“在95%的概率情况下,区间[...]包含了真实系数”。当我使用summary.lm()计算标准误差时,只需要将SE乘以1.96,就能得到与confint()相似的结果。但是使用自举标准误差却不可能这样操作。

因此,我的问题是如何获取分位回归系数的95%置信区间?


计算95%置信区间的方式是估计值加减1.96乘以标准误差,这种方法有多么错误?软件会报告标准误差和p值,因此标准误差也可以用来形成置信区间。 - frelk
2个回答

8
您可以直接使用boot.rq函数来引导系数:
x<-1:50
y<-c(x[1:48]+rnorm(48,0,5),rnorm(2,150,5))

QR <- rq(y~x, tau=0.5)
summary(QR, se='boot')

LM<-lm(y~x)

QR.b <- boot.rq(cbind(1,x),y,tau=0.5, R=10000)

t(apply(QR.b$B, 2, quantile, c(0.025,0.975)))
confint(LM)


plot(x,y)
abline(coefficients(LM),col="green")
abline(coefficients(QR),col="blue")

for(i in seq_len(nrow(QR.b$B))) {
  abline(QR.b$B[i,1], QR.b$B[i,2], col='#0000ff01')
}

除了百分位数区间之外,您可能希望使用boot软件包来计算其他区间。


不错的回答。在t(apply...)中出现了 Error in QR.b$B : $ operator is invalid for atomic vectors 错误。我认为QR.b没有进行列选择:t(apply(QR.b, 2, quantile, c(0.025,0.975)))吗? - Minnow

1
你也可以直接从对象中检索vcov,设置covariance=TRUE。这相当于在CI中使用自助法标准误差:
vcov.rq <- function(x, se = "iid") {
 vc <- summary.rq(x, se=se, cov=TRUE)$cov
 dimnames(vc) <- list(names(coef(x)), names(coef(x)))
 vc
}

confint(QR)

但是,更好的方法是使用学生化自助法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接