Contenu principal

Régression linéaire avec une seule variable prédictive

La régression linéaire simple décrit la relation entre une seule variable prédictive et une variable de réponse. Un modèle de régression linéaire est utile pour comprendre l’influence des modifications du prédicteur sur la réponse.

Cet exemple montre comment ajuster, visualiser et valider des modèles de régression linéaire simple de degrés divers avec les fonctions polyfit et polyval. Pour savoir comment ajuster et visualiser un modèle en utilisant plutôt l’outil Basic Fitting, consultez Interactively Fit Data and Visualize Model.

Utilisez la régression linéaire simple lorsque :

  • Vous disposez d’une seule variable prédictive.

  • La relation entre le prédicteur et la réponse est linéaire dans les coefficients.

  • Vous souhaitez quantifier l’effet du prédicteur sur la réponse.

Tracer les données

Commencez par tracer les données pour identifier les degrés d’ajustement polynomial possibles.

Par exemple, créez et visualisez un échantillon avec une variable prédictive x et une variable de réponse y. Cette visualisation suggère qu’un ajustement linéaire ou quadratique pourrait décrire la relation entre le prédicteur et la variable de réponse.

x = [0:0.5:5]';
y = [2.73 2.50 3.79 3.98 4.21 7.18 6.95 9.63 12.39 14.10 19.93]';
scatter(x,y)

Figure contains an axes object. The axes object contains an object of type scatter.

Ajuster un modèle de premier degré

Ajustez un modèle de premier degré (linéaire) aux données avec la fonction polyfit. Spécifiez deux arguments en sortie pour renvoyer les coefficients polynomiaux ainsi que la structure d’estimation des erreurs.

[pLinear,SLinear] = polyfit(x,y,1)
pLinear = 1×2

    3.1316    0.1155

SLinear = struct with fields:
           R: [2×2 double]
          df: 9
       normr: 6.3071
    rsquared: 0.8715

Affichez le modèle ajusté.

eqLinear = "Linear: " + pLinear(1) + "x + " + pLinear(2)
eqLinear = 
"Linear: 3.1316x + 0.11545"

Ajuster un modèle de degré supérieur

Si un modèle de premier degré ne décrit pas de manière satisfaisante la relation entre le prédicteur et la variable de réponse, vous pouvez ajuster un modèle de degré supérieur. Par exemple, ajustez un modèle de second degré (quadratique) aux données avec la fonction polyfit. Spécifiez deux arguments en sortie pour renvoyer les coefficients polynomiaux ainsi que la structure d’estimation des erreurs.

[pQuad,SQuad] = polyfit(x,y,2)
pQuad = 1×3

    0.7898   -0.8175    3.0773

SQuad = struct with fields:
           R: [3×3 double]
          df: 8
       normr: 2.5152
    rsquared: 0.9796

Affichez le modèle ajusté.

eqQuad = "Quadratic: " + pQuad(1) + "x^2 + " + pQuad(2) + "x + " + pQuad(3)
eqQuad = 
"Quadratic: 0.78984x^2 + -0.81755x + 3.0773"

Comparer les modèles

Pour comparer les modèles à l’aide d’un tracé, évaluez d’abord chacun d’eux aux points de requête et renvoyez les valeurs de réponse prédites avec la fonction polyval. Visualisez ensuite les données et les deux modèles.

Par exemple, obtenez les valeurs de réponse du modèle linéaire et du modèle quadratique sur une plage de valeurs x plus fine.

xQuery = [0:0.05:7]';
yLinear = polyval(pLinear,xQuery);
yQuad = polyval(pQuad,xQuery);

Si le modèle de degré supérieur ne prédit pas correctement les valeurs de réponse, cela peut indiquer un surajustement. Pour plus d’informations sur la validation du modèle et la sélection de la complexité appropriée pour celui-ci, consultez la section Valider les modèles.

Tracez ensuite les données de l’échantillon et des modèles.

scatter(x,y)
hold on
plot(xQuery,yLinear,"-")
plot(xQuery,yQuad,"--")
hold off

xlabel("Predictor")
ylabel("Response")
legend(["Sample data" "Linear model" "Quadratic model"])
text(0.3,30,[eqLinear eqQuad])

Figure contains an axes object. The axes object with xlabel Predictor, ylabel Response contains 4 objects of type scatter, line, text. These objects represent Sample data, Linear model, Quadratic model.

Valider les modèles

Pour valider un modèle, calculez le coefficient de détermination (R au carré) ou le coefficient de détermination ajusté (R au carré ajusté). Une valeur proche de 1 indique un ajustement de bonne qualité.

Valider un modèle linéaire avec R au carré

Pour un modèle de premier degré, vous pouvez accéder à la valeur R au carré avec la structure d’estimation des erreurs renvoyée par la fonction polyfit. Par exemple, interrogez le champ rsquared dans SLinear.

linearR2 = SLinear.rsquared
linearR2 = 
0.8715

Valider un modèle de degré supérieur avec R au carré ajusté

En général, pour les modèles de degré supérieur contenant un plus grand nombre de termes, la valeur R au carré augmente, ce qui indique un ajustement plus étroit aux données observées. Toutefois, ces modèles présentent un risque plus élevé de surajustement.

Le surajustement se produit lorsqu’un modèle décrit trop fidèlement les données d’origine (y compris le bruit) et ne prédit pas efficacement les nouvelles données.

Pour trouver le juste équilibre entre qualité de prédiction et complexité du modèle, envisagez de valider le modèle avec la valeur R au carré ajustée, qui inclut une pénalité pour le nombre de prédicteurs. Vous pouvez calculer la valeur R au carré ajustée avec l’équation suivante, où R2 est la valeur du champ rsquared dans la structure d’estimation des erreurs, N est le nombre d’observations dans les données et d est le degré du modèle.

Radjusted2=1-(1-R2)(N-1)N-d-1

Par exemple, calculez la valeur R au carré ajustée pour le modèle quadratique.

quadAdjRsq = 1 - (1 - SQuad.rsquared) * (numel(y) - 1) / (numel(y) - 2 - 1)
quadAdjRsq = 
0.9744

Calculer l’erreur de prédiction maximale pour chaque modèle

Vous pouvez également valider un modèle en calculant l’erreur la plus élevée entre ses prédictions et l’échantillon de données. Une erreur maximale relativement petite par rapport aux valeurs des données indique un ajustement de bonne qualité.

Par exemple, calculez l’erreur maximale du modèle linéaire et du modèle quadratique.

Lia = ismember(xQuery,x);
linearMaxError = max(abs(yLinear(Lia) - y))
linearMaxError = 
4.1564
quadMaxError = max(abs(yQuad(Lia) - y))
quadMaxError = 
1.2926

Voir aussi

Fonctions

Rubriques