我正在寻找一种方法来获得R的计件量化线性回归。 quantreg
. 然而,我不希望只有1个唯一的斜率,而是希望在我的数据集中检查断点。我看到 segmented
包可以这样做。虽然它的工作原理很好,如果在进行配合的时候,用 lm
或 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))
我看到这个帖子后,很长一段时间,因为我有同样的问题。为了防止其他人将来也会被这个问题困扰,我想指出问题所在。
我检查了"分段.默认". 源代码中有一行如下。
Cov <- try(vcov(objF), silent = TRUE)
vcov
是用来计算协方差矩阵的,但对量化回归对象不起作用。objF
. 为了得到分位数回归的协方差矩阵,你需要。
summary(objF,se="boot",cov=TRUE)$cov
在这里,我使用引导法来计算协方差矩阵 通过选择: se="boot"
但你应该选择适合自己的方法。检查 ?summary.rq
然后是 "se "部分的不同方法。
另外,你还需要按如下方法分配rowcolumn的名称。
dimnames(Cov)[[1]] <- dimnames(Cov)[[2]] <- unlist(attributes(objF$coef))
修改函数后,我就能用了。