Publié le :

Analyse Distributionnelle et Fonction de Répartition Cumulative (ECDF)

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script est divisé en deux parties principales, chacune utilisant une macro différente pour générer des graphiques ODS. La première macro, `%ecdf`, utilise la procédure `UNIVARIATE` pour obtenir des statistiques descriptives, un histogramme et un tracé de la fonction de répartition cumulative. La deuxième macro, `%ecdf2`, calcule manuellement la fonction de répartition cumulative via un `DATA STEP` et utilise ensuite `PROC SGPLOT` pour créer l'histogramme et le graphique ECDF. Les sorties graphiques sont enregistrées dans un chemin spécifié par `ods listing gpath`.
Analyse des données

Type : SASHELP


Les données utilisées pour l'analyse proviennent de la librairie SASHELP (`sashelp.cars`), qui est une librairie interne à SAS contenant des jeux de données d'exemple.

1 Bloc de code
ODS Configuration
Explication :
Ce bloc configure la destination des sorties ODS (Output Delivery System) pour les graphiques. Il spécifie un chemin de répertoire (`gpath`) et une résolution (`image_dpi`) pour les images générées.
Copié !
1ods listing gpath="/home/nicolasdupont0/resources_github/Graph/Distribution/img" image_dpi=200;
2 
2 Bloc de code
ODS Graphics Configuration
Explication :
Ce bloc configure les options globales pour les graphiques ODS. Il réinitialise les paramètres, définit la priorité des attributs, la taille de l'image, le nom du fichier (`ecdf1`), et les formats d'image (PNG).
Copié !
1ods graphics /
2reset = all attrpriority=color border = no width = 600px height = 400px
3imagename = "ecdf1" imagefmt = png outputfmt = png antialiasmax = 10000;
4 
3 Bloc de code
MACRO Definition
Explication :
Cette macro, `%ecdf`, est conçue pour générer des analyses descriptives et des graphiques de distribution pour une variable donnée. Elle utilise `PROC UNIVARIATE` trois fois : pour les statistiques descriptives de base, pour un histogramme avec un encart affichant le nombre d'observations, et pour un tracé de la fonction de répartition cumulative (CDF) avec une option pour une courbe normale et un encart.
Copié !
1%macro ecdf(DATA,var);
2 
3 title "Descriptive statistics on &var.";
4 PROC UNIVARIATE DATA=&DATA;
5 var &var;
6 RUN;
7
8 title "Distribution of &var.";
9 PROC UNIVARIATE DATA=&DATA noprint;
10 histogram &var / odstitle = title;
11 inset n = 'Number of observations' / position=ne;
12 RUN;
13
14 title "Cumulative Distribution of &var.";
15 PROC UNIVARIATE DATA=&DATA noprint;
16 cdf &var / normal;
17 /*inset normal(mu sigma);*/
18 inset n = 'Number of observations' / position=nw;
19 RUN;
20
21 title;
22 
23%mend ecdf;
4 Bloc de code
MACRO Call
Explication :
Cet appel exécute la macro `%ecdf` en utilisant le jeu de données `sashelp.cars` et la variable `Horsepower` pour générer les analyses et graphiques correspondants.
Copié !
1%ecdf(sashelp.cars,Horsepower);
5 Bloc de code
ODS Graphics Configuration
Explication :
Ce bloc configure les options globales pour les graphiques ODS, similaire au précédent, mais pour le deuxième ensemble de graphiques. Il définit le nom de l'image sur `ecdf2`.
Copié !
1ods graphics /
2reset = all attrpriority=color border = no width = 600px height = 400px
3imagename = "ecdf2" imagefmt = png outputfmt = png antialiasmax = 10000;
4 
6 Bloc de code
MACRO Definition Data
Explication :
Cette macro, `%ecdf2`, implémente une approche manuelle pour calculer et visualiser l'ECDF. Elle commence par créer un jeu de données temporaire (`tmp`) avec la variable d'intérêt, le trie, puis calcule la proportion cumulative (`ecdf`) de chaque observation dans un `DATA STEP`. Un `CALL SYMPUT` est utilisé pour stocker le nombre d'observations dans une macro-variable. Enfin, elle utilise `PROC SGPLOT` pour générer un histogramme et un graphique de série pour la fonction de répartition cumulative, avec des titres personnalisés affichant le nombre d'observations.
Copié !
1%macro ecdf2(DATA,var);
2 
3 DATA tmp (keep=&var);
4 SET &DATA.;
5 RUN;
6
7 PROC SORT DATA=tmp;
8 BY &var.;
9 RUN;
10
11 DATA tmp;
12 SET tmp nobs=obs;
13 nv = _N_;
14 p = nv/obs;
15 ecdf = int(p*100);
16 call symput("nbvalue",compress(nv));
17 RUN;
18 PROC SORT DATA=tmp; BY nv; RUN;
19
20
21 /*
22 title "Cumulative Distribution of &var.";
23 symbol1 i=j v=none c=blue;
24 proc gplot data=tmp;
25 plot ecdf * &var;
26 run;
27 quit;
28 title;
29 */
30 title "Distribution of &var.";
31 title2 "Number of observations = &nbvalue";
32 PROC SGPLOT DATA=tmp;
33 histogram &var;
34 XAXIS label="&var" grid;
35 YAXIS label="Percentage";
36 RUN;
37
38 title "Cumulative Distribution of &var.";
39 title2 "Number of observations = &nbvalue";
40 PROC SGPLOT DATA=tmp;
41 series x=&var y=ecdf;
42 XAXIS label="&var" grid;
43 YAXIS label="Cumulative Percent" grid;
44 RUN;
45 title;
46 title2;
47 
48%mend ecdf2;
7 Bloc de code
MACRO Call
Explication :
Cet appel exécute la macro `%ecdf2` en utilisant le jeu de données `sashelp.cars` et la variable `Horsepower` pour effectuer l'analyse et la visualisation alternatives de la distribution.
Copié !
1%ecdf2(sashelp.cars,Horsepower);
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Created : 21/07/2017 (fr), Last update : 21/07/2017 (fr), Author(s) : Nicolas Dupont