Publicado el :

Análisis Distribucional y Función de Distribución Acumulativa (ECDF)

Este código también está disponible en: Deutsch English Français
En espera de validación
El script se divide en dos partes principales, cada una utilizando una macro diferente para generar gráficos ODS. La primera macro, `%ecdf`, utiliza el procedimiento `UNIVARIATE` para obtener estadísticas descriptivas, un histograma y un trazado de la función de distribución acumulativa. La segunda macro, `%ecdf2`, calcula manualmente la función de distribución acumulativa a través de un `DATA STEP` y luego utiliza `PROC SGPLOT` para crear el histograma y el gráfico ECDF. Las salidas gráficas se guardan en una ruta especificada por `ods listing gpath`.
Análisis de datos

Type : SASHELP


Los datos utilizados para el análisis provienen de la librería SASHELP (`sashelp.cars`), que es una librería interna de SAS que contiene conjuntos de datos de ejemplo.

1 Bloque de código
ODS Configuration
Explicación :
Este bloque configura el destino de las salidas ODS (Output Delivery System) para los gráficos. Especifica una ruta de directorio (`gpath`) y una resolución (`image_dpi`) para las imágenes generadas.
¡Copiado!
1ods listing gpath="/home/nicolasdupont0/resources_github/Graph/Distribution/img" image_dpi=200;
2 
2 Bloque de código
ODS Graphics Configuration
Explicación :
Este bloque configura las opciones globales para los gráficos ODS. Reinicia los parámetros, define la prioridad de los atributos, el tamaño de la imagen, el nombre del archivo (`ecdf1`) y los formatos de imagen (PNG).
¡Copiado!
1ods graphics /
2reset = all attrpriority=color border = no width = 600px height = 400px
3imagename = "ecdf1" imagefmt = png outputfmt = png antialiasmax = 10000;
4 
3 Bloque de código
MACRO Definition
Explicación :
Esta macro, `%ecdf`, está diseñada para generar análisis descriptivos y gráficos de distribución para una variable dada. Utiliza `PROC UNIVARIATE` tres veces: para estadísticas descriptivas básicas, para un histograma con un recuadro que muestra el número de observaciones, y para un trazado de la función de distribución acumulativa (CDF) con una opción para una curva normal y un recuadro.
¡Copiado!
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 Bloque de código
MACRO Call
Explicación :
Esta llamada ejecuta la macro `%ecdf` utilizando el conjunto de datos `sashelp.cars` y la variable `Horsepower` para generar los análisis y gráficos correspondientes.
¡Copiado!
1%ecdf(sashelp.cars,Horsepower);
5 Bloque de código
ODS Graphics Configuration
Explicación :
Este bloque configura las opciones globales para los gráficos ODS, similar al anterior, pero para el segundo conjunto de gráficos. Define el nombre de la imagen como `ecdf2`.
¡Copiado!
1ods graphics /
2reset = all attrpriority=color border = no width = 600px height = 400px
3imagename = "ecdf2" imagefmt = png outputfmt = png antialiasmax = 10000;
4 
6 Bloque de código
MACRO Definition Data
Explicación :
Esta macro, `%ecdf2`, implementa un enfoque manual para calcular y visualizar la ECDF. Comienza creando un conjunto de datos temporal (`tmp`) con la variable de interés, lo clasifica y luego calcula la proporción acumulativa (`ecdf`) de cada observación en un `DATA STEP`. Se utiliza un `CALL SYMPUT` para almacenar el número de observaciones en una macrovariable. Finalmente, utiliza `PROC SGPLOT` para generar un histograma y un gráfico de serie para la función de distribución acumulativa, con títulos personalizados que muestran el número de observaciones.
¡Copiado!
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 Bloque de código
MACRO Call
Explicación :
Esta llamada ejecuta la macro `%ecdf2` utilizando el conjunto de datos `sashelp.cars` y la variable `Horsepower` para realizar el análisis y la visualización alternativos de la distribución.
¡Copiado!
1%ecdf2(sashelp.cars,Horsepower);
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Created : 21/07/2017 (fr), Last update : 21/07/2017 (fr), Author(s) : Nicolas Dupont