IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS STAT Discussion :

Suppression de variables corrélés


Sujet :

SAS STAT

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 19
    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

  2. #2
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 19
    Par défaut
    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.

  5. #5
    Membre Expert
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Par défaut
    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..

  6. #6
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Bon courage à toi pour l'automatisation!

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 19
    Par défaut
    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.

  8. #8
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Je savais que c'etait pas possible en une seule passe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Message d'avant suppression avec variable
    Par yassino01 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/04/2012, 16h36
  2. Liste : suppression de variables libres
    Par jeanbah dans le forum Prolog
    Réponses: 3
    Dernier message: 29/11/2011, 14h26
  3. Suppression espace variable script appel de commande dos
    Par bollam dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/08/2010, 15h15
  4. variables corrélées (Images)
    Par afnane dans le forum Statistiques, Data Mining et Data Science
    Réponses: 1
    Dernier message: 29/06/2008, 18h33
  5. Réponses: 5
    Dernier message: 15/06/2007, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo