Comment effectuer une régression par morceaux dans R (étape par étape)



La régression par morceaux est une méthode de régression que nous utilisons souvent lorsqu’il existe des « points d’arrêt » clairs dans un ensemble de données.

L’exemple suivant, étape par étape, montre comment effectuer une régression par morceaux dans R.

Étape 1 : Créer les données

Tout d’abord, créons le bloc de données suivant :

#view DataFrame
df <- data.frame(x=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
                 y=c(2, 4, 5, 6, 8, 10, 12, 13, 15, 19, 24, 28, 31, 34, 39, 44))

#view first six rows of data frame
head(df)

  x  y
1 1  2
2 2  4
3 3  5
4 4  6
5 5  8
6 6 10

Étape 2 : Visualisez les données

Créons ensuite un nuage de points pour visualiser les données :

#create scatterplot of x vs. y
plot(df$x, df$y, pch=16, col='steelblue')

Nous pouvons voir que la relation entre x et y semble changer brusquement autour de x = 9 .

Étape 3 : Ajuster le modèle de régression par morceaux

Nous pouvons utiliser la fonction segmented() du package segmented dans R pour adapter un modèle de régression par morceaux à notre ensemble de données :

library(segmented)

#fit simple linear regression model
fit <- lm(y ~ x, data=df)

#fit piecewise regression model to original model, estimating a breakpoint at x=9
segmented.fit <- segmented(fit, seg.Z = ~x, psi=9)

#view summary of segmented model
summary(segmented.fit)

Call: 
segmented.lm(obj = fit, seg.Z = ~x, psi = 9)

Estimated Break-Point(s):
         Est. St.Err
psi1.x 8.762   0.26

Meaningful coefficients of the linear terms:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.32143    0.48343   0.665    0.519    
x            1.59524    0.09573  16.663 1.16e-09 ***
U1.x         2.40476    0.13539  17.762       NA    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6204 on 12 degrees of freedom
Multiple R-Squared: 0.9983,  Adjusted R-squared: 0.9978 

Convergence attained in 2 iter. (rel. change 0)

La fonction segmented() détecte un point d’arrêt à x = 8,762.

Le modèle de régression par morceaux ajusté est :

Si x ≤ 8,762 : y = 0,32143 + 1,59524*(x)

Si x > 8,762 : y = 0,32143 + 1,59524*(8,762) + (1,59524+2,40476)*(x-8,762)

Par exemple, supposons que nous ayons une valeur de x = 5 . La valeur y estimée serait :

  • y = 0,32143 + 1,59524*(x)
  • y = 0,32143 + 1,59524*(5)
  • y = 8,297

Ou supposons que nous ayons une valeur de x = 12 . La valeur y estimée serait :

  • y = 0,32143 + 1,59524*(8,762) + (1,59524+2,40476)*(12-8,762)
  • y = 27,25

Étape 4 : Visualisez le modèle de régression par morceaux final

Nous pouvons utiliser le code suivant pour visualiser le modèle de régression par morceaux final au-dessus de nos données d’origine :

#plot original data
plot(df$x, df$y, pch=16, col='steelblue')

#add segmented regression model
plot(segmented.fit, add=T)

Il semble que le modèle de régression par morceaux s’ajuste assez bien aux données.

Ressources additionnelles

Les didacticiels suivants fournissent des informations supplémentaires sur les modèles de régression dans R :

Comment effectuer une régression linéaire simple dans R
Comment effectuer une régression linéaire multiple dans R
Comment effectuer une régression logistique dans R
Comment effectuer une régression quantile dans R
Comment effectuer une régression pondérée dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *