Я основывался на ответе mbq, что искал все возможности. Кроме того, я делаю это:
- Проверьте значимость двух кусочных моделей, чтобы убедиться, что коэффициенты значимы
- Проверьте разницу с суммой квадратов невязок для полной модели
- Подтвердите мою модель визуально (убедитесь, что это не чушь)
Зачем проверять на значимость? Это потому, что точка с минимальным SSE не имеет смысла, если любая из кусочных моделей очень плохо соответствует данным. Это может произойти для двух сильно коррелированных переменных без четкой точки останова, где меняются наклоны.
Давайте проверим этот простой подход с помощью простого тестового примера:
x <- c(-50:50)
y <- abs(x)
plot(x,y,pch=19)
Точка останова, очевидно, равна нулю. Используйте следующий скрипт R:
f <- function(x, y)
{
d <- data.frame(x=x, y=y)
d <- d[order(x),]
r <- data.frame(k=rep(0,length(x)-4), sums=rep(0,length(x)-4))
plm <- function(i)
{
d1 <- head(d,i)
d2 <- tail(d,-i)
# Make sure we've divided the region perfectly
stopifnot(nrow(d1)+nrow(d2) == nrow(d))
m1 <- lm(y~x, data=d1)
m2 <- lm(y~x, data=d2)
r <- list(m1, m2)
r
}
lapply(2:(nrow(d)-3), function(i)
{
r$k[i-2] <<- d[i,]$x
# Fit two piecewise linear models
m <- plm(i)
# Add up the sum of squares for residuals
r$sums[i-2] <<- sum((m[[1]]$residuals)^2) + sum((m[[2]]$residuals)^2)
})
b <- r[which.min(r$sums),]
b
}
Установите кусочно-линейные модели для всех возможных комбинаций:
f(x,y)
k sums
0 0
Если мы проверим коэффициенты для двух оптимальных моделей, они будут очень значительными. Их R2 тоже будет очень высоким.