Régression logistique avec R
Autoformation
S’autoformer en statistique via des tutoriels et des capsules vidéo
Régression logistique avec R
Une régression logistique permet d’observer la relation entre une variable dépendante catégorielle et une ou plusieurs variables indépendantes. Une analyse qui inclut la variable dépendante et une seule variable indépendante se nomme régression logistique simple. Une analyse qui inclut la variable dépendante et plusieurs variables indépendantes se nomme régression logistique multiple.
Dans ce tutoriel nous utiliserons une régression logistique sur les données d’une compagnie fictive pour laquelle nous connaissons le poste occupé (technicien ou gestionnaire), le revenu (en milliers de dollars), ainsi que le stress lié au travail (mesuré par une échelle allant de 1 à 10). Ces données sont accessibles pour 100 employés de la compagnie (50 techniciens et 50 gestionnaires sélectionnés au hasard) et portent les noms suivants : Job, Salaire, Stress.
D’abord, nous utiliserons une régression logistique simple, afin d’observer s’il existe une relation entre le poste occupé et le salaire. Puis, nous utiliserons une régression logistique multiple afin d’observer s’il existe une relation entre le poste occupé, le salaire et le stress. Finalement nous discuterons de l’interprétation des coefficients.
Pour vous pratiquer, vous pouvez télécharger les données (fichier CSV) utilisées dans ce tutoriel !
Télécharger et activer un package
Pour télécharger un package sur R, il suffit d’utiliser la commande install.packages() directement sur le script. Il vous suffit d’avoir un accès internet et le tout ne devrait prendre que quelques secondes. Ensuite, vous pouvez activer ces packages à l’aide de la fonction library().
Pour ce tutoriel, vous aurez besoin des packages psych et tidyverse.
install.packages("psych")
install.packages("tidyverse")
library(psych)
library(tidyverse)
Étape 1: Importer les données dans R
Pour importer un fichier CSV dans R, utilisez la fonction read.csv() et le symbole de la flèche pointant vers la gauche ( <- ) pour assigner un nom à votre banque.
Votre commande devrait ressembler à l’exemple suivant :
mes_donnees <- read.csv("nom de la banque de données.csv")
Si vous désirez voir vos données d’une manière similaire à Excel, cliquez simplement sur ce nouvel élément dans l’environnement, et une feuille similaire à Excel s’ouvrira en onglet en haut à gauche.

Note: Vous pouvez vous référer au tutorial Importer ses données dans R pour en apprendre plus sur l’importation de données dans R
Étape 2: Analyses descriptives par groupes
Dans un premier temps, nous voulons observer s’il existe une différence entre les deux types d’emploi. Nous comparerons donc les deux groupes l’un à l’autre.
La fonction describeBy() permet d’obtenir des données descriptives présentées par groupe. Dans cette fonction, écrivez d’abord la banque de données qui fera l’objet de l’analyse, suivi d’une virgule puis de la variable qui servira à catégoriser les résultats.
describeBy(le nom de votre banque de données, variable désirée)
Donc dans notre exemple :
describeBy(banque, banque$Job)
Après avoir exécuté la fonction, vous verrez apparaitre dans la console (en haut à droite) les données présentées par groupes.

Étape 3: Préparation de la banque de données
Vous avez peut-être remarqué que dans la banque de données, la variable dépendante « Job » contient deux catégories : Technicien et Gestionnaire.
Pour mener à bien une régression logistique dans R, il faut que la variable dépendante s’exprime en valeur numérique binaire, c’est à dire « 0 » ou « 1 ». Dans notre cas, on peut donc substituer « Technicien » pour « 0 » et « Gestionnaire » pour « 1 ».
Pour y arriver, nous utiliserons la fonction mutate() du package tidyverse :
banque <- banque %>% mutate(Job = recode(Job, "Technicien" = "0", "Gestionnaire" = "1"))
Vous verrez alors dans votre banque de donnée que les termes ont été substitués par la valeur numérique appropriée.

Afin de s’assurer de ne pas obtenir de message d’erreur lors des phases suivantes, il est conseillé de rappeler à R que les variables utilisées sont toutes numériques. Vous pouvez donc utiliser la fonction as.numeric() pour attribuer cette caractéristique aux variables Job, Salaire et Stress.
banque$Job <- as.numeric(banque$Job)
banque$Salaire <- as.numeric(banque$Salaire)
banque$Stress <- as.numeric(banque$Stress)

Étape 4: Régression logistique simple
La fonction glm() de l’abréviation anglophone generalized linear model permet d’observer si une relation significative existe entre deux variables dans un model. Pour effectuer une régression logistique, il faut indiquer à R que votre variable dépendante se compose de deux catégories et donc qu’elle est binomiale. Ceci se fait en ajoutant family = ‘binomial’ à la fin de vos arguments comme démontré dans l’exemple ci-dessous.
Régression logistique simple :
glm(1 ~ 2, data = 3, family = "binomial")
- – est votre variable dépendante, le poste occupé (Job) dans cet exemple
- – est votre variable indépendante, le salaire (Salaire) dans cet exemple
- – la banque de données où aller chercher les variables, « banque » dans cet exemple
Il faut également attribuer un nom de référence à votre modèle. Pour ce faire, utilisez le symbole « <- ».
Dans notre exemple le nom de référence sera model, ce qui nous donne :
model <- glm(Job ~ Salaire, data=banque, family="binomial")

Dès que vous aurez exécuté cette fonction, vous verrez un nouvel objet apparaitre dans votre environnement en bas à gauche.
Il ne vous reste qu’à utiliser la fonction summary() sur ce nouvel objet pour confirmer si une relation significative existe entre ces deux variables. Une fois cette fonction exécutée, les résultats apparaitront dans la console en haut à droite.
Étape 5: Régression logistique multiple
La fonction glm() sera également utilisée afin d’observer si une relation significative existe entre la variable dépendante (Job) et deux variables indépendantes (Salaire et Stress). Comme il s’agit d’une régression logistique, n’oubliez pas d’indiquer à R que votre variable dépendante est binomiale en ajoutant family = ‘binomial’ à la fin de vos arguments.
Régression logistique multiple:
glm(1 ~ 2 + 3, data = 4, family = "binomial")
- – est votre variable dépendante, le poste occupé (Job) dans cet exemple
- – est une variable indépendante, le salaire (Salaire) dans cet exemple
- – est une variable indépendante, le stress (Stress) dans cet exemple
- – la banque de données où aller chercher les variables, « banque » dans cet exemple
Il faut également attribuer un nom de référence à votre modèle. Pour ce faire, utilisez le symbole « <- ».
Dans notre exemple le nom de référence sera model.multi, ce qui nous donne :
model.multi <- glm(Job ~ Salaire + Stress, data=banque, family="binomial")

Dès que vous aurez exécuté cette fonction, vous verrez un nouvel objet apparaitre dans votre environnement en bas à gauche.
Il ne vous reste qu’à utiliser la fonction summary() sur ce nouvel objet pour confirmer si une relation significative existe entre ces deux variables. Une fois cette fonction exécutée, les résultats apparaitront dans la console en haut à droite.
Étape 6: Interprétation des coefficients
Les régressions logistiques complétées lors des étapes précédentes vous signalent s’il existe une relation significative existe entre la variable dépendante les variables indépendantes.
Autrement dit, dans le cadre de notre exemple, est-ce que le salaire et le stress au travail permettent de prédire le type d’emploi (technicien ou gestionnaire) ? Selon les résultats de nos analyses, le salaire permet effectivement de prédire le type d’emploi (p < .001), mais pas le stress (p = .136).
Nous pouvons aller plus loin en calculant l’exponentiel des coefficients afin de nous aider dans l’interprétation des résultats. Nous pouvons obtenir l’exponentiel des coefficients grâce à la fonction exp(). Ceci facilitera notre interprétation.
Dans notre exemple, la fonction s’exprime ainsi:
exp(model.multi$coefficients)

Pour notre seule variable significative, le Salaire, nous pouvons voir que le résultat est 1.07153, que nous arrondirons à 1.07. Cela signifie que les chances qu’un employé soit un gestionnaire augmentent de 7% pour chaque tranche additionnelle de 1000$ de salaire.
Quelques notes
Truc : Si vous oubliez l’utilité d’une fonction, ou que vous voulez des détails sur celle-ci, utilisez le symbole « ? ». En plaçant ce symbole avant une fonction, et en exécutant la commande, vous ouvrirez une fenêtre d’aide (en bas à droite par défaut). Cette fenêtre présente la fonction, son fonctionnement, les arguments qu’elle nécessite et des exemples de son application. Par exemple pour obtenir de l’information sur la fonction summary(), il vous suffit exécuter la commande:
?summary()
Note : la fonction install.packages() requiert de guillemets pour le package mais pas la fonction library().
Note : le symbole « %>% » est une flèche vers la droite et s’utilise afin de diriger un objet vers la fonction décrite à sa droite. Par exemple, banque %>% mutate(Job = recode(Job, ‘Technicien’ = ‘0’, ‘Gestionnaire’ = ‘1’)) est équivalent à mutate(banque, Job = recode(Job, ‘Technicien’ = ‘0’, ‘Gestionnaire’ = ‘1’)).
Rappel : le symbole « $ » permet de référer à une variable spécifique de votre banque de données (colonne dans votre tableau).
Rappel : le symbole « ~ » est souvent utilisé pour mettre des variables en relation dans des analyses statistiques. Par exemple « âge ~ sexe » signifierait la catégorisation de l’âge par le sexe des participants.
Contenue digeste, beau boulot. Donner le sens de Intercept, standadeviation et autre serait bénéfique pour la compréhension
Bonjour Yann, normalement l’intercept dans une régression logistique n’est pas interprété (ça n’a pas le même genre d’interprétation intéressante que dans une régression linéaire, puisque l’échelle est en log odds). Aussi un écart-type (standard deviation) c’est grosso modo la différence moyenne entre les scores et la moyenne.
bonsoir, je voulais avoir votre avis. je suis un debutant de R. j’ai des difficulte a faire la regression logistic. demarche que j’ai eu a suivre
#preparation logistique
Data$Resultat<-as.numeric(Data$Resultat)
Data$BaignadeEnafant<-as.numeric(Data$BaignadeEnafant)
Data$PêcheEnfant<-as.numeric(Data$PêcheEnfant)
model<-glm(Resultat~BaignadeEnafant,Data=Data,family= »binomial »)
Reponse de R
merci cordialement
Bonjour Madagui, l’argument data est en minuscules. Essaie:
Voir la documentation de la fonction glm() ici: https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/glm
bonjour, Patrick, Merci