我正在寻找一种使用 R 获得分段分位数线性回归的方法。我已经能够使用包计算分位数回归 quantreg
。但是,我不只想要 1 个独特的斜率,而是想要检查我的数据集中的断点。我已经看到该segmented
软件包可以这样做。lm
虽然使用or进行拟合时效果很好glm
(如下面的示例所示),但它不适用于分位数。
在segmented
我读过的包信息中,有一个segmented.default
可用于特定回归模型的,例如分位数。但是,当我将其应用于分位数结果时,会出现以下错误:
diag(vv) 中的错误:无效的“nrow”值(太大或 NA)此外:警告消息:无法计算协方差矩阵
如果我不使用 K=2 而不是使用例如 psi 我得到其他类型的错误:
rq.fit.br(x, y, tau = tau, ...) 中的错误:奇异设计矩阵
我用mtcars
数据创建了一个示例,因此您可以看到我得到的错误。
library(quantreg)
library(segmented)
data(mtcars)
out.rq <- rq(mpg ~ wt, data= mtcars)
out.lm <- lm(mpg ~ wt, data= mtcars)
# Plotting the results
plot(mpg ~ wt, data = mtcars, pch = 1, main = "mpg ~ wt")
abline(out.lm, col = "red", lty = 2)
abline(out.rq, col = "blue", lty = 2)
legend("topright", legend = c("linear", "quantile"), col = c("red", "blue"), lty = 2)
#Generating segmented LM
o <- segmented(out.lm, seg.Z= ~wt, npsi=2, control=seg.control(display=FALSE))
plot(o, lwd=2, col=2:6, main="Segmented regression", res=FALSE) #lwd: line width #col: from 2 to 6 #RES: show datapoints
#Generating segmented Quantile
#using K=2
o.quantile <- segmented.default(out.rq, seg.Z= ~wt, control=seg.control(display=FALSE, K=2))
# using psi
o.quantile <- segmented.default(out.rq, seg.Z= ~wt, psi=list(wt=c(2,4)), control=seg.control(display=FALSE))