Matrice de corrélation sous SAS

Découvrez, avec la proc corr, comment visualiser les liens de corrélation entre vos variables sous SAS

Nous allons illustrer dans cet article comment utiliser la proc corr afin de visualiser les liens de corrélation entre les variables d'un fichier. Nous allons évoquer les coefficients de corrélation de Pearson, de Kendall ainsi que le coefficient de corrélation de rang de Spearman. Cet article de va pas entrer dans la théorie sous-jacente aux calculs de ces coefficients. Si la théorie vous intéresse, sachez que l'ouvrage Les bases de l'analyse de données l'illustre plus en détails.

Données de travail

Nous allons travailler sur les données statistiques Eurostat 2002 qui référencient, pour 25 pays d'Europe, un certain nombre de statistiques économiques. Chargeons le fichier et visualisons-en un extrait :


proc import datafile='/home/u49997643/gorenja/eurostat2002.txt' 
out=work.statEU dbms=dlm replace;
delimiter = '09'x;
getnames  = yes;
run;

proc print data=work.statEU;
SAS proc corr correlation lineaire matrice linear matrix pearson kendall spearman

Comme nous le voyons, un certain nombre de statistiques sont à notre disposition. L'ensemble des variables sont numériques, ce qui constitue un prérequis. Voici, ci-dessous le détails des variables que nous allons étudier :

  • l'espérance de vie à la naissance d'un homme (en années),
  • l'espérance de vie à la naissance d'une femme (en années),
  • la population (en milliers),
  • le taux d'emploi, soit le nombre d'actifs occupés sur la population en âge de travailler,
  • le produit intérieur brut par habitant,
  • le taux d'inflation,
  • le taux d'activité, soit la population active sur la population en âge de travailler,
  • le taux de chômage, soit le nombre de chômeurs sur la population active,
  • le taux de chômage longue durée,
  • le nombre de mariages pour 1000 personnes,
  • le nombre d'abonnés aux services de téléphonie mobile (en milliers)

Matrice de corrélation linéaire

La façon la plus simple de calculer les coefficients de corrélation linéaire est la suivante :


proc corr data=work.statEU;
run;
SAS proc corr correlation lineaire matrice linear matrix pearson kendall spearman

Vous remarquez que nous n'avons stipulé aucune méthode de calcul si bien que, à l'instar d'un certain nombre de logiciels statistiques, c'est le coefficient de corrélation linéaire de Pearson qui est calculé par défaut. Ce coefficient bien connu permet de mesurer l'intensité d'une relation de corrélation linéaire entre deux variables. Ce coefficient n'est pertinent que si la relation est linéaire. Il convient, par conséquent, d'être prudent quant à son interprétation. La matrice ci-dessus peut être agrémentée de nuages de points. Ce type de graphique est en effet celui qui convient le mieux à l'estimation visuelle du type de relation :


proc corr data=work.statEU plots=matrix(histogram); 
run;
SAS proc corr correlation lineaire matrice linear matrix pearson kendall spearman

Par défaut le nombre de variables affichées est 5. Vous pouvez toutes les afficher ou afficher uniquement le nombre de variables voulues N via l'option NVAR=ALL ou NVAR=N. Par ailleurs il est possible de préciser les variables via l'instruction VAR dans le bloc proc corr. Ci-dessous un exemple :


proc corr data=work.statEU plots=matrix(histogram nvar=6); 
 var espVieHomme espVieFemme population txEmploi PIBH txChomage;
run;

Heatmap et représentation graphique d'une matrice de corrélation

Il est courant de visualiser une matrice de corrélation via ce que l'on appelle un heatmap. Cette représentation, via une plage de couleurs prédéfinies, donne au lecteur un aperçu instantané de l'intensité des liens qui unissent les variables entre elles. Il est tout à fait possible de dresser un heatmap sous SAS. Nous n'allons pas ici détailler le code, néanmoins, pour ceux que cela intéresse, voici deux ressources issues du blog SAS détaillant une possible implémentation :

Displaying upper lower triangle correlation matrix
Correlations matrix heatmap with sas

Nous avons appliqué le code issu de la première ressource à nos données, voici le résultat :


/* Calcul de la matrice de correlation de Pearson */
%macro prepCorrData(in=,out=);
  proc corr data=&in. noprint
    pearson
    outp=work._tmpCorr
    vardef=df
  ;
  run;
 
/* Preparation des donnees */
data &out.;
  keep x y r;
  set work._tmpCorr(where=(_TYPE_="CORR"));
  array v{*} _numeric_;
  x = _NAME_;
  do i = dim(v) to 1 by -1;
    y = vname(v(i));
    r = v(i);
    /* seule la partie inferieure de la matrice est conservee */
    if (i<_n_) then
      r=.;
    output;
  end;
run;
 
proc datasets lib=work nolist nowarn;
  delete _tmpcorr;
quit;
%mend;

ods path work.mystore(update) sashelp.tmplmst(read);
 
proc template;
  define statgraph corrHeatmap;
   dynamic _Title;
    begingraph;
      entrytitle _Title;
      rangeattrmap name='map';
      /* Definition de la pallette de couleur, ici rouge/blanc/bleu */
      range -1 - 1 / rangecolormodel=(cxff0000 cxffffff cx0000ff);
      endrangeattrmap;
      rangeattrvar var=r attrvar=r attrmap='map';
      layout overlay / 
        xaxisopts=(display=(line ticks tickvalues)) 
        yaxisopts=(display=(line ticks tickvalues));
        heatmapparm x = x y = y colorresponse = r / 
          xbinaxis=false ybinaxis=false
          name = "heatmap" display=all;
        continuouslegend "heatmap" / 
          orient = vertical location = outside title="Pearson Correlation";
      endlayout;
    endgraph;
  end;
run;

/* Creation du canvas */
ods graphics /height=600 width=800 imagemap;

/* Application de la macro sur notre dataframe statEU */ 
%prepCorrData(in=work.statEU,out=work.statEU_r);
proc sgrender data=work.statEU_r template=corrHeatmap;
   dynamic _title="Corr matrix for stat EU";
run;
SAS proc corr correlation lineaire matrice linear matrix pearson kendall spearman

Méthode de calcul

Comme nous l'avons dit en introduction, la procédure proc corr prend également en charge le calcul des coefficients de Kendall, de Spearman ou d'Hoeffding. Il suffira de spécifier ces options sur l'instruction proc corr :


proc corr data=work.statEU spearman; 
run;

La proc corr peut également, via l'option COV couplée à l'option PEARSON, éditer la matrice de covariance. Il en sera de même pour la somme des carrés et des produits (option SSCP) ou la somme des carrés et des produits des écarts à la moyenne (option CSSCP).


Retrouvez dans la rubrique "Nos datasets" toutes les données dont vous aurez besoin pour tester et pratiquer !