La régression logistique par l’exemple

tracé des battement du coeur

 

Prérequis

Dans cet article, nous allons voir comment réaliser, en pratique, une régression logistique avec le logiciel R. Pour tirer pleinement profit de cet article, je vous recommande de lire l’article d’introduction à la régression logistique.

👉 Cliquez ici pour accéder à l’article d’introduction à la régression logistique.

 

1. Les données pour la régression logistique

Pour illustrer la réalisation d’une régression logistique, nous allons utiliser le jeu de données heart_disease du package funModeling. Ce dataset contient les données de 303 patients inclus dans un essai clinique dans le domaine de la cardiologie. Treize variables sont mesurées, comme l‘âge, le sexe, le niveau de douleur de la poitrine, la concentration de cholestérol dans le sang, etc…. La présence, ou l’absence d’une pathologie cardiaque est renseignée dans la variable has_heart_disease (no pour l’absence de pathologie, yes pour la présence).

Vous trouverez plus d’informations sur ces données sur le site de l’UCI.

 

Pour charger ces données dans R, nous utilisons les commandes suivantes :

 

Dans cet exemple, nous allons chercher à évaluer si deux variables (la fréquence cardiaque maximale max_heart_rate et le sexe gender) sont significativement liées à la présence d’une pathologie cardiaque, et si c’est le cas, à caractériser ces relations.

 

2. Visualisations

2.1 Préambule à la régression logistique

Avant de commencer la régression logistique, nous chargeons le super package tidyverse qui sera largement utiliser pour manipuler les données, par l’intermédiaire du package dyplyr et du pipe%>%.

 

Pour plus d’information sur la manipulation de données, vous pouvez consulter cet article :

👉Initiation à la manipulation de données avec le package dplyr

 

Ensuite, pour éviter tout conflits de packages, nous déclarons nos préférences, à l’aide de la fonction conflict_prefer() du package  conflicted :

 

Pour plus d’information sur la gestion des conflits de packages, vous pouvez consulter cet article :

👉 Un petit hack pour éviter les conflits de packages sous R

 

Nous pouvons, préalablement à la réalisation de la régression logistique, visualiser les relations entre la pathologie cardiaque et les deux variables explicatives.

Pour cela, nous créons une variable has_heart_disease_num afin de recoder les modalités de la variable has_heart_disease : “no” en 0 et “yes” en 1, grâce à la fonction mutate().

Nous en profitons aussi pour renommer heart_disease en HD (plus court) :

 

 

2.2. Plots

régression logistique : lien avec une variable numérique

Il semble exister un lien : les sujets ayant une fréquence cardiaque maximale élevée apparaissant moins souvent atteints de pathologie cardiaque.

 

Intéressons-nous, à présent, à la relation entre la pathologie cardiaque et le sexe :

 

régression logistique : lien avec une variable catégorielle

 

 

Il semble également exister un lien, les hommes apparaissant plus fréquemment atteints de pathologie cardiaque que les femmes.

 

3. Réalisation de la régression logistique

3.1. Ajustement du modèle de régression logistique

Pour réaliser une régression logistique avec R, nous utilisons la fonction glm(), et l’argument family=binomial:

 

 

Avant de pouvoir interpréter les résultats, il est nécessaire de vérifier que les conditions d’applications sont satisfaites.

 

3.2. Vérification des conditions d’application de la régression logistique

3.2.1. Nombre de cas suffisants

Pour réaliser une régression logistique, il est nécessaire d’avoir un nombre suffisant de données. En pratique, il est recommandé d’avoir au moins 10 fois plus d’événements que de paramètres dans le modèle.

En appliquant la fonction summary()nous voyons trois lignes, il y a donc 3 paramètres. Notre jeu de données doit donc contenir 3*10 malades.

C’est bien le cas ici, puisque nous avons 139 malades :

 

3.2.2 Absence de surdispersion

Dans le cas des GLM, la variance résiduelle est estimée à partir d’une loi théorique, ici la loi binomiale (c’est la structure d’erreur du GLM).

Si la dispersion réelle des données est supérieure à celle prévue par la théorie, alors on parle de surdispersion.

En cas de surdispersion, l’erreur standard des paramètres est sous-estimée. Ceci peut conduire à des p-values (pour chacun des coefficients) excessivement faibles, et donc aboutir à des conclusions erronées.

La surdispersion est généralement évaluée par le ratio de la déviance résiduelle sur le nombre de degrés de libertés du modèle :

$$ \widehat{\phi} = \frac{{deviance\; residuelle}} {nddl} $$

Si ce ratio est supérieur à 1, alors il y a surdispersion. Cette supériorité à 1 est un peu subjective, dans le sens où il n’existe pas de seuil (1.5, 2 ?) à partir duquel on considère qu’il y a surdispersion.

En cas de surdispersion, il est nécessaire d’utiliser un autre structure d’erreur, telle que la structure “quasi Binomiale“.

Celle-ci va conduire à une augmentation de l’erreur standard des paramètres du modèle, par un facteur :

$$ \sqrt(\widehat{\phi}) $$

Cette augmentation de l’erreur standard des paramètres va entraîner une diminution de la statistique des tests et donc une augmentation de la p-value.

 

Ici, $$ \widehat{\phi} = \frac{{336.67}} {300} = 1.12  $$

Nous pouvons donc considérer qu’il n’y a pas de sudispersion.

 

Remarque : la variance résiduelle et le nombre de degrés de liberté sont indiqués en bas de la sortie de la fonction summary()

 

En cas de surdispersion, voici un exemple d’utilisation de la loi quasi binomial :

 

Dans cet exemple, les augmentations des erreurs standards sont très faibles, car le ratio était proche de 1.

Remarque : lorsqu’on utilise une loi quasi (binomial ici, ou de Poisson dans le cadre d’une régression de Poisson) , il est ensuite nécessaire, lorsqu’on cherche à évaluer les effets propres des variables d’utiliser des tests F et non des tests du Chi2.

 

Vous trouverez une illustration de ce point plus loin dans cet article, ainsi que dans le paragraphe 4.6 de l’article suivant :

👉Tutoriel : GLM sur données de comptage (régression de Poisson) avec R

4. Interprétation des résultats de la régression logistique

 

 

Comme pour la régression linéaire simple, la ligne correspondant à l’intercept a peu d’intérêt. En revanche, les lignes suivantes sont intéressantes.

Sur la ligne correspondant à la variable age, nous pouvons voir que le log OR = – 0.045, soit un OR = exp(-0.045)= 0.95.  Cela signifie que plus la fréquence cardiaque maximale est élevée plus le risque d’être malade diminue (car le signe du coefficient est négatif, et que par conséquent l’OR<1).

Nous pouvons également voir que la pvalue associée est <0.05. Nous pouvons donc dire qu’il existe une association significative entre la fréquence cardiaque maximale et un risque de pathologie cardiaque, au risque (alpha) de 5%. Au final, on peut dire “si la fréquence cardiaque maximale augmente, alors le risque de la maladie cardiaque diminue“, ou encore “le risque de maladie cardiaque est significativement moins fort si la fréquence cardiaque est plus élevée“. Une fréquence cardiaque maximale élevée est ainsi un facteur protecteur du risque de maladie cardiaque.

 

Concernant la ligne relative à la variable gender, nous pouvons voir que l’intitulé est gendermale. Les résultats fournis concernent alors les hommes relativement aux femmes qui servent de référence, car female est devant male selon l’ordre alphabétique.

Les résultats nous montrent une association positive (log OR >0) et significative (p-value <0.05) entre le sexe masculin et le risque de maladie cardiaque. Nous pouvons aller plus loin en calculant l’OR:

 

Si la maladie cardiaque est peu fréquente dans la population étudiée (<10%), nous pouvons interpréter l’OR comme un risque relatif et dire que le risque de maladie cardiaque est 4 fois plus important chez les hommes que chez les femmes.
Sinon, l’odds ratio traduit la réduction relative des odds (ce qui n’est pas très intuitif). On dira alors que la maladie est plus fortement associée chez les hommes que chez les femmes, mais sans quantifier cette relation.

Nous pouvons obtenir les effets propre des deux variables, à l’aide de la fonction Anova du package car :

 

En cas de surdispersion, et d’utilisation d’une loi quasibinomial, il faudrait employer :

 

 

5. Mise en forme et visualisation des résultats 

Les résultats peuvent facilement être mis en forme à l’aide du package finalfit:

Voici le rendu :

résultats de la régression logistique

 

De même, un plot des résultats peut être réalisé avec la fonction or_plot() du package finalfit:

 

plot des odds ration d'une régression logistique

 

Vous trouverez plus de détails sur l’utilisation du package finalfit dans cet article :

👉 Calculer et rapporter les odds ratio sans se fatiguer !

 

Conclusion

J’espère que cet article vous permettra d’appréhender plus facilement la régression logistique sous R, ainsi que l’interprétation des résultats.

Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏

👉 Cliquez ici pour soutenir le blog Statistiques et Logiciel R

 

Image par PublicDomainPictures de Pixabay 

Partager l'article
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

10 commentaires

  1. DABIRE Répondre

    Super, j’aimerais vraiment avoir plus d’articles pour apprendre le logiciel R. Svp avez vous des documents pour moi qui vont me permettre d’approfondir mes connaissances sur R

  2. Philippe MICHEL Répondre

    Merci pour cet article comme toujours très intéressant & pratique.
    Petit problème technique dans le chapitre 3.2.2, les exemples ne s’affichent pas.

  3. ada Répondre

    Bonjour, merci pour ce tutoriel
    J’ai une petite question: Je recoit cette erreur, je ne sais pas son origine, veuillez m’aclaircir ce point , merci
    > conflict_prefer(“filter”, “dplyr”)
    [conflicted] Removing existing preference
    [conflicted] Will prefer dplyr::filter over any other package

    • Claire Della Vedova Auteur de l’articleRépondre

      Ce n’est pas un message d’erreur, juste un message d’information.

  4. Floribert Muzembe Répondre

    Bonjour chère Claire,
    Merci pour cet article. Comme pour tous vos articles, il est magnifique. Que du bonheur! La régression logistique est très utilisée en épidémiologie et là, pour la significativité d’association entre la variable réponse (souvent une maladie ou un décès) et les prédicteurs (facteurs de risque) , nous préférons souvent l’intervalle de confiance de l’OR au p (p-value). Pareil pour le risque relatif (RR).

  5. MALANDA Répondre

    Bonsoir Claire,
    Merci pour la qualité de l’article. J’ai beaucoup apprécié les conditions de validité du modèle. Comme les autres articles, tu présentes les notions simplement et cela donne envie d’apprendre. Continue à m’envoyer les articles.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *