Zbudowałem na podstawie odpowiedzi mbq, że szukając wszystkich możliwości. Ponadto robię to:
- Sprawdź znaczenie dwóch modeli częściowych, aby upewnić się, że współczynniki są znaczące
- Sprawdź różnicę do sumy kwadratów reszt dla pełnego modelu
- Potwierdź wizualnie mój model (upewnij się, że to nie jest nonsens)
Po co sprawdzać znaczenie? Wynika to z faktu, że punkt z minimalnym SSE nie ma znaczenia, jeśli któryś z modeli cząstkowych bardzo źle pasuje do danych. Może się to zdarzyć w przypadku dwóch wysoce skorelowanych zmiennych bez wyraźnego punktu przerwania, w którym zmieniają się nachylenia.
Sprawdźmy to proste podejście w prostym przypadku testowym:
x <- c(-50:50)
y <- abs(x)
plot(x,y,pch=19)
Punkt przerwania jest oczywiście zerowy. Użyj następującego skryptu 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
}
Dopasuj częściowe modele liniowe do wszystkich możliwych kombinacji:
f(x,y)
k sums
0 0
Jeśli sprawdzimy współczynniki dla dwóch optymalnych modeli, będą one bardzo znaczące. Ich R2 również będzie bardzo wysoki.