J'ai construit sur la réponse de mbq que la recherche de toutes les possibilités. De plus, je fais ceci:
- Vérifiez la signification des deux modèles par morceaux pour vous assurer que les coefficients sont significatifs
- Vérifier la différence avec la somme des résidus au carré pour le modèle complet
- Confirmer visuellement mon modèle (assurez-vous que ce n'est pas quelque chose de non-sens)
Pourquoi vérifier la signification? C'est parce que le point avec le SSE minimum n'a aucun sens si l'un des modèles par morceaux correspond très mal aux données. Cela peut se produire pour deux variables hautement corrélées sans point d'arrêt clair où les pentes changent.
Vérifions cette approche simple avec un cas de test simple:
x <- c(-50:50)
y <- abs(x)
plot(x,y,pch=19)
Le point d'arrêt est évidemment nul. Utilisez le script R suivant:
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
}
Adaptez les modèles linéaires par morceaux pour toutes les combinaisons possibles:
f(x,y)
k sums
0 0
Si nous vérifions les coefficients des deux modèles optimaux, ils seront très significatifs. Leur R2 sera également très élevé.