我正在寻找一种使用 R 实现分段分位数线性回归的方法。我已经能够使用
我在
quantreg
包计算分位数回归。但是,我不仅想要一个唯一的斜率,还想检查数据集中是否存在拐点。我发现 segmented
包可以做到这一点。尽管它可以很好地处理使用 lm
或 glm
进行拟合(如下面的示例所示),但它不能用于分位数回归。我在
segmented
包信息中读到说有一个 segmented.default
可以用于特定的回归模型,例如分位数回归。但是,当我将其应用于我的分位数结果时,它会出现如下错误:
如果我使用 psi 而不是 K=2,我会得到其他类型的错误:Error in diag(vv) : invalid 'nrow' value (too large or NA) In addition: Warning message: cannot compute the covariance matrix
我已经使用Error in rq.fit.br(x, y, tau = tau, ...) : Singular design matrix
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))