jueves, 29 de marzo de 2012

Pruebas estadísticas para los números pseudoaleatorios

Lenguaje  a utilizar 


Python


Librería de generación de números pseudoaleatorios


La librería que seleccioné es random de Python, la función random.expovariate(lambd), que el parámetro lambd es un número diferente de 0.


Pruebas 
estadísticas


La prueba estadistica que elegí es: Anderson-Darling
Esta prueba se sefine como:
  • H0: Los datos siguen la distribución especifica(en mi caso exponencial)
  • Ha: Los datos no siguen la solución especifica(en mi caso exponencial)
Esta prueba la apliqué en Python con la librería scipy, módulo stats, función anderson(x, dist='norm'), los parámetros que entran son x = es el arreglo, dist, que es el nombre de la distribución en mi caso 'expon'.

Y los valores que regresa son A2 que es un float , es el valor de la prueba Anderson Darling, critical que es una lista de valores críticos de la distribución, y sig que es el nivel de significancia para el valor crítico correspondiente. La función regresa un valor crítico para diferentes niveles de significancia dependiendo del test.

Esta prueba estadística nos dará el valor de A2 y los valores críticos, estos son los que vamos a comparar para saber si se rechaza o no la hipótesis
Y en la misma librería viene una nota muy importante, que se relaciona con la definición de la prueba Aderson que dice, "Si A2 es más grande que los valores criticos de cada correspondiente nivel de significancia, la hipotesis nula de que los datos provienen de la distrubución elegida puede ser rechazada "


Generar números con python




Ahora vemos el resultado de una ejecución:


Con este resultado podemos ver que en esta prueba no se rechazaron las Hipótesis nulas, entonces los datos están siguiendo  la distribución exponencial.

Características deseables de números aleatorios


He leído algunas sobre las características que se espera que cumplan los números aleatorios, y hay una de ellas que me a llamado la atención, la leí en un documento propuesto por la Doctora, para la solución de esta misma tarea. Esto dice algo así: "a good random number generator will also produce sequences that look nonrandom to the human eye (e.g., a series of ten rolls of six on our die) and which also fail any statistical tests that we might expose it to. ", es decir un buen generador de números aleatorios también producirá secuencias que parecen no aleatorias para el ojo humano y que tampoco sigue pruebas estadísticas.

Entonces para poder concluir si la distribución exponencial es un buen generador de números aleatorios, decidí correr varias veces el programa anterior, para ver si el test siempre dice que sigue la distribución exponencial, o sí hay veces que dice que no la sigue, si es así para mi es suficiente para decir que generar números aleatorios con distribución exponencial es una buena opción. Veamos el programa:



Y lo que vemos es lo siguiente:



Podemos ver que aveces se rechaza la hipótesis nula, pero aveces no, entonces puedo decir que si cumple con características de números aleatorios


Referencias


Scipy, Scipy2
Aleatorios
Teoría Anderson Darling Test




2 comentarios:

  1. Pues, la parte de checar si es exponencial quedó bonita, pero en la de si es aleatoria se pudiera haber hecho una prueba más rigurosa. Van 4 y 4.

    ResponderEliminar
  2. Me hubiera gustado algo de teoría sobre las pruebas estadísticas...jeje. Pero si me sorprendió ver que una chica programe ( las que conozco de la carrera no saben...). Que ademas uses python pero, por si eso fuera poco, uses algún sabor de GNU/Linux :O
    Eso si me dejo con el ojo cuadrado :D

    Que bien, muy bien. Ademas de lo anterior, resulta que es una chica guapa!! ¡Que raro! Lindo pero raro, Elisa tampoco se queda atras *--*
    Tendré que darme una vuelta por Nuevo León XD.
    Saludos.

    ResponderEliminar