Bonjour à tous et soyez les bienvenus dans ce 3ème cours de R pour débutant pressé.
Aujourd’hui, nous allons voir rapidement ce qu’est une régression (linéaire ou quadratique), à quoi ça sert et ce que ça peut nous apprendre sur nos données.
Ne vous êtes-vous jamais demandé comment en apprendre plus sur vos données, comment savoir quel paramètre est le plus important ou plus simplement s’il est possible « de faire une belle ligne sur mon graphique » ?
Non ? Ah… et bien merci à bientôt.
Si ? Ah c’était une blague… très bien, continuons alors.
Commençons par le début et demandons-nous ce qu’est une régression et pourquoi on en fait. Une régression c’est le fait de faire correspondre un modèle mathématique à nos données, de manière à estimer les paramètres de la régression, qui seront des approximations des paramètres de nos données réelles. Pour expliquer tous ces mots barbares, prenons un petit exemple théorique :
Disons que nous avons des données de mortalité du nombre d’ewoks en fonction du nombre TS-TT présents sur le champ de bataille d’Endor. Nous savons par exemple que pour 1 TS-TT, 10 ewoks meurent, pour 2 TS-TT, 20 ewoks meurent et pour 3 TS-TT, 30 ewoks meurent.
La relation ici est assez simple, puisque ewoks = 10tstt
Passons maintenant à quelques explications mathématiques, mais promis, rien de bien difficile. Le nombre d’Ewoks (ewoks) est la variable que l’on cherche à expliquer, que l’on appelle en général Y. Le nombre de TS-TT (tstt) est une variable explicative (qui explique la variable à expliquer), que l’on appelle en général X, ou A. Aujourd’hui, nous n’entrerons pas dans des modèles à plusieurs variables explicatives (A, B, C), donc appelons-la X. Le modèle mathématique le plus simple et qui fonctionne parfaitement ici est donc :
Y = 0 + 10X
En effet, en mathématiques la relation la plus simple entre deux variables est :
Y = α + βX
La première question qui doit vous venir à l’esprit si vous vous êtes déjà retrouvés dans l’exercice périlleux de la rédaction d’article, de thèse ou de rapport, c’est : « ok, mais quand tu dis que ça fonctionne parfaitement, comment le prouves-tu ? ». Merci, c’est une très bonne question, qui me permet d’introduire notre meilleur ami dans R : lm.
lm est une commande R du package stats (inclus de base dans R), qui calcule les modèles correspondant à nos données et nous fournit quelques détails intéressants :
Residual standard error: 1.776e-15 on 1 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 6.338e+31 on 1 and 1 DF, p-value: < 2.2e-16
Et hop, on obtient beaucoup d’informations intéressantes d’un coup ! Explications :
Call:
lm(formula = ewoks ~ tstt)
Tout d’abord le « Call » nous rappelle quel modèle a été appelé. En effet, si l’on place notre fonction dans une variable, on peut ne plus se souvenir de ce qu’on avait appelé, donc ça nous est rappelé.
Residuals:
1 2 3
7.252e-16 -1.450e-15 7.252e-16
Les « Residuals » sont les différences entre les valeurs données dans notre X et celles estimées par le modèle. Ici, on est dans les environs de 10-16. Je pense que vous conviendrez que ce n’est pas beaucoup.
Les « Coefficients » sont les valeurs que le modèle estime, leur écart-type, leur t-value et la probabilité de rejeter l’hypothèse H0 pour laquelle le coefficient est égal à 0. Dans cet exemple, il n’y a pas de preuve statistique permettant de dire que l'ordonnée à l'origine (Intercept) est différente de 0, alors que le tstt est différent de 0 avec un test très significatif (***). C’est donc ici que l’on apprend que notre modèle est bien :
ewoks = 0 + 10tstt = 10tstt
A noter : le -4.102e-15 est devenu 0 car le test statistique n'est pas significatif (Pr(>|t|) = 0.372). Le 10 vient du 1.000e+01.
Residual standard error: 1.776e-15 on 1 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 6.338e+31 on 1 and 1 DF, p-value: < 2.2e-16
Enfin, ici nous avons quelques informations pour savoir si notre modèle colle bien avec nos données. La « Residual standard error » est l’écart type des résidus, avec leur nombre de degrés de liberté. Les « Multiple R-squared » et « Adjusted R-squared » sont les coefficients de corrélation, plus ils sont proches de 1 et meilleur est notre modèle. Ici le modèle semble parfait ! Pour finir la « F-statistic » qui est un peu plus compliquée (et dont je ne maîtrise pas toutes les ficelles) mais qui a une chose que tout le monde comprend : une p-value ! Elle devra suivre en gros les codes significatifs habituels.
Donc au final, ce modèle a l’air de bien coller avec nos données ;-)
On peut aussi évaluer visuellement notre modèle avec :
Ceci nous affiche 4 graphiques. Vu qu'on est pressés je ne vais pas entrer dans les détails, juste en dire quelques mots.
plot(lm(ewoks~tstt)) Crédits : Aurélien C. (CC-BY-SA 3.0)
Ce qu’il faut savoir, c’est que les graphiques du haut (Residuals vs Fitted et Scale-Location) ne doivent pas donner de tendance claire (ne doivent pas aller tous croissants ou tous décroissants), que le normal Q-Q plot (page wikipedia) doit montrer des points répartis autour de la ligne pointillée et que les points la suivent à peu près, et enfin que le dernier ne doit pas montrer de point qui dépasse 1 en abscisse. Vous trouverez tout le détail nécessaire sur ce PDF, notamment en page 5.
Bon, en sciences on aime bien être bien bien bien sûrs des choses, alors on peut faire un AIC (page wikipedia) qui dit que plus sa valeur est basse, plus le modèle est bon et colle à nos données :
> AIC(lm(ewoks~tstt))
[1] -192.5675
-193 c’est très bon. Cependant, il est vrai qu'on utilise plutôt l'AIC en comparaison, en lui-même il n'est pas exploitable dans un article scientifique...
Introduisons ici le dernier élément dont nous allons nous servir aujourd’hui, l’ANOVA, qui va nous renseigner, quand on ne lui donne qu’un modèle, sur l’aspect significatif des variables explicatives :
> anova(lm(ewoks~tstt))
Analysis of Variance Table
Response: ewoks
Df Sum Sq Mean Sq F value Pr(>F)
tstt 1 200 200 6.3383e+31 < 2.2e-16 ***
Residuals 1 0 0
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Message d'avis :
In anova.lm(lm(ewoks ~ tstt)) :
les tests F d'ANOVA sur un ajustement pratiquement parfait ne sont pas fiables
On a encore une fois trois étoiles pour notre tstt, qui explique donc très bien le nombre d’ewoks morts. On a de plus quelque chose de très intéressant, le message d’avis, qui nous dit au final que nos ajustements sont pratiquement parfaits.
On peut s’en apercevoir quand on trace la ligne de régression sur notre plot précédent (je remets le code du plot, au cas où mais il n’est pas nécessaire si vous n’avez pas fermé votre fenêtre) :
> plot(ewoks~tstt)
> abline(lm(ewoks~tstt))
Super !
On complique un peu l’affaire ? Parce que bon, je ne suis pas sûr que vous rencontriez un jour des données aussi faciles. Ni d’ewoks d’ailleurs. En revanche pour les TS-TT j’ai encore de l’espoir.
Alors disons maintenant que nos données ressemblent plus à ça :
Residual standard error: 63.25 on 3 degrees of freedom
Multiple R-squared: 0.9796, Adjusted R-squared: 0.9728
F-statistic: 144 on 1 and 3 DF, p-value: 0.001245
On voit cette fois que le modèle est :
ewoks = 1300 - 24tstt
On voit aussi que les coefficients de corrélation sont bons, que la p-value est assez faible. Si vous faites l’AIC (je vous laisse deviner comment faire), vous devez obtenir 59.10551, ce qui ne nous dit pas grand chose mais va être intéressant pour la suite.
Il est toujours intéressant de voir si un modèle plus complexe donne de meilleurs résultats, pour pouvoir justifier que l’on a eu raison de garder un modèle linéaire ou pas. Le niveau supérieur de complexité d’un modèle linéaire est un modèle dit polynomial, dans lequel on va ajouter à nos variables explicatives une puissance. Si vous voulez, c’est comme se dire que les solutions offertes dans le plan des puissances 1 ne sont pas suffisantes, alors on passe aux puissances 2. On peut aussi noter que notre α est en fait αX0, où X0 = 1, donc les solutions du plan de puissance 0. L’équation est la suivante :
Y = α + βX1 +γX2
Pour faire cela dans R, on va utiliser la commande :
> lm.polynomial = lm(ewoks~tstt+I(tstt^2))
Ici, on notera le
I()
, qui est la fonction d’identité qui permet d’utiliser des termes dans le modèle incluant des symboles mathématiques normaux.
On peut faire un plot de la ligne de régression de ce modèle, mais vu que ce n’est pas une droite, il faut ruser un peu et calculer sa valeur à différents points. Pour cela on utilise les coefficients calculés :
Ça a l’air moins bien, n’est-ce pas ?
Les valeurs qu'on entre dans « fit » sont celles données en coefficients.
Je vous laisse regarder le plot du modèle, le résumé nous donne ceci :
Residual standard error: 67.61 on 2 degrees of freedom
Multiple R-squared: 0.9845, Adjusted R-squared: 0.9689
F-statistic: 63.31 on 2 and 2 DF, p-value: 0.01555
Et on peut utiliser l’AIC et l’ANOVA pour comparer les deux modèles :
Les AIC sont très proches, en général on dit qu’il faut 2 de différence d’AIC pour justifier le passage à un modèle plus complexe et que 10 est une différence très forte. Ici il semble donc que le passage au modèle polynomial ne soit pas nécessaire et même qu’il est moins bon que le linéaire.
> anova(lm.linear, lm.polynomial)
Analysis of Variance Table
Model 1: ewoks ~ tstt
Model 2: ewoks ~ tstt + I(tstt^2)
Res.Df RSS Df Sum of Sq F Pr(>F)
1 3 12000.0
2 2 9142.9 1 2857.1 0.625 0.512
L'ANOVA nous dit que la différence entre les deux n’est pas significative (on ne peut pas rejeter l’hypothèse H0).
On a donc plusieurs tests qui prouvent qu’il vaut mieux rester au modèle linéaire, qui est d’ailleurs meilleur pour nos données.
Enfin et pour conclure, ces modèles nous permettent de prédire des données, grâce à la commande « predict ». Elle a besoin du modèle pour lequel on veut prédire des données, d’un vecteur des données à prédire et de l’intervalle de confiance désiré :
On sait donc qu’on avait au départ 1300 ewoks (pour 0 TS-TT, résultat 1), qu’un seul TS-TT en tue environ 24 (1300 - 1276, résultat 1 - résultat 2), et que c’est le 55ème TS-TT qui aura raison de ces sales petites bêtes (résultat 4) !
Evidemment, dans le monde rien n'est aussi simple et je pense que vos expériences ne le seront pas non plus. Il est toujours possible d'ajouter de la complexité et R est un outil suffisamment puissant pour vous suivre partout. On pourrait ici s'amuser à ajouter l'effet des Jedi ou des Wookies, ou encore de l'humidité de la planète sur les rouages ! ;-)
Je tiens à remercier tous mes relecteurs : m4rsu, Gildas et Estel.
Je tiens aussi à préciser qu'aucun ewok n'a été maltraité durant la rédaction de cet article.
Passionné d'informatique et de biologie, après des études à Orléans, un stage de M2 au CSBC de l'Université de Cambridge (UK), une thèse à l'IRBI de Tours sur l'évolution des virus et un Post-doc à Toronto sur les cancers humains, je suis aujourd'hui de retour à Orléans à l'INRA, où j'essaie de lier phénotype des arbres et expression de leurs gènes. Je suis très intéressé par les approches d'apprentissage machine.
Mes autres passions sont le basket-ball, le krav maga, la musique ou encore les jeux vidéos.
Pour continuer la lecture :
Commentaires
2 réponses à “Cours de R pour débutant pressé : les régressions !”
gbsdm4doe
Bravo et merci pour cette pédagogie.. Même en étant assez aguerri avec "R", c'est très bien résumé…
Bonjour et merci. En effet, c'est un très bon résumé.
Je me pose la question : lorsque l'on travaille sur une régression multiple, avec des variables qui ont plusieurs modalités, la commande summary n'affiche pas la première modalité car la prend par défaut pour la modalité de référence. Alors les autres modalités de cette variable sont à comparer avec la modalité de référence ie 0. Mais de cette manière on ne peut pas comparer les différentes variables entre elles, lesqu'elles ont le plus d'impact. Je ne comprends pas. Ainsi toutes les modalités de référence sont à 0 donc pas comparables entre elles ?
Dans le cas d'une régression linéaire, je veux prédire par exemple le prix d'une maison par rapport à sa superficie, nombre de chambres… "1 chambre" est la modalité de référence, si la modalité "2 chambres" a pour coefficient 1.1, cela signifie que que le prix augmente si le logement possède deux chambres plutôt qu'une, logique. Mais en termes de chiffres, de combien de % ça augmente, etc… J'ai l'impression qu'on ne peut pas interpréter les modalités à la fois par rapport à la modalité de référence et par rapport à la variable à prédire…
Dans une régression logistique encore, ce serait possible, c'est juste que si pour la modalité 1 on a une chance que l'événement se réalise, pour la modalité 2 on a 1,1 chances… ?
Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.
Gérer le consentement aux cookies
Pour offrir les meilleures expériences, nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations des appareils. Le fait de consentir à ces technologies nous permettra de traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines caractéristiques et fonctions.
Fonctionnel
Toujours activé
Le stockage ou l’accès technique est strictement nécessaire dans la finalité d’intérêt légitime de permettre l’utilisation d’un service spécifique explicitement demandé par l’abonné ou l’internaute, ou dans le seul but d’effectuer la transmission d’une communication sur un réseau de communications électroniques.
Préférences
Le stockage ou l’accès technique est nécessaire dans la finalité d’intérêt légitime de stocker des préférences qui ne sont pas demandées par l’abonné ou la personne utilisant le service.
Statistiques
Le stockage ou l’accès technique qui est utilisé exclusivement à des fins statistiques.Le stockage ou l’accès technique qui est utilisé exclusivement dans des finalités statistiques anonymes. En l’absence d’une assignation à comparaître, d’une conformité volontaire de la part de votre fournisseur d’accès à internet ou d’enregistrements supplémentaires provenant d’une tierce partie, les informations stockées ou extraites à cette seule fin ne peuvent généralement pas être utilisées pour vous identifier.
Marketing
Le stockage ou l’accès technique est nécessaire pour créer des profils d’internautes afin d’envoyer des publicités, ou pour suivre l’internaute sur un site web ou sur plusieurs sites web ayant des finalités marketing similaires.
Laisser un commentaire