使用 rq 函数计算 R 中分位数回归的 95% 置信区间
Calculating 95% confidence intervals in quantile regression in R using rq function
我想获得分位数回归的回归系数的 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% 的置信区间。也就是说,可以解释为:"with a probability of 95%, the interval [...] includes the true coefficient"。当我使用 summary.lm() 计算标准误差时,我会乘以 SE*1.96 并得到与 confint() 相似的结果。但是使用自举标准错误是不可能的。
所以我的问题是如何获得分位数回归系数的 95% 置信区间?
您可以直接使用boot.rq
函数来bootstrap系数:
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')
}
您可能希望使用启动包来计算百分位间隔以外的间隔。
您也可以简单地从对象中检索 vcov,设置 covariance=TRUE
。这相当于在您的 CI:
中使用 boostrapped 标准错误
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)
但是,是的,更好的方法是使用学生化 bootstrap。
我想获得分位数回归的回归系数的 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% 的置信区间。也就是说,可以解释为:"with a probability of 95%, the interval [...] includes the true coefficient"。当我使用 summary.lm() 计算标准误差时,我会乘以 SE*1.96 并得到与 confint() 相似的结果。但是使用自举标准错误是不可能的。 所以我的问题是如何获得分位数回归系数的 95% 置信区间?
您可以直接使用boot.rq
函数来bootstrap系数:
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')
}
您可能希望使用启动包来计算百分位间隔以外的间隔。
您也可以简单地从对象中检索 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)
但是,是的,更好的方法是使用学生化 bootstrap。