Me basé en la respuesta de mbq que busca todas las posibilidades. Además, hago esto:
- Verifique la importancia de los dos modelos por partes para asegurarse de que los coeficientes sean significativos
- Verifique la diferencia con la suma de los residuos cuadrados para el modelo completo
- Confirmar mi modelo visualmente (asegúrese de que no sea una tontería)
¿Por qué verificar la importancia? Esto se debe a que el punto con el SSE mínimo no tiene sentido si alguno de los modelos por partes se ajusta muy mal a los datos. Esto puede suceder para dos variables altamente correlacionadas sin un punto de ruptura claro donde cambian las pendientes.
Veamos este enfoque simple con un caso de prueba fácil:
x <- c(-50:50)
y <- abs(x)
plot(x,y,pch=19)
El punto de ruptura es obviamente cero. Use el siguiente 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 lineales por partes para todas las combinaciones posibles:
f(x,y)
k sums
0 0
Si verificamos los coeficientes para los dos modelos óptimos, serán altamente significativos. Su R2 también será muy alto.