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 :

Proc CORRESP : Valeurs propres


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Proc CORRESP : Valeurs propres
    Bonjour,

    Je dois effectuer une ACM puis CAH sur des variables qualitatives (19 variables, 59 modalités). J'ai effectué les traitements de classes, V de Cramer.
    Après avoir utilisé la proc Transreg pour obtenir un tableau disjonctif complet, j'ai utilisé la proc corresp pour effectuer mon ACM.
    Afin de pouvoir continuer mon étude (proc fastclus, proc cluster, proc tree), j'aimerai déterminer le nombre d'axe à choisir.
    Tout d'abord comment détermine t-on le choix de la dimension de la proc Corresp (option dimens=k).

    Ensuite, je veux récupérer les valeurs propres afin d'en tracer un éboulis des valeurs propres. Comment peut-on récupérer les valeurs propres avec la proc Corresp ?
    En utilisant l'option "outc", j'ai une ligne de _Type_ "Inertia" dans ma table "results" avec les variables Contrib1--Contrib5 mais je ne sais pas ce que cela représente.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc corresp data=table_dj dimens=5 outc=results noprint;
    var &_trgind;
    id ID;
    run;
    Si une âme charitable pouvait m'aider.

    Merci

    Dacodac

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    Pour récupérer les valeurs propres avec la proc Corresp, j’a enlever l’option dimens=5 afin de garder les 19 contributions relatives aux axes factoriels. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    proc corresp data=table_dj outc=results noprint;
    var &_trgind ;
    id ID;
    run;
     
    data inertie (keep=contr1-contr19) ;
    set results ;
    if _type_='INERTIA' then output ;
    run ;	
     
    proc transpose data=inertie out=inertie_col ;
    var _all_ ;
    run ;
    Généralement, les axes factoriels qui sont à conserver, pour la classification, sont ceux qui engendrent un sous-espace dans le quel le nuage des individus à classer est stable. En pratique on garde un peu plus de la moitié, même une chute d’inertie constatée au bout de quelques axes à l’examen de l’histogramme des valeurs propres associées à ces axes.

    Ward

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci de votre réponse.

    Par défaut si l'on précise par l'option dimens= de la proc CORRESP, il prend 2 axes factoriels, j'ai donc mis "dimens=19" pour faire comme vous avez dis. J'ai donc bien récupéré les contributions sur les 19 axes factoriels. Le soucis est que lorsque j'additionne toutes ces contributions je dépasse 1. Il me semblait que la somme des valeurs propres était égale à 1. Les contributions sont ils vraiment les valeurs propres ?

    J'ai lu sur l'aide de la proc CORRESP que l'option "outstat=" permettait de récupérer dans un table les valeurs propres, or je n'arrive pas à faire fonctionner cette option. Quelqu'un connait-il cette option là ?

    Ensuite concernant la corrélation de mes variables qualitatives, j'ai donc utilisé le V de Cramer. Le problème c'est que j'ai énormément de combinaisons entre mes variables, donc j'ai fait une macro pour sortir tout les résultats : cela me sort donc beaucoup de proc FREQ à la suite. Quelqu'un sait-il s'il y a un moyen de sortir un tableau Var*Var avec les V de Cramer à l'intérieur. Et enfin, à partir de quel seuil considère-t-on que deux variables sont trop corrélés et qu'il faut donc en éliminer une (à partir d'un V de Cramer à 0,7 ? 0,8 ?)

    Merci d'avance.

    Dacodac

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    - Dans ton cas, c’est normal que l’inertie totale dépasse le 1. Elle est à peu près égale à: 2.105263158 ??
    - Concernant le problème de ta macro tu peux la poster et peut être on peut t’aider.
    - Rappel : option outstat= n’est pas une option propre à proc corresp me semble-t-il ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    En effet je me suis trompé, il n'y a pas de "outstat=". Mon inertie est de 1,53 en cumulant les 19 axes. Je ne comprend pas la différence entre inertie et valeurs propres.
    Comment puis-je sortir les valeurs propres de mon ACM pour pouvoir choisir le nombre d'axe (en y appliquant la règle du coude) ? Faut-il absolument choisir un nombre d'axes pour effectuer la suite (proc cluster, proc tree)

    Concernant le V de Cramer, voici la macro :

    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
    21
    *On récupère les variables qualitatives;
    PROC CONTENTS DATA = TABLE OUT = toto (WHERE=(TYPE = 2) KEEP = NAME TYPE);RUN;
     
    *On crée les macrovariables : var1 var2...;
    DATA toto;
    SET toto END = FIN;
    CALL SYMPUT(COMPRESS("var"||_N_),NAME);
    IF fin THEN CALL SYMPUT("nb_var",_N_);
    RUN;
     
    *Proc Freq pour sortir le V de Cramer;
    %macro cramer;
       %do i=1 %to &nb_var.;
    		   %do j=1 %to &nb_var.;
    		   proc freq data=TABLE;
    		   tables &&var&i.. * &&var&j.. / chisq;
    		   run;
    		   %end;
    	%end;
    %mend;
    %cramer;
    Quelqu'un sait-il s'il y a un moyen de sortir un tableau Var*Var avec les V de Cramer à l'intérieur. Car avec cette macro là, j'obtiens X proc freq à la suite et je dois récupérer la valeur du V de Cramer "à la main" pour pouvoir interpréter ces corrélations.
    Et enfin, à partir de quel seuil considère-t-on que deux variables sont trop corrélés et qu'il faut donc en éliminer une (à partir d'un V de Cramer à 0,7 ? 0,8 ?)

    Merci d'avance

    Dacodac

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    pour info, en haut de la page 2 du lien ci-dessuson précise que l'option "OUTSTAT=" existe. Or je n'arrive pas à la faire fonctionner.

    https://ufr-segmi.u-paris10.fr/servl...=1348818740627

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    - Le lien que tu as proposé n’est pas un document de SAS Institut.
    A ma connaissance « OUTSTAT » est bien une option des procs suivantes : discrim, princomp, cancorr et facteur mais pas de proc corresp . Voir le lien suivant :
    http://support.sas.com/documentation...sp_sect005.htm

    - A fin de choisir les axes factoriels qui sont à conserver pour la classification, je te conseils de consulter les liens suivants :
    http://jms.insee.fr/files/documents/...TICLE-VDEF.PDF

    http://www.developpez.net/forums/d14...lassification/

    - Inertie totale en ACM > à 1 :
    Dans le cas de l’ACM, l’inertie totale du nuage n’est plus liée à la structure de la liaison entre les variables comme en AFC, elle est égale à : (nombre de modalités / nombre de variables)-1. Dans ton cas il y ‘a 59 modalités et 19 variables actives. D’où l’inertie totale= (59/19)-1 d’environ 2.105263158. L’exemple de la table NEIGHBOR a 4 variables et 9 modalités, l’inertie totale est égale à : (9/4)-1=1.25 (voir sortie data=inertie).

    - Chaque valeur récupérée dans data_inertie est bien l’inertie du nuage projeté sur l’axe correspondant qui est aussi égal à la valeur propre associée à cet axe. Tu trouve ces valeurs dans la première page de la sortie de proc corresp (noprint désactivé) colonne « principale inertia » avec l’histogramme des valeurs propres.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    data neighbor;
    input SURN $ 1-10 age $ 12-18 sex $ 19-25 height $ 26-30 hair $ 32-37;
    datalines;
    jones      old    male   short white
    smith      young  female tall  brown
    kasavitz   old    male   short brown
    ernst      old    female tall  white
    zannoria   old    female short brown
    spangel    young  male   tall  blond
    myers      young  male   tall  brown
    kasinski   old    male   short blond
    colman     young  female short blond
    delafave   old    male   tall  brown
    singer     young  male   tall  brown
    igor       old           short      
    ;
     
    proc transreg data=neighbor design cprefix=0 lprefix=0;
    model class(age sex height hair / zero=none);
    output out=neighbor2(drop=_: intercept);
    id SURN;
    run;	 proc print data=neighbor2 ; run;
     
    proc corresp data=neighbor2 out=result dim=4 ;*noprint ;        
    var  &_trgind ;
    run ;	 proc print data=result ; run ;	
     
    data inertie (keep=inertia som_ctr contr1-contr4) ;
    set result ;
    if _type_='INERTIA' then do ; som_ctr=sum(of contr1-contr4) ; output ; end ;
    run ;	 proc print data= inertie ; run ;	
     

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Cette macro définition permet de lister tous les croisements possibles, d’un ensemble de variables qualitatives, pris deux à deux avec le V de Cramer correspondant (exemple table NEIGHBOR) :
    Note : vexclue, c’est la variable à exclure. Dans cet exemple l’identifiant SURN est exclue.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    %macro V_Cramer(lib, dsin, vexclue) ;	  
    proc contents data= &&lib..&dsin (drop=&vexclue ) 
    out=out_conts ( keep=name) noprint ; 
    run; 		
     
    proc sql noprint ;	
    select name, left( put(count (name), 2.) )
    into  :var1 - :var99, :nb
    from out_conts ;           
    quit;
     
        %let listvars = ;
    %do i=1 %to %eval(&nb-1) ;
    %do j=%eval(&i+1) %to &nb ;
    	%let txt =cramv_&&var&i.._&&var&j. ;
    	%let listvars = &listvars &txt;
     
    proc freq data=&&lib..&dsin noprint ;
    tables &&var&i..*&&var&j. / chisq ; 
    output out=cramv_&&var&i.._&&var&j. cramv ;
    run ;	
     
    data cramv_&&var&i.._&&var&j. ;		
    length variables $15. ;
    set cramv_&&var&i.._&&var&j. ;
    variables="&&var&i..*&&var&j." ;
    run ;	     
    %end ;
    %end ;	
     
    data CramvVars ;
    set &listvars ;
    run	;  proc print ; run ;
    %mend V_Cramer ;	  %V_Cramer(lib=work, dsin=NEIGHBOR, vexclue=SURN) ;
    Bon courage
    Ward

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'écris pour poser quelques questions concernant la classification.
    Suite à mon ACM, j’ai fait une classification en faisant la méthode suivante :
    1)proc fastclus (méthode kmeans)
    2)proc clusters (CAH appliquée sur les centres obtenus avec la proc Fastclus)
    3)proc tree (choix du nombre de classes suite à l’étude des différents indicateurs)

    Tout roule sauf que quand j’analyse mes clusters finaux. Je me rends compte que j’ai une classe assez atypique qui ne représente que 0,3% de ma base. Savez-vous s’il existe un moyen d’ajouter une condition sur la taille à l’intérieur des clusters ?

    Merci d’avance

    Dacodac

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 55
    Points : 65
    Points
    65
    Par défaut
    Je ne sais pas si la question est tjrs d'actualité mais bon ...
    tu peux mettre l'option "delete"
    (ex : delete = 5 : on efface toute classe dont l'effectif est <= 5 individus)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut PROBLEME EXECUTION MACRO V_CRAMER
    Citation Envoyé par hossward Voir le message
    Cette macro définition permet de lister tous les croisements possibles, d’un ensemble de variables qualitatives, pris deux à deux avec le V de Cramer correspondant (exemple table NEIGHBOR) :
    Note : vexclue, c’est la variable à exclure. Dans cet exemple l’identifiant SURN est exclue.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    %macro V_Cramer(lib, dsin, vexclue) ;	  
    proc contents data= &&lib..&dsin (drop=&vexclue ) 
    out=out_conts ( keep=name) noprint ; 
    run; 		
     
    proc sql noprint ;	
    select name, left( put(count (name), 2.) )
    into  :var1 - :var99, :nb
    from out_conts ;           
    quit;
     
        %let listvars = ;
    %do i=1 %to %eval(&nb-1) ;
    %do j=%eval(&i+1) %to &nb ;
    	%let txt =cramv_&&var&i.._&&var&j. ;
    	%let listvars = &listvars &txt;
     
    proc freq data=&&lib..&dsin noprint ;
    tables &&var&i..*&&var&j. / chisq ; 
    output out=cramv_&&var&i.._&&var&j. cramv ;
    run ;	
     
    data cramv_&&var&i.._&&var&j. ;		
    length variables $15. ;
    set cramv_&&var&i.._&&var&j. ;
    variables="&&var&i..*&&var&j." ;
    run ;	     
    %end ;
    %end ;	
     
    data CramvVars ;
    set &listvars ;
    run	;  proc print ; run ;
    %mend V_Cramer ;	  %V_Cramer(lib=work, dsin=NEIGHBOR, vexclue=SURN) ;
    Bon courage
    Ward
    Bonjour, Je viens vers vous car j'essaye de faire fonctionner votre macro pour l'appliquer à mon cas. Cependant, lorsque je charge la macro avec mon jeu de données, j'obtiens le message de warning suivant : " WARNING: No OUTPUT data set is produced because no statistics can be computed for this table, which has a row or column variable
    with less than 2 nonmissing levels."

    Ce dernier est suivi du message d'erreur : "ERROR: Le fichier WORK.CRAMV_AG_CRED.DATA n'existe pas."

    Pourriez vous m'éclairer sur la marche à suivre s'il vous plait?

    En vous remerciant d'avance!

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Problème macro V_cramer
    J'ai trouvé le problème, il ne servait pas à grand chose d'utiliser des variables qui n'ont qu'une seule modalité sur toute la base de données et en plus des noms qui dépassaient plus de 32 caractères lors de l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    output out=cramv&&var&i.._&&var&j. cramv
    Merci, le programme est bien cool en tout cas, ça facilite le traitement!
    Bonne journée!

Discussions similaires

  1. Valeurs propres proc corresp
    Par polpo56 dans le forum SAS STAT
    Réponses: 3
    Dernier message: 21/01/2013, 18h37
  2. Calcul de valeurs propres
    Par Andrey dans le forum Pascal
    Réponses: 6
    Dernier message: 11/02/2007, 23h20
  3. [Debutant]calcul de valeurs propres, givens-householder
    Par malbarre dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 18/08/2005, 16h40
  4. valeurs propres
    Par libititi dans le forum Mathématiques
    Réponses: 2
    Dernier message: 01/06/2005, 11h31
  5. valeurs propres d'une matrice et vecteurs propres
    Par la_fantomas dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/05/2005, 15h35

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