Lorsque j’anime des formations sur la réalisation de graphiques sous R avec le package ggplot2
, je me sers du scatterplot pour expliquer le principe et le fonctionnement du package.
Parmi les éléments que je montre, il y a la couche geom_smooth()
, qui permet ultra rapidement et ultra facilement de rajouter une courbe de tendance, ou une droite de régression linéaire, si on ajoute method="lm"
.
Par exemple :
library(ggplot2)
ggplot(iris, aes(y=Petal.Length, x=Petal.Width))+
geom_point()+
geom_smooth(method="lm")
Et très souvent, les stagiaires me demandent :
“Est-ce qu’on peut ajouter l’équation de la droite ?”.
Alors OUI ! On peut !
Je vous montre deux solutions, dont une complètement automatique.
J’avais déjà montré comment ajouter l’équation “à la main” avec la couche annotate()
, dans l’article “La régression linéaire simple avec le logiciel R“
Par exemple, avec les données précédentes, les commandes sont :
# ajustement du modèle de régression linéaire simple
lm1 <- lm(Petal.Length~Petal.Width, data=iris)
# affichage des résultats
summary(lm1)
##
## Call:
## lm(formula = Petal.Length ~ Petal.Width, data = iris)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.33542 -0.30347 -0.02955 0.25776 1.39453
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.08356 0.07297 14.85 <2e-16 ***
## Petal.Width 2.22994 0.05140 43.39 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4782 on 148 degrees of freedom
## Multiple R-squared: 0.9271, Adjusted R-squared: 0.9266
## F-statistic: 1882 on 1 and 148 DF, p-value: < 2.2e-16
# réalisation du plot avec les informations récupérées dans la sortie
ggplot(iris, aes(y=Petal.Length, x=Petal.Width))+
geom_point()+
geom_smooth(method="lm")+
annotate("text", x = 0.5, y = 6, label = "Petal.Length = 1.08 + 2.23 * Petal.Width\n (pval<0.001)", size=2)
Ça fonctionne bien, mais je viens de découvrir qu’il existe une solution complètement automatisée grâce à l’excellent package ggpubr
!
Vous allez voir c’est très simple.
Parmi les fonctions très utiles de ce package ggpubr
, il y a la fonction stat_regline_equation()
, qui va faire le job, à notre place !
library(ggpubr)
ggplot(iris, aes(y=Petal.Length, x=Petal.Width))+
geom_point()+
geom_smooth(method="lm")+
stat_regline_equation()
Par défaut, la fonction n’affiche que l’équation. Mais il est possible d’obtenir le R2 (mais à priori pas la pvalue), ou encore de modifier le positionnement (avec les arguments label.x
, label.y
), la taille (size
) du texte et sa couleur (colour
) :
ggplot(iris, aes(y=Petal.Length, x=Petal.Width))+
geom_point()+
geom_smooth(method="lm")+
stat_regline_equation(
aes(label = paste(..eq.label.., ..adj.rr.label.., sep = "~~~~")),label.x=1, label.y=1, size=3, colour="blue")
Et ça fonctionne aussi avec le facet :
ggplot(iris, aes(y=Petal.Length, x=Petal.Width, colour=Species))+
geom_point()+
geom_smooth(method="lm")+
stat_regline_equation(
aes(label = paste(..eq.label.., ..adj.rr.label.., sep = "~~~~")),label.x=0.25, label.y=1, size=3)+
facet_wrap(~Species)+
theme(legend.position = "non")
Pas mal tout de même, non ??
Vous trouverez d’autres exemples sur la page d’aide de la fonction, ici.
Et si vous voulez enfin apprendre à dompter ggplot2, à réaliser les principaux graphiques (scatterplot, boxplot, barplot, lineplot, series temporelles, moyennes avec IC, etc.. ), et l’utiliser de manière performante, vous pouvez me rejoindre sur la prochaine séance de formation, qui aura lieu le 22 février (attention, nombre de places limité à 5).
Vous trouverez toutes les informations (programme, tarif, bulletin d’inscription) ci-dessous 👇👇👇👇
Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.
5 réponses
Bonjour,
Merci pour vos articles toujours aussi utile.
J’ai cherché par tous les moyens à générer un tableau automatique depuis ggplot2 pour indiquer les nombre d’observation pris en compte à chaque de temps (x= variable temps en semaines) et y =variable numériques, à partir de données longitudinales.
Savez-vous si cela est possible ou même avec un autre package?
Cordialement
Bonjour,
je pense que c’est possible, mais je n’ai pas d’indication précise. Allez voir du côté de ggpubr, ggstatplot, et GGally.
Bien à vous.
Merci pour cette formation
Bonjour et merci pour l’astuce 🙂
Est-il possible de contrôler la précision (nb de chiffres après la virgule) des valeurs des coefficients de la régression ?
Est-il possible de faire la même chose avec une régression polynômiale ?
Y ~ a +b X + c X² …
Merci
E.
Bonjour,
pour la précision, je ne pense pas, en tout cas, je n’ai pas trouvé.
Pour la régression polynomiale, il ya un exemple dans a page d’aide
# Fit polynomial regression line and add labels
formula <- y ~ poly(x, 3, raw = TRUE) p <- ggplot(my.data, aes(x, y2, color = group)) + geom_point() + stat_smooth(aes(fill = group, color = group), method = "lm", formula = formula) + stat_regline_equation( aes(label = paste(..eq.label.., ..adj.rr.label.., sep = "~~~~")), formula = formula ) + theme_bw() ggpar(p, palette = "jco")
Bonne continuatino