Ajustement de courbe dans R (avec exemples)
Souvent, vous souhaiterez peut-être trouver l’équation qui correspond le mieux à une courbe de R.
L’exemple étape par étape suivant explique comment ajuster les courbes aux données dans R à l’aide de la fonction poly() et comment déterminer quelle courbe correspond le mieux aux données.
Étape 1 : Créer et visualiser des données
Commençons par créer un faux ensemble de données, puis créons un nuage de points pour visualiser les données :
#create data frame df <- data.frame(x=1:15, y=c(3, 14, 23, 25, 23, 15, 9, 5, 9, 13, 17, 24, 32, 36, 46)) #create a scatterplot of x vs. y plot(df$x, df$y, pch=19, xlab='x', ylab='y')
Étape 2 : Ajuster plusieurs courbes
Ajustons ensuite plusieurs modèles de régression polynomiale aux données et visualisons la courbe de chaque modèle dans le même tracé :
#fit polynomial regression models up to degree 5 fit1 <- lm(y~x, data=df) fit2 <- lm(y~poly(x,2,raw=TRUE), data=df) fit3 <- lm(y~poly(x,3,raw=TRUE), data=df) fit4 <- lm(y~poly(x,4,raw=TRUE), data=df) fit5 <- lm(y~poly(x,5,raw=TRUE), data=df) #create a scatterplot of x vs. y plot(df$x, df$y, pch=19, xlab='x', ylab='y') #define x-axis values x_axis <- seq(1, 15, length=15) #add curve of each model to plot lines(x_axis, predict(fit1, data.frame(x=x_axis)), col='green') lines(x_axis, predict(fit2, data.frame(x=x_axis)), col='red') lines(x_axis, predict(fit3, data.frame(x=x_axis)), col='purple') lines(x_axis, predict(fit4, data.frame(x=x_axis)), col='blue') lines(x_axis, predict(fit5, data.frame(x=x_axis)), col='orange')
Pour déterminer quelle courbe correspond le mieux aux données, nous pouvons examiner le R carré ajusté de chaque modèle.
Cette valeur nous indique le pourcentage de variation de la variable de réponse qui peut être expliquée par la ou les variables prédictives du modèle, ajustées en fonction du nombre de variables prédictives.
#calculated adjusted R-squared of each model summary(fit1)$adj.r.squared summary(fit2)$adj.r.squared summary(fit3)$adj.r.squared summary(fit4)$adj.r.squared summary(fit5)$adj.r.squared [1] 0.3144819 [1] 0.5186706 [1] 0.7842864 [1] 0.9590276 [1] 0.9549709
À partir du résultat, nous pouvons voir que le modèle avec le R-carré ajusté le plus élevé est le polynôme du quatrième degré, qui a un R-carré ajusté de 0,959 .
Étape 3 : Visualisez la courbe finale
Enfin, nous pouvons créer un nuage de points avec la courbe du modèle polynomial du quatrième degré :
#create a scatterplot of x vs. y plot(df$x, df$y, pch=19, xlab='x', ylab='y') #define x-axis values x_axis <- seq(1, 15, length=15) #add curve of fourth-degree polynomial model lines(x_axis, predict(fit4, data.frame(x=x_axis)), col='blue')
Nous pouvons également obtenir l’équation de cette ligne en utilisant la fonction summary() :
summary(fit4) Call: lm(formula = y ~ poly(x, 4, raw = TRUE), data = df) Residuals: Min 1Q Median 3Q Max -3.4490 -1.1732 0.6023 1.4899 3.0351 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -26.51615 4.94555 -5.362 0.000318 *** poly(x, 4, raw = TRUE)1 35.82311 3.98204 8.996 4.15e-06 *** poly(x, 4, raw = TRUE)2 -8.36486 0.96791 -8.642 5.95e-06 *** poly(x, 4, raw = TRUE)3 0.70812 0.08954 7.908 1.30e-05 *** poly(x, 4, raw = TRUE)4 -0.01924 0.00278 -6.922 4.08e-05 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.424 on 10 degrees of freedom Multiple R-squared: 0.9707, Adjusted R-squared: 0.959 F-statistic: 82.92 on 4 and 10 DF, p-value: 1.257e-07
L’équation de la courbe est la suivante :
y = -0,0192x 4 + 0,7081x 3 – 8,3649x 2 + 35,823x – 26,516
Nous pouvons utiliser cette équation pour prédire la valeur de la variable de réponse en fonction des variables prédictives du modèle. Par exemple si x = 4 alors nous prédirions que y = 23,34 :
y = -0,0192(4) 4 + 0,7081(4) 3 – 8,3649(4) 2 + 35,823(4) – 26,516 = 23,34
Ressources additionnelles
Une introduction à la régression polynomiale
Régression polynomiale dans R (étape par étape)
Comment utiliser la fonction seq dans R