pruebas de hipótesis -...
TRANSCRIPT
Simulación 75.26 – 95.19
Pruebas de hipótesis
Test Generales
Chi cuadrado
Se utiliza en situaciones en donde las observaciones se pueden ubicar en categorías.
Supongamos que tenemos k categorías posibles y realizamos n observaciones independientes del evento
que estamos estudiando.
Sea ps la probabilidad que cada observación caiga dentro de la categoría s e Ys la cantidad de observaciones
que cayeron dentro de la categoría s.
Definamos el estadístico:
𝑣 = ∑(𝑌𝑠 − 𝑛𝑝𝑠)2
𝑛𝑝𝑠1≤𝑠≤𝑘
La idea general es que cuanto más chico sea este estadístico habrá más concordancia entre los número
generados con la distribución esperada.
Para saber si v es suficientemente bueno, se debe comparar el valor obtenido con el valor de la tabla de chi
cuadrado para un nivel de significación determinado, si el valor obtenido es menor o igual que el valor de
tabla entonces podemos aceptar la hipótesis para ese nivel de significación.
Ejemplo
Simulamos el lanzamiento de 2 dados y comprobamos si los mismos no están cargados.
Las probabilidades que se esperan para la suma de los dos números obtenidos son:
Valor 2 3 4 5 6 7 8 9 10 11 12
Prob 1/36 1/18 1/12 1/9 5/36 1/6 5/36 1/9 1/12 1/18 1/36
Nuestra hipótesis nula H0 será que los dados no están cargados.
Simulamos 100000 lanzamientos:
Simulación 75.26 – 95.19
Realizamos el test para un nivel de significación del 1% (La probabilidad de rechazar la hipótesis siendo esta
cierta es del 1%).
Para este primer ejemplo utilizaremos el generador de número al azar provisto por Matlab.
Código Matlab
cant=100000;
d1=floor(rand(1,cant)*6+1);
d2=floor(rand(1,cant)*6+1);
suma=d1+d2;
p=[1/36; 1/18; 1/12; 1/9; 5/36; 1/6; 5/36; 1/9; 1/12; 1/18; 1/36;];
expected=p*cant;
[h,pValor] = chi2gof(suma,'Expected',expected,'Alpha',0.01);
En h obtenemos el resultado del test. En este caso h=0 por lo cual, cómo esperábamos, no se puede
rechazar la hipótesis.
Simulación 75.26 – 95.19
Ejemplo 2
Repitamos el ejemplo anterior pero utilizando un generador congruencial lineal con parámetros provistos
por Numerical Recipes.
cant=100000;
c=1013904223; m=2^32; a=1664525;
d1(1)=12345; d2(1)=12347; for i=1:cant d1(i+1)=mod(a*d1(i)+c,m); d2(i+1)=mod(a*d2(i)+c,m); end
d1=floor(d1/m*6+1); d2=floor(d2/m*6+1);
suma=d1+d2;
p=[1/36; 1/18; 1/12; 1/9; 5/36; 1/6; 5/36; 1/9; 1/12; 1/18; 1/36;];
expected=p*cant; [h,pValor] = chi2gof(suma,'Expected',expected,'Alpha',0.01);
Nuevamente para un nivel de significación del 1% obtenemos h=0 por lo cual, no se puede rechazar la
hipótesis nula.
Test de Kolmogorov Smirnov
El test de Chi cuadrado se utiliza en situaciones en donde las observaciones se pueden ubicar en categorías,
pero es muy común observar variables aleatorias que tienen infinitos valores posibles, por ejemplo un
número aleatorio real entre 0 y 1.
Este método puede ser utilizado cuando F(x) no tiene saltos.
Supongamos que realizamos n observaciones al evento que nos interesa estudiar y obtenemos los valores
X1, X2, X3,…,Xn podemos plantear la distribución empírica:
𝐹𝑛(𝑥) =𝑐𝑎𝑛𝑡𝑖𝑑𝑎𝑑 𝑑𝑒 𝑋𝑖 ≤ 𝑥
𝑛
Este test se basa en la diferencia entre la distribución de probabilidad acumulada F(x), a la que suponemos
perteneces nuestra muestra (hipótesis a probar con nuestro test), y la distribución empírica Fn(x). Si la
función de distribución empírica no se aproxima lo suficientemente bien a la función de distribución
hipótesis significa que debemos rechazar nuestra hipótesis.
Para realizar el test debemos generar los siguientes estadísticos:
Simulación 75.26 – 95.19
𝑘𝑛+ = √𝑛 max
−∞<𝑥<∞(𝐹𝑛(𝑥) − 𝐹(𝑥))
𝑘𝑛− = √𝑛 max
−∞<𝑥<∞(𝐹(𝑥) − 𝐹𝑛(𝑥))
𝑘𝑛+: Mide la máxima desviación de F(x) cuando Fn(x) es mayor
𝑘𝑛−: Mide la máxima desviación de F(x) cuando Fn(x) es menor
Si ordenamos las observaciones de forma ascendente los estadísticos se pueden generar como:
𝑘𝑛+ = √𝑛 max
1<𝑥<𝑛(
𝑗
𝑛− 𝐹(𝑥𝑗))
𝑘𝑛− = √𝑛 max
1<𝑥<𝑛(𝐹(𝑥𝑗) −
𝑗 − 1
𝑛)
Luego elegimos el mayor de los dos estadísticos, la mayor diferencia entre las dos distribuciones:
𝐾 = max(𝑘𝑛+, 𝑘𝑛
−)
Como ocurre con Chi cuadrado debemos elegir un valor de significación α tal que:
𝑃 (𝑅𝑒𝑐ℎ𝑎𝑧𝑎𝑟 𝑙𝑎 ℎ𝑖𝑝ó𝑡𝑒𝑠𝑖𝑠
𝐿𝑎 𝐻𝑖𝑝ó𝑡𝑒𝑠𝑖𝑠 𝑒𝑠 𝑐𝑖𝑒𝑟𝑡𝑎⁄ ) = 𝛼 (Error de tipo I)
Con este valor vamos a la tabla de valores Kolmogorov Smirnov y dependiendo del tamaño de la
muestra tomamos el valor 𝑘∝ para el cual
𝑃 (𝑘 > 𝑘∝
𝐿𝑎 ℎ𝑖𝑝ó𝑡𝑒𝑠𝑖𝑠 𝑒𝑠 𝑐𝑖𝑟𝑡𝑎⁄ ) = 𝛼
𝑆𝑖 𝑘 ≤ 𝑘∝ ⇒ 𝑎𝑐𝑒𝑝𝑡𝑜 𝑙𝑎 𝐻𝑖𝑝ó𝑡𝑒𝑠𝑖𝑠
Sino la rechazo.
Para poder evaluar la hipótesis con más seguridad nos va a convenir tomar una cantidad grande de
muestras. Sin embargo esto podría ocultar algún comportamiento no aleatorio en alguna parte de
nuestra función, por lo cual es conveniente realizar este método tomando intervalos de nuestras
muestras y aplicando el test en ellos, por ejemplo aplicamos el test en intervalos de 1000
muestras.
Un método alternativo es utilizar el valor-p
𝑣𝑎𝑙𝑜𝑟_𝑝 = 𝑃 (𝑂𝑏𝑡𝑒𝑛𝑒𝑟 𝑢𝑛 𝑟𝑒𝑠𝑢𝑙𝑡𝑎𝑑𝑜 tan 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑜 𝑚á𝑠
𝐿𝑎 ℎ𝑖𝑝ó𝑡𝑒𝑠𝑖𝑠 𝑒𝑠 𝑐𝑖𝑒𝑟𝑡𝑎)
Simulación 75.26 – 95.19
Si obtenemos un valor alto del valor-p entonces estamos en condiciones de aceptar la hipótesis
nula ya que la serie de números generados tiene una alta probabilidad de ocurrir siendo cierta la
hipótesis nula, caso contrario la deberíamos rechazar.
Dicho de otra manera:
Si 𝐾𝑜𝑏𝑡𝑒𝑛𝑖𝑑𝑜 = max(𝑘𝑛+, 𝑘𝑛
−) ⇒ 𝑣𝑎𝑙𝑜𝑟_𝑝 = 𝑃 (𝑘≥𝐾𝑜𝑏𝑡𝑒𝑛𝑖𝑑𝑜
𝐻𝑖𝑝ó𝑡𝑒𝑠𝑖𝑠 𝑐𝑖𝑒𝑟𝑡𝑎)
Ejemplo
Realizamos el test con la distribución uniforme creada utilizando el generador congruencial lineal con
parámetros provistos por Numerical Recipes.
cant=500;
c=1013904223; m=2^32; a=1664525;
z(1)=12345;
for i=1:cant z(i+1)=mod(a*z(i)+c,m); end z=z/m;
[f,x_values] = ecdf(z); F = plot(x_values,f,'r-'); hold on; G = plot((0:1),(0:1));
legend([F G],... 'Prob acumulada empírica','Prob acumulada uniforme',... 'Location','SE');
[h,p,k,c] = kstest(z,[0,0;1,1],0.01,0)
Simulación 75.26 – 95.19
El test nos devuelve h=0, por lo cual no podemos rechazar la hipótesis nula con un nivel de
significación del 1%.
Test Empíricos
Test de frecuencia
Busca comprobar que la secuencia de números generados se distribuyan siguiendo la función de
probabilidad esperada.
Una forma de realizar este test para una distribución uniforme es:
1) En lugar de trabajar con una distribución uniforme [0,1) usemos una distribución uniforme [0,m)
2) Para cada entero r tal que 0 ≤ r ≤ m contar la cantidad de ocurrencias.
3) Realizar el Test de Chi cuadrado suponiendo m clases, y 𝑝𝑖 =1
𝑚
Ejemplo
Probaremos que el generador congruencial lineal con parámetros propuestos en http://numerical.recipes/
realmente tiene una distribución uniforme (Esta será nuestra hipótesis nula).
Trabajaremos con el intervalo 0,8.
Simulación 75.26 – 95.19
Código Matlab
cant=100000;
c=1013904223; m=2^32; a=1664525; z(1)=a;
for i=1:cant z(i+1)=mod(a*z(i)+c,m); end z=floor(z/m*8); p=ones(1,8)*1/8; expected=p*cant; [h,pValor] = chi2gof(z,'Expected',expected,'Alpha',0.01);
Para un nivel de significación del 1%, obtenemos que no podemos rechazar la hipótesis nula (h=0).
Test Serial
En una secuencia de números al azar busca comprobar que los pares de números consecutivos estén
distribuidos uniformemente.
Para esto:
1) Contamos la cantidad de ocurrencia de cada par de números consecutivos
(𝑛0, 𝑛1), (𝑛2, 𝑛3) … (𝑛𝑚−1, 𝑛𝑚)
2) Realizamos el Test de Chi cuadrado para las m2 categorías y 𝑝𝑖 =1
𝑚2
(Este test puede también realizarse tomando los números de a 3, 4, etc. pero hay que reducir el valor de m
para que generar muchas categorías).
Simulación 75.26 – 95.19
Run Test
Este test permite detectar secuencias monótonas de números al azar.
Una secuencia es monótona si todos los elementos de la secuencia son generados en orden creciente, o
decreciente.
Por ejemplo, si queremos analizar las secuencias de números consecutivos ascendentes de la serie:
1,5,9,8,7,4,6,8,9
Tenemos:
Una secuencia de longitud 3: 1,5 y 9
Dos secuencias de longitud 1 , 8 y 7 son menores que el número anterior generado por lo cual se le asigna
la longitud de período de números ascendentes igual a 1.
Una secuencia de longitud 4: 4,6,8 y 9
Estos intervalos no son independientes entre si, por lo cual no podemos utilizar un test de Chi cuadrado
sobre las longitudes de los intervalos.
Knuth en “The art of computer programming” Volumen 2 provee otro estadístico.
No profundizaremos en el estudio de este test, sólo se busca conocer la idea general del mismo.
Gap Test
Siendo Ui un número aleatorio con distribución uniforme en un rango [0,1] y 0 ≤ 𝛼 < 𝛽 ≤ 1
este test consiste en contar la cantidad de números aleatorios generados de forma consecutiva entre la
generación de un número que pertenece al intervalo [α,β] y el próximo número generado que vuelve a
pertenecer al intervalo.
Ejemplo:
Si tenemos la secuencia 𝑈𝑖 , 𝑈𝑖+1, 𝑈𝑖+2, … , 𝑈𝑖+𝑔+1
Donde 𝑈𝑖 𝑦 𝑈𝑖+𝑔+1 pertenecen al intervalo [α,β] pero 𝑈𝑖+1, 𝑈𝑖+2, … , 𝑈𝑖+𝑔 no pertencen al intervalo,
entonces g es lo longitud de nuestro “gap”.
Una vez calculados gaps les aplicamos un test Chi cuadrado donde la probabilidad esperada para cada
longitud de intervalo la consideramos como:
𝑝 = 𝛽 − 𝛼 (Probabilidad de un número en caer dentro del intervalo α,β)
𝑝0 = 𝑝
𝑝1 = (1 − 𝑝)𝑝
𝑝2 = (1 − 𝑝)2𝑝
𝑝𝑘 = (1 − 𝑝)𝑘𝑝
Ejemplo
Realizaremos un gap test al generador congruencial lineal con parámetros propuestos en
http://numerical.recipes/.
Simulación 75.26 – 95.19
Código Matlab
cant=100000;
c=1013904223; m=2^32; a=1664525; n1=12345;
alfa=.15; beta=.3;
gaps=zeros(1,10); i=1; gap=0; n1=mod(a*n1+c,m); n1Unif=n1/m; while (i<=cant) if((n1Unif<alfa)|| (n1Unif>=beta)) gap=gap+1; else gaps(1,i)=gap+1; i=i+1; gap=0; end n1=mod(a*n1+c,m); n1Unif=n1/m; end
%Genero las probabilidades esperadas p=beta-alfa; gapMax=max(gaps); expected=zeros(1,gapMax);
for i=1:1:gapMax expected(1,i)=p*((1-p)^(i-1))*cant; end
xlabel('Gaps','FontSize',9,'FontName','Arial'); ylabel('Cantidad de gaps','FontSize',9,'FontName','Arial'); hold on;
[counts,centers]=hist(gaps,gapMax); bar((0:1:gapMax-1),counts); hold on;
[h,pValor] = chi2gof(gaps,'Expected',expected,'Alpha',0.01);
Simulación 75.26 – 95.19
Histograma de la distribución de las longitudes de gaps para 100.000 gaps generados
Para un nivel de significación del 1%, obtenemos que no podemos rechazar la hipótesis nula (h=0).
Test Espectrales
Los generadores congruenciales lineales tienen la particularidad que al utilizar números consecutivos
generados como coordinadas y graficar estos puntos en 2 dimensiones o más, forman líneas, planos e
hiperplanos.
Knuth afirma que generadores que pasan los test estadísticos pueden fallar en este tipo de test.
Realizamos un test gráfico, utilizando los números aleatorios, utilizando el GCL que venimos
utilizando, como coordenadas en un gráfico 2D y 3D y veremos cómo se distribuyen los números
generados.
Simulación 75.26 – 95.19
Modifiquemos sólo el módulo del generador congruencial anterior y volvemos a evaluar su
comportamiento.
Fuentes
The art of computer programming Volumen 2 – Donal E. Knuth
COLUMBIA_sheldon-ross-simulation-4th-editionestadistica-manual