Matrice de corrélation, et R

Plus j’avance dans R, plus je trouve cet outil fabuleux.

En mai-juin dernier, une élève kiné vint me voir pour que je lui fasse des stats avec des petits p pour son mémoire final (je trouve ça parfaitement débile, mais c’est un autre débat).

Je n’avais pas touché un logiciel de statistiques (piraté, d’ailleurs) depuis ma thèse, et encore, j’avais mis à contribution fait faire tout le boulot à un interne du DIM de mon CHU.

Autrement dit, je partais de très très loin.

Je suis allé cherché le meilleur test adapté à ses données, puis je suis tombé sur un os, n’ayant plus de logiciel à disposition. Finalement, je m’en suis sorti avec je ne sais plus quel site qui proposait des feuilles Excel® permettant de faire le test voulu.

Je ne sais pas si le test était bon, en tout cas, le jury de distingués kinés, qui doit être aussi calé en statistiques que moi (huhuhuhuhuhu…), n’a pas élevé de protestations devant mon Wilcoxon.

Influencés par le Scrabble®, avec un W et un X dans un nom propre, ils ont dû être impressionnés, tout comme moi je le fus. La prochaine fois, je leur sortirai un test de Wald–Wolfowitz.

Au cours de mes recherches, j’ai découvert R, logiciel gratuit, communautaire, surpuissant et totalement imbitable.

Après un ou deux MOOC, le survol de dizaines de ressources disponibles sur la toile, et une rencontre, j’ai commencé à utiliser R, presque avec plaisir.

Je triche quand même un peu car, toujours à la suite de discussions sur Twitter, un pharma (@PotardDechaine ou @PierrikFaure ?) m’a fait découvrir RStudio, une interface qui rend R un peu moins aride.

Les choses simples sont difficiles sur R (ne serait-ce que pour visualiser ses données…), et les choses complexes sont très simples à faire. Pour corser le tout, certaines opérations ne sont possibles qu’après avoir téléchargé et installé des packages.

Bref, R se mérite, mais on peut faire des choses sympas.

Petit exemple.

Imaginez 65 individus chez lesquels ont été mesurées 7 variables quantitatives continues. Vous souhaitez savoir si certaines de ces variables sont corrélées entre elles.

Mon fichier texte (R ne lit que les fichiers textes, qui sont simples à obtenir à partir d’un fichier Excel®) s’appelle JMV.

Une seule ligne de commande, cor(JMV), permet de sortir une matrice de corrélation:

matcor8On ne peut pas faire beaucoup plus simple, non?

Par exemple, le coefficient de corrélation entre Var1 et Var2 est de 0.84 et des poussières.

On peut imaginer qu’un graphique sera plus parlant:

matcorr9Quelques lignes de code permettent d’obtenir un tel graphique:

>base <- JMV

>base.r <- abs(cor(base))

>cpairs(base, gap = .5)

Elles ne s’inventent pas, mais je n’ai pas eu trop de difficultés pour les trouver.

C’est joli, mais presque plutôt moins informatif que la matrice de corrélation, car on n’arrive toujours pas à discerner quelles sont les variables qui sont bien corrélées entre elles, et surtout si on pourrait en grouper certaines.

Point curieux, comme me l’a fait remarquer @Potarddechaine, s’agissant de coefficients de corrélation, ils devraient être compris entre -1 et +1, or l’échelle montre de toutes autres valeurs (67, 68, 69, 70…). Quelles sont-elles? Quels sont leurs réseaux?

Une autre série de lignes de code permet de classer ces corrélations et de les colorier en fonction de leur intensité (rouge si coefficient de corrélation>+/-0.5, bleu entre +/-0.5 et +/-0.18, blanc en dessous:

corrmtx3On commence à pouvoir grouper certaines variables en fonction de leurs corrélations (par exemple Var1, Var5 et Var2). Je vous avais déjà montré ce type de graphique qui m’avait beaucoup impressionné. Mais ça, c’était avant.

Aujourd’hui, j’ai découvert le package corrplot.

Et là, R devient sublime.

Voici quelques graphiques que j’ai tiré sans trop de difficultés de ma série de données:

corrmtx4corrplot1Par exemple, pour obtenir le graphique ci-dessus, le code à entrer dans R est « tout simplement »:

>corrplot(JMV_corr, method = « number »)

corrplot3

On peut ainsi regrouper les coefficients de corrélation (-1 à +1 😉 ), les illustrer de différents manières, même coupler les graphiques avec un test statistique, bref, rendre intelligibles des données en les rendant belles.

13 Replies to “Matrice de corrélation, et R”

      1. Ah, mais j’espérais VOTRE point de vue sur le fait que ce test s’applique sans condition 🙂 Vous aurez remarqué que la définition de wikipédia s’éloigne sensiblement de celle qu’on retrouve un peu partout ailleurs.

        S’agissant de R ‘R is hard ’cause thinking is hard’ 🙂

        1. Oups: le test de Wilcoxon a, malheureusement, des conditions d’applications:
          1/ il ne doit pas (ou peu) y avoir d’ex aequo, puisque c’est un test basé sur les rangs (difficile de ranger 2 valeurs égales!)
          2/ indépendance des individus (sinon penser aux séries appariées

          Cela dit, le test de Wilcoxon (comme son petit copain Mann-Whitney) est non-paramétrique, et a donc moins de condition d’application que le test de student découvert par William Gosset. Mais moins puissant aussi.
          Mais pourquoi fais-tu un test de Wilcoxon alors que tu parles de corrélation? ce sera plutot Pearson (paramétrique) ou Spearman (non paramétrique) dans ce cas.

          1. Vi, j’imagine!
            Tu vas être déçu, tout le monde me parle de ce Wilcoxon, mais ce n’en était probablement même pas un. Je ne me souviens pas du test que je lui ai sorti. Wilcoxon car j’ai toujours aimé ce nom. Sinon, chose à peu près certaine, les stats de ma kiné n’étaient pas une corrélation.

  1. On lit un peu trop souvent que les tests non paramétriques s’appliquent sans condition, ce qui est faux. En particulier, pour pouvoir comparer la variation du paramètre de tendance centrale avec le test de Wilcoxon (qui s’applique aux sériés appariées et non indépendantes, comme lu en commentaire), on suppose que les deux distributions ont globalement la même forme (notamment en terme de dispersion)

    1. Jean-Marie va finir par m’interdire d’écrire dans son blog, si je continue! mais bon je tente quand même pour voir jusqu’à quel moment il va craquer 😉
      Le test non-paramétrique de Wilcoxon et de ses petits camarades Mann et Whitney (non pas Withney Huston, ne soyez pas si dissipés au fond de la classe…) est un test basé sur les rangs, qui compare, stricto sensus, 2 distributions observées. Par habitude (certains obsessionnels diraient « abus de langage ») il est utilisé comme test de comparaison de 2 médianes observées voir même 2 moyennes observées. Une question au fond de la classe: Où est le problème si les 2 distributions sont symétriques (comme un loi Normale par exemple)? dans ce cas, moyenne=médiane, mais attention quand même aux distributions très différentes (situation rarement observée quand même).
      Il existe (au moins) 2 formes de ce test: pour échantillons indépendants, et pour échantillons dépendants (séries appariées). Certains ont introduit des corrections diverses et variées pour répondre aux critiques incessantes de stateux obsessionnels.

  2. Bonjour,
    Svp, quelle est l’instruction de R qui vous a permit de classer ces corrélations et de les colorier en fonction de leur intensité (rouge si coefficient de corrélation>+/-0.5, bleu entre +/-0.5 et +/-0.18, blanc sur le graphique de dispersion de toutes les paires de variables?

  3. Bonjour,
    Vous ne sauriez pas, par hasard, comment on peut produire une matrice similaire mais en calculant le coefficient de corrélation d’une variable contre une 20aine?

Laissez une réponse

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.