Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS STAT
SAS STAT Forum d'entraide sur les fonctionnalités liées à la statistique sur SAS : statistique descriptive, test, régression, classification
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/04/2011, 17h27   #1
Invité régulier
 
Homme Damien Guiavarch
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Damien Guiavarch
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 8
Points : 8
Par défaut Suppression de variables corrélés

Bonjour,

Je voudrais supprimer les variables les plus corrélés entre elles. Pour connaitre les corrélations j'utilise la proc corr, mais après je bloque.

Un exemple pour plus de précision:
si deux variables ont un coefficient de corrélation de 0,9 alors je voudrais en supprimer une des deux, afin d'éviter les doublons dans mon analyse.

Est ce que quelqu'un pourrait m'aider?

Merci
damien29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 17h49   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Proc corr DATA=sashelp.Shoes pearson spearman
outp=pearson /*outs=spearman*/ noprint;
var Stores Sales inventory returns;
run;
 
DATA pearson(DROP=_type_ RENAME=(_name_=variable1));
SET pearson;
WHERE _TYPE_='CORR';
RUN;
 
PROC TRANSPOSE DATA=pearson name=variable2 prefix=correlation  out=pearson;
var Stores Sales inventory returns;
BY variable1 notsorted;
run;
 
DATA pearson;
SET pearson;
WHERE variable1<variable2;
abscorrelation=abs(correlation1);
run;
Il manque une étape, c'est pas si évident
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 21h50   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonjour Damien.
Pourquoi automatiser un tel procédé ? Il n'est pas équivalent de choisir l'une ou l'autre des variables hautement corrélées : l'une peut avoir plus d'importance métier que l'autre. Généralement je fais ce genre de choses manuellement ; c'est chiant mais on contrôle ce qu'on fait.
Accessoirement, on peut avoir des corrélations très élevées alors que les variables ont peu liées, à cause d'observations atypiques. On a alors des résultats très divergents selon le type de corrélation utilisée (Spearman ou Pearson ?).
Cela dit, voici un détecteur de couples de variables très corrélées. Il est très simple de s'en sortir avec l'ODS OUTPUT et l'indispensable option RANK dans la proc CORR qui range les couples de variables par corrélation décroissante (en valeur absolue).
Code :
1
2
3
4
5
6
7
8
9
10
%LET liste = Stores Sales inventory returns ;
ODS EXCLUDE ALL ;
ODS OUTPUT pearsonCorr = work.r (KEEP=variable best2 r2 WHERE=(ABS(r2)>.9));
Proc corr DATA=sashelp.Shoes pearson rank ;
var &liste ;
WITH &liste ;
run;
ODS SELECT ALL ;
PROC PRINT NOOBS ;
RUN ;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 10h59   #4
Invité régulier
 
Homme Damien Guiavarch
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Damien Guiavarch
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 8
Points : 8
Merci pour vos codes.

J'aurais voulu automatiser le processus car je suis en train de réaliser une première analyse qui sera mise à jour 3 fois par ans. Par conséquent j'aurais voulu trouver une méthode permettant de supprimer les variables inutiles en lançant seulement la macro et non regarder en détails les coefficients de corrélations.
damien29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h22   #5
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Bonjour Damien,

Suivant le contexte il est peut être envisageable d'automatiser. Mais je suis d'accord avec Olivier, il est important de s'adapter au contexte (et non l'inverse!). d'autant plus que si tu ne lances ton code 3 fois par an, tu peux simplement copier coller ton précédent code et faire qq modifs, ce n'est pas très long..
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h27   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Bon courage à toi pour l'automatisation!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 14h04   #7
Invité régulier
 
Homme Damien Guiavarch
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Damien Guiavarch
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 8
Points : 8
J'ai trouvé une méthode (elle vaut ce qu'elle vaut).

Après avoir créer la matrice des corrélations, je compte pour chaque variables le nombre de fois qu'elles dépassent mon seuil de coefficient de corrélation (par exemple 0,9), cela me donne les variables les plus corrélés avec d'autres. Puis pour en avoir qu'une seule, je somme les coefficients de corrélations. Et enfin je supprime la variable qui a la plus grande somme.
Je relance ma proc corr et je réitère cette méthode.
damien29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 14h15   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Je savais que c'etait pas possible en une seule passe
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h46.


 
 
 
 
Partenaires

Hébergement Web