Archivo de la etiqueta: proc univariate

Test de bondad de ajuste con SAS

Pregunta que me han hecho hoy. Cómo hacer un test de bondad de ajuste con SAS y la respuesta que he dado:

data datos_aleatorios;
do i=1 to 200000;
*GENERAMOS UNAS VARIABLES ALEATORIAS;
variable_gamma = rangam(89,450); 
variable_exponencial = ranexp(23)*100+0.17045;
output;
end;
run;

*ods select ParameterEstimates GoodnessOfFit ;
proc univariate data=datos_aleatorios;
   var var:;
   histogram /   gamma;
run;

Mucho cuidado con estos test de hipótesis. Yo suelo conformarme con ver la tabla de cuantiles. Saludos.

 

Macros (fáciles) de SAS. Eliminar outliers en una variable

Hace tiempo ya os propuse una chapuza para eliminar outliers de forma multivariante. Por supuesto quedaba eliminar outliers en una variable. Recortar los valores extremos en aquellas variables cuantitativas que deseemos. Para ello os propongo una macro que no considero muy compleja y que os analizaré con mayor detalle, pero lo primero la macro al completo:

%macro elimina_outliers(
varib, /*VARIABLE PARA ELIMINAR EL OUTLIER*/
entrada,/*DATASET DE ENTRADA*/
salida, /*DATASET DE SALIDA, PUEDE SER EL MISMO DE ENTRADA*/
corte_inferior, /*% DE CORTE INFERIOR*/
corte_superior);/*% DE CORTE SUPERIOR*/
*******************************************************************;
*CREAMOS LOS PERCENTILES;
data _null_;
call symput ("lim1",compress(0+&corte_inferior.));
call symput ("lim2",compress(100-&corte_superior.));
run;
*PREPARAMOS MV CON LOS NOMBRES QUE OBTENDREMOS DEL PROC UNIVARIATE;
data _null_;
call symput ('nom_lim1',compress("P_"||tranwrd("&lim1.",'.','_')));
call symput ('nom_lim2',compress("P_"||tranwrd("&lim2.",'.','_')));
run;
*EL UNIVARIATE GENERA UNA SALIDA SOLO CON LOS PERCENTILES DESEADOS;
proc univariate data=&entrada. noprint;
var &varib.;
output out=sal pctlpre=P_ pctlpts=&lim1.,&lim2.;
quit;
*CREAMOS MV CON LOS CORTES DESEADOS;
data _null_;
set sal;
call symput("inf",&nom_lim1.);
call symput("sup",&nom_lim2.);
run;
*REALIZAMOS EL FILTRO;
data &salida.;
set &entrada.;
if &varib.>&inf. and &varib.<&sup.;
run;
proc delete data=sal;run;
%mend;

Su ejemplo de uso correspondiente:


data ent;
do i=1 to 10000;
importe=rannor(2)*1000;
if ranuni(3) >= 0.95 then importe=importe * 10;
if ranuni(4) >= 0.05 then importe=importe / 10;
output;
end;
run;
*ANALIZAMOS LA VARIABLE IMPORTE;
proc univariate data=ent;
var importe;
histogram;
quit;
*RECORTAMOS UN 5% POR ARRIBA Y UN 5% POR DEBAJO;
%elimina_outliers(importe,ent,salida,5,5);
proc univariate data=salida;
var importe;
histogram;
quit;

Tenemos 2 histogramas, uno es imposible pero el otro nos permite Sigue leyendo Macros (fáciles) de SAS. Eliminar outliers en una variable