Eu desenvolvi a resposta do mbq que procurava por todas as possibilidades. Além disso, faço isso:
- Verifique a significância dos dois modelos por partes para garantir que os coeficientes sejam significativos
- Verifique a diferença na soma dos resíduos quadráticos para o modelo completo
- Confirmar visualmente meu modelo (verifique se não é algo sem sentido)
Por que verificar o significado? Isso ocorre porque o ponto com o SSE mínimo não faz sentido se um dos dois modelos se encaixa muito mal nos dados. Isso pode acontecer para duas variáveis altamente correlacionadas sem um ponto de interrupção claro, onde as inclinações mudam.
Vamos verificar essa abordagem simples com um caso de teste fácil:
x <- c(-50:50)
y <- abs(x)
plot(x,y,pch=19)
O ponto de interrupção é obviamente zero. Use o seguinte script 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
}
Ajuste modelos lineares por partes para todas as combinações possíveis:
f(x,y)
k sums
0 0
Se verificarmos os coeficientes para os dois modelos ótimos, eles serão altamente significativos. O R2 deles também será muito alto.