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 09/11/2011, 21h13   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Par défaut Proc GPlot et affichage du nombre d'observations

J'utilise Proc Robustreg pour la détection de points aberrants (outliers) dans une distribution masse vs longueur. L'illustration de la relation et des 'outliers' se fait avec Proc GPlot avec l'option 'Annotate=', laquelle annotation utilise la sortie de Proc Robustreg. L'essentiel du programme se lit ainsi :
Code :
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
Proc Robustreg DATA=Work.Carbio Method=Mm;
BY Sourc_Mb Nbpc_Mb No_Relmb Espgen;
Model Lnmasse = Lnlong / Diagnostics(ALL) Leverage;
Output Out=Diag_Out R=Resid Sr=Stdres Outlier=Otlr Leverage=Lvr Rho=R;
Run;
 
DATA Work.Annote;
Length FUNCTION Color $8;                                                                                                             
Retain FUNCTION 'Label' Xsys Ysys '2' Hsys '1' Style 'Arial';                                                                                                    
   SET Work.Diag_Out;
IF Otlr=1 Then Do;                                                                                                              
     FUNCTION='Label';                                                                                                                   
     X=Lnlong;                                                                                                                           
     Y=Lnmasse;                                                                                                                           
     Color='Red/Bold';                                                                                                                      
     Position='8';                                                                                                                       
     Text=Trim((LEFT(Put(V_Long,4.)))||'-'||(LEFT(Put(V_W,6.1))));                                                                                                   
     Output;                                                                                                                             
   End;                                                                                                                                  
Run;
 
Proc Gplot DATA=Work.Carbio;
Note Box=2 Color=Red Font='Arial' Height=3Pct 
     Move=(72,25) "Point Aberrant"             
     Move=(-15,-3) "(V_Long - V_W)" ;           
BY Sourc_Mb Nbpc_Mb No_Relmb No_Stnmb Espgen;  
Plot Lnmasse * Lnlong=3 / Vaxis=Axis1          
                      Haxis=Axis2
					  Hminor=0 Vminor=0
                      Regeqn                    
                      Annotate=Work.Annote;     /* Utilisation des annotations définies dans Work.Annote */
  BY Espgen Esp N_Espf;
Run;
J'aimerais indiquer sur les graphiques le nombre d'observations utilisées pour évaluer la régression. Existe-t-il une option dans Robustreg pour que cette information apparaissent dans le dataset Out=Daig_Out? Si l'option n'existe pas et qu'il est évalué autrement, doit-il être inséré dans mon Work.Annote ou bien peut-on utiliser 2 dataset différents dans l'option Annotate= dans la Proc GPlot?

Merci à l'avance pour le partage d'information.
Goliath1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 22h23   #2
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
Je ne connais pas ta version de SAS mais en SAS 9.2, l'INSET est dans tous les graphiques :
http://support.sas.com/documentation...eg_sect031.htm
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 15h36   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Merci Datametric.

Je travaille avec la version 9.2. Je ne connaissais pas "Inset". Cependant cette option ne semble pas disponible avec GPlot. Elle fonctionne avec SGPlot mais dans le contexte de SGPlot je perds l'option d'insérer ma note (Note Box=2 ...). Je crois qu'avec "Inset" il serait possible de récupérer l'information désirée dans le template généré par SAS lors de l'exécution de la Proc Robustreg (Stat.Robustreg.Nobs); une avenue a vérifier.

Puisque l'option d'avoir ce nombre d'observation ne semble pas disponible dans mon dataset Diag_Out, voici ce que j'ai appliqué :

- Proc summary sur Diag_Out en ne conservant que l'info désirée (n=)
- un "merge" entre Diag_Out et la sortie du proc summary
- modification de l'étape créant le fichier d'annotation. Notons ici qu'il faut gérer le fait qu'à l'étape du "merge", le nombre d'observation est ajouté à chaque ligne. Puisque le "label" ne doit apparaître qu'une fois sur le graphique, je gère ça avec la fonction "lag". Voici ce que ça donne en terme de code SAS
Code :
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
DATA Work.DiagOutNew (DROP=Var non désirée);
Merge Work.Diag_Out (IN=A) Work.Resul_Univar;
BY Sourc_Mb Nbpc_Mb No_RelMb EspGEn; 
IF A; 
LNbLong=Lag(N_Long);
Run;
 
DATA Work.Annote;
Length FUNCTION color $12.;
Retain FUNCTION 'label' xsys ysys '2' hsys '1' style 'arial';                                                                                                    
   SET Work.DiagOutNew;
IF Otlr=1 then do;                                                                                                              
     FUNCTION='label';                                                                                                                   
     x=LnLong;                                                                                                                           
     y=LnMasse;                                                                                                                           
     color='Red/Bold';                                                                                                                      
     position='8';                                                                                                                       
     Text=Trim((LEFT(Put(V_Long,4.)))||'-'||(LEFT(Put(V_W,6.1))));                                                                                                   
     output;                                                                                                                             
   end;  
IF LNbLong ne N_Long then do;
   FUNCTION='label'; 
   style='Arial/Bold'; 
   text=compress('n= '||(put(N_Long,6.))); 
   color='black';
   size=5; 
   position='2';
   x=1; y=9; 
   cborder='black';
   output;
 End;
run;
C'est opérationnel et je pense faire un bout de chemin avec ça même si je dois faire cette gymnastique de programmation pour arriver au résultat. Je demeure ouvert à d'autre solution. Encore merci de partager.
Goliath1 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 06h21.


 
 
 
 
Partenaires

Hébergement Web