La Distribución Normal y la regla Empírica
Vamos a hacer un pequeño ejercicio usando SAS para demostrar esto empíricamente
Primero vamos a guiarnos por el libro negro y vamos a crear una secuencia de 10.000 números aleatorios uniformemente distribuidos. Posteriormente vamos a usar la transformación Box-Muller (se los dije que me iba a guiar por el libro negro, no quiero profesores de estadística por allí molestos) para crear una distribución normal standard.
data pseudo_rand(drop=i);
do i = 1 to 10000;
u1 = ranuni(0);
u2 = ranuni(1);
/*Transformacion Box-Muller*/
z1 = cos(2*3.141516*u2)*sqrt(-2*log(u1)) ;
output;
end;
run;
Una vez creada nuestra muestra vamos a chequear que en verdad se ajusta a
distribución normal. Para ello vamos a utilizar Proc Univariate.
proc univariate data=pseudo_rand plot normal ;
var z1;
run;
Aquí tienen una versión sumarizada del reporte generado por el Univariate.
.nobrtable br { display: none }
| Moments | |||
| N | 10000 | Sum Weights | 10000 |
| Mean | -0.0082084 | Sum Observations | -82.083704 |
| Std Deviation | 0.99724547 | Variance | 0.99449853 |
| Skewness | -0.0181247 | Kurtosis | -0.0304879 |
| Uncorrected SS | 9944.66461 | Corrected SS | 9943.99084 |
.nobrtable br { display: none }
| Tests for Normality | ||
| Test | Statistic | p Value |
| Kolmogorov-Smirnov | D 0.005782 | Pr>D >0.1500 |
| Cramer-von Mises | W-Sq 0.062107 | Pr > W-Sq >0.2500 |
| Anderson-Darling | A-Sq 0.413538 | Pr > A-Sq >0.2500 |
Ok, ahora vamos a calcular nuestra media y desviación típica usando Proc Means. Claramente esto se pudo haber calculado con anterioridad en el Univariate, pero me pareció oportuno mostrar varias formas de generar el mismo resultado.
proc means data=pseudo_rand noprint;
var z1 ;
output out=descriptiva(drop=_type_ _freq_)
mean=m
std=s;
run;
EL siguiente paso, es crear una marca para cada observación, si el número aleatorio se encuentra dentro de los límites de +/- una desviación típica, lo marcamos como cero, sino lo marcamos como 1. Lo mismo hacemos para los casos de dos y tres desviaciones típicas.
data Intervalos;
set pseudo_rand;
if _n_ = 1 then set descriptiva;
if z1 lt (m – s ) or z1 gt (m + s) then s1gma=1;
else s1gma=0;
if z1 lt (m – 2*s ) or z1 gt (m + 2*s) then s2gma=1;
else s2gma=0;
if z1 lt (m – 3*s ) or z1 gt (m + 3*s) then s3gma=1;
else s3gma=0;
run;
Si posteriormente calculamos la frecuencia de las marcas para cada caso deberíamos obtener valores muy cercanos a la regla 68-95-99,7
proc freq data=Intervalos;
table s1gma s2gma s3gma;run;
De nuevo una versión corta del reporta para apreciar que la regla se cumple.
.nobrtable br { display: none }
| Resultados para 1 Desv. Típica | ||
| Marca | Frecuency | Percent |
| 0 | 6841 | 68.41% |
| 1 | 3159 | 31.59% |
.nobrtable br { display: none }
| Resultados para 2 Desv. Típica | ||
| Marca | Frecuency | Percent |
| 0 | 9544 | 95.44% |
| 1 | 456 | 4.56% |
.nobrtable br { display: none }
| Resultados para 3 Desv. Típica | ||
| Marca | Frecuency | Percent |
| 0 | 9973 | 99.73% |
| 1 | 27 | 0.27% |
Si tengo tiempo esta semana les posteo como comprobar usando SAS que una muestra de N>30 sigue una distribución Normal.
SASludos,
Alberto