用分段包R计算分片量化线性回归。

问题描述 投票:3回答:1

我正在寻找一种方法来获得R的计件量化线性回归。 quantreg. 然而,我不希望只有1个唯一的斜率,而是希望在我的数据集中检查断点。我看到 segmented 包可以这样做。虽然它的工作原理很好,如果在进行配合的时候,用 lmglm (如下图所示的例子),它无法对量化工作。

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))  
r regression quantile piecewise quantreg
1个回答
0
投票

我看到这个帖子后,很长一段时间,因为我有同样的问题。为了防止其他人将来也会被这个问题困扰,我想指出问题所在。

我检查了"分段.默认". 源代码中有一行如下。

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))

修改函数后,我就能用了。

© www.soinside.com 2019 - 2024. All rights reserved.