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 :

ACM avec un nuage de points pour chaque variable


Sujet :

SAS STAT

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut ACM avec un nuage de points pour chaque variable
    Bonjour à tous,

    Je cherche à réaliser une ACM sous SAS et pour cela j'utilise la proc CORRESP AVEC L'option MCA.
    Cependant, j'aimerais au lieu d'avoir un seul nuage de points avec l'ensemble des variables et leur modalités (peu lisible), une représentation de chaque variable et de ses modalités avec un nuage de points des individus.
    Donc en gros si j'ai 8 variables, avoir un 8 nuages de points.....
    Si quelqu'un a une idée de comment je pourrais faire ça je suis preneur.....

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Par défaut
    Bonjour,
    C'est une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /* nuage de points avec les noms des variables. */
    PROC PLOT DATA=SORTIE_MCA ;
    PLOT DIM2*DIM1='.' $ _NAME_ /HREF=0 VREF=0 VPOS=30 ;
    RUN;
    QUIT ;
     
    /* nuage de points sans les noms des variables. */
    PROC PLOT DATA=SORTIE_MCA ;
    PLOT DIM2*DIM1='.'  /HREF=0 VREF=0 VPOS=30 ;
    RUN;
    QUIT ;

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut
    Bonjour,
    J'ai testé votre code, les problèmes qui en découlent :
    -J'ai une population de 30.000 individus du coup dans le nuage de points, SAS ne m'en affiche qu'une partie, y'a t'il un moyen de forcer le logiciel à tous les afficher (pour avoir la vrai forme du nuage de points)
    - Ensuite la variable _NAME_ ne contient pas les noms des modalités mais des valeurs de la forme "ROWXXXX", pourquoi?

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Par défaut
    Bonjour,
    Il est préférable que tu poste ton code afin qu’on puisse répondre clairement à tes questions car Il y’a plusieurs manières de réaliser une AMC et cela dépend de la forme de tes données d'entrées (sous la forme d’un tableau disjonctif complet ou sous la forme d’un tableau du BURT). Si tes données d’entrée est sous la forme d’un TDC l’option MCA est inutile.
    Sas n’affiche qu’une partie de points car Il y’a beaucoup de points superposés même Proc plot affiche le nombre caché de points sur le plan.

    Cordialement

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut
    Re-bonjour !

    Effectivement, je n'utilise pas l'option MCA de corresp tout simplement parceque j'ai choisi de mettre un tableau disjonctif complet en entrée de la procédure (pour récuperer des informations sur les individus,ce qui n'est apparemment pas possible avec un tableau individus*variables et l'option MCA).
    Je créee donc mon TDC que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TITLE " Création du TDC au vu de faire l'ACM ";
    PROC TRANSREG DATA = BASE 
    DESIGN NOPRINT ;
    MODEL CLASS(NAT_SIN USAGE ZON_MRSQ CLAS GRP/ ZERO = NONE) ;
     OUTPUT OUT = BASEACM;
     RUN ;
    Ensuite, je lance ma proc CORRESP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc CORRESP data=BASEACM outC=TOTO (WHERE = (_TYPE_='OBS')) noprint DIMENS=3;
    VAR &_TRGIND ;
    run;
    J'utilise par la suite la macro de l'INSSE AideACM pour interpréter les résultats (plutôt pratique).
    J'aimerais cependant pouvoir,comme je l'ai dis dans mon premier message, avoir un nuage de points pour chaque variable....

    Concernant la limitation des points, on est bien d'accord que SAS retire que les points superposés et que donc la forme du nuage de points est la meme ?
    Sinon, dans un cadre plus général, je cherche à améliorer mon rendu pour les graphiques des nuages de points ou encore le graphique des variables parcequ'il faut l'avouer c'est quand meme un peu moche.....

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Par défaut
    Bonjour,
    La table TOTO résultant de la PROC TRANSREG contient deux variables SAS _TYPE_ et _NAME_ et le reste sont des variables concernant les coordonnées pour chaque dimension.
    Dans _TYPE_ il y a 2 modalités OBS et VAR contenant tous les informations relatives aux individus et variables.
    Dans _NAME_ il y a 2 types du sigle :
    1er type : commence par Row : Row1, Row2, Row3… et qui remplace, en fait, les noms d’observations dans la table initiale (BASE).
    2nd type : commence par Nom de la variable suivie par ' ' puis le nom de la modalité.
    Donc, pour empêcher les Rows d’être affichés dans le plan factorielle, il faut les effacer (pas supprimer) c.a.d les remplacer par des blancs. (Voir code).

    Puis extraire le nom de chaque variable de sa modalité en créant une nouvelle variable (nom_var). Par exemple la variable AAA pour la modalité m de la table BASE on la trouve come ça (AAA m) dans _name_.
    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
     
    data toto_1;
    set toto ;
    /* Remplacer les Rows par des blancs */
    if substr(_name_, 1, 3)='Row' then _name_=' ' ;
     
    /* Extraire les noms des  variables de leurs modalités correspondantes */
    NOM_VAR= scan(_NAME_, 1, " ");
    run ;	 
     
    /* à refaire 8 fois autant que les variable en remplaçant à chaque fois le nom d’une novelle variable ici >>AAA */
    PROC PLOT DATA=TOTO_1 (WHERE = (_TYPE_='OBS' or nom_var='AAA'));
    PLOT DIM2*DIM1='.' $ _NAME_ /HREF=0 VREF=0 VPOS=30 ;
    RUN;
    QUIT ;
    Bon Courage

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut
    Ok ca à l'air plutôt limpide comme ça, par contre je viens de réaliser que je n'ai que la modalité OBS dans ma variable _TYPE_ donc à priori je ne récupère pas d'infos sur mes variables ! Je comprends pas trop pourquoi :/

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Par défaut
    Bonjour,
    Sur le plan factorielle tu as des points « . » sans sigle pour _type_=’OBS’ quelque soit la variable saisie dans « WHERE ».
    Pour_type_=’VAR’ : si,
    NAT_SIN a 3 modalités tu as (NAT_SIN m1 NAT_SIN m2 NAT_SIN m3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (WHERE = (_TYPE_='OBS' or nom_var='NAT_SIN'));
    Pour USAGE à 2 modalités tu as (USAGE s1 USAGE s2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (WHERE = (_TYPE_='OBS' or nom_var= 'USAGE'));

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut
    Bonjour !
    Je crois que nous nous sommes mal compris, ce que je voulais dire c'est que dans ma variable _TYPE_ j'ai simplement les observations (OBS) dans ma base de données.
    Je n'ai pas d'informations sur les variables (je n'ai pas de lignes avec un _TYPE_=VAR) et du coup je n'ai pas les coordonnées des variables sur le plan

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Par défaut
    Essayes de utiliser cette ligne : nom_var= scan(left(_name_), 1, " ");

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut
    Désolé je ne comprends pas, pourtant vraiment j'essaye parceque si je règle ce problème je pourrais enfin afficher mes différents nuages de points.
    Mon problème vient du fait que mon ACM ne me ressort aucune info sur les variables dans ma base de donnée de sortie, j'ai autant de lignes dans ma base de sortie que d'individus et quand je filtre
    sur le _type_ en précisant que _type_=VAR, je ne retrouve rien.
    J'imagine que ca doit être une option dans la proc corresp que j'ai oublié mais je vois pas laquelle!


    Sachant que lorsqu'on fait une ACM avec l'option MCA, on utilise un tableau indivuds*variables mais on n'obtient des infos QUE sur les variables.
    Et la quand je fais mon acm avec un tableau disjonctif complet, je n'obtiens des infos QUE sur les individus.


    Ou est-ce que je me trompe?
    Désolé, ca m'ennuie de te faire réagir autant de fois sans que je comprenne la source de mon erreur...

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut
    Milles excuses, j'avais rajouté une condition quand j'utilisais ma base, je suis définitivement incorrigible .
    Je vais tenter de tracer les nuages de points maintenant =)


    Encore Merci hossward, tu as été d'une très grande aide....

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 52
    Par défaut
    Dernière petite requête de ma part.
    Concernant les nuages de points, pour afficher le nom des modalités, il y a l'instruction $ _NAME_ dans la proc plot.
    Sauf que j'utilise une proc gplot (c'est plus joli) et du coup la commande pour afficher les noms ne marche plus !
    J'ai essayé avec un pointlabel sans succès.....y'a t'il une option pour permettre d'afficher un texte en dessous des points ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/11/2014, 00h51
  2. Réponses: 3
    Dernier message: 22/08/2014, 15h25
  3. Réponses: 3
    Dernier message: 29/10/2013, 15h44
  4. menu horizontal avec une phrase en dropdown pour chaque rubrique
    Par hayalou dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 23/11/2010, 13h13
  5. Affectation des points pour chaque courbe
    Par azertyuio dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 09/04/2010, 00h07

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