Я ищу способ получить кусочно-квантильную линейную регрессию с помощью R. Я смог вычислить квантильную регрессию с помощью пакета quantreg
. Тем не менее, я не хочу только один уникальный уклон, но хочу проверить точки останова в моем наборе данных. Я видел, что пакет segmented
может это сделать. Хотя он работает хорошо, если подгонка выполняется с lm
или glm
(как показано ниже в примере), он не может работать для квантиля.
В информации о пакете segmented
я прочитал, что существует segmented.default
, который можно использовать для конкретных c регрессионных моделей, таких как Quantiles. Однако, когда я применяю это для моего квантильного результата, это дает мне следующие ошибки:
Ошибка в diag (vv): недопустимое значение 'nrow' (слишком большое или NA) Кроме того: Предупреждение: не могу вычислить ковариационную матрицу
Если вместо использования K = 2 я использую, например, пси, я получаю другие типы ошибок:
Ошибка в 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))