31 votos

¿Existe una prueba sencilla para las distribuciones uniformes?

Tengo una función que (más o menos) debe seleccionar un número pequeño $m$ de números aleatorios del rango $[1,n]$ (para algunos $n \gg m$ ) y tengo que probar que funciona. ¿Existe una prueba fácil de implementar que dé una buena confianza de que está funcionando correctamente? (Como referencia, la prueba completa de chi cuadrado no es lo suficientemente sencilla).

Editar:

  • $m$ en $[5,500]$ , $n$ es lo suficientemente pequeño como para poder usar tipos normales de int/float para la mayoría de las matemáticas.
  • Puedo conseguir tantos juegos como esté dispuesto a esperar ( $>100$ s por segundo)

La razón por la que busco algo sencillo es que el código que estoy comprobando no es tan complicado. Si el código de prueba es más complejo que el código bajo prueba, entonces la posibilidad de que la prueba sea errónea se convierte en un verdadero problema.

Editar 2:

Volví a echar un vistazo a Chi-cuadrado y no es tan malo como recordaba... siempre y cuando tenga un número fijo de cubos y un umbral de significación fijo. (O un CDF enlatado, y creo que no lo tengo).

27voto

Shawn Miller Puntos 3875

Podrías utilizar una prueba de chi cuadrado. Básicamente, esto comprueba si el número de extracciones que caen en varios intervalos es consistente con una distribución aleatoria uniforme. Ver Knuth's TAOCP volumen 2, Algoritmos Seminuméricos para una explicación de la prueba de chi-cuadrado.

Actualización: Si la prueba de chi-cuadrado es demasiado complicada, puedes trazar un histograma de tu resultado y ver si parece uniforme. Pero si quiere cuantificar si es uniforme, eso es exactamente lo que es una prueba de chi cuadrado. La prueba también le dirá si los datos son también uniformemente repartidos, es decir, no son lo suficientemente aleatorios.

25voto

ScArcher2 Puntos 22118

Puede utilizar el Prueba de Kolmogorov Smirnov también. Es una prueba no paramétrica, y funcionará con muchas distribuciones, incluida la Uniforme. La ventaja que tiene sobre otras pruebas es que examina toda la distribución. Además, es bastante fácil de usar.

La idea es comparar las FCD de los $H_0$ con la distribución empírica observada, y encontrar la máxima diferencia. Esta diferencia no depende de la distribución (por tanto, es no paramétrica), y sólo depende de $n$ el número de observaciones que está dibujando. Luego lo comparas con una tabla para ver qué diferencia hay con el rango esperado de la diferencia.

CDF empírica de sus observaciones $\\{x_0,x_1,...,x_n\\}$ es $F_n(x)=\frac{1}{n}\sum_1^nI_{x_i\lt x}$ . Entonces su estadística de prueba será $D_n=\sup|F(x)-F_n(x)|$ . Suponiendo que usted ordene su $x_n$ en orden ascendente, y asumiendo que tus números provienen de Uniform[0,1] (wlg ya que puedes escalarlos apropiadamente) será $D_n=\max_i(max(|x_i-\frac{i}{n}|,|x_i-\frac{i-1}{n}))$ .

Una vez calculado esto, sólo es cuestión de buscar la tabla o utilizar el software adecuado. Yo recomiendo este sitio que tiene una excelente herramienta para calcular el KS junto con muchas otras pruebas. Para el KS, hay que seleccionar "Dn", poner el valor obtenido, pulsar el botón y suponer que se interpreta el resultado como verdaderamente uniforme si P (calculado en la forma) < $\alpha$ .

4voto

Matti Viljanen Puntos 11

Uno de los problemas de la prueba de bondad de ajuste de chi-cuadrado es que, dado que opera sobre la PDF empírica y no sobre la CDF, el resultado depende del tamaño de la cubeta (ancho del intervalo de clase) que se elija: si los datos proceden de una distribución no uniforme, una cubeta más ancha aumentará las posibilidades de llegar a una conclusión errónea (imagine el extremo de tomar una sola cubeta para todos los datos: ¡un histograma perfectamente rectangular!) Además, si los recuentos de las casillas son inferiores a 5 (por regla general), tendrá que combinar las casillas, lo que también afectará al resultado de la prueba. Los CDF no utilizan el binning y, por tanto, no sufren este problema. La prueba de Kolmogorov-Smirnov para CDF es bastante burda, porque sólo considera un punto de datos (= el de la desviación máxima). Una prueba mejor es la de Cramer-von Mises, similar a la de K-S pero en lugar de integra las diferencias entre las FDA teóricas y empíricas en todo el rango de datos. Existen otras pruebas (Anderson-Darling, Shapiro-Wilks, etc.)

4voto

Tim Sheridan Puntos 41

Una buena forma de comprobarlo es observar que la FCD de cualquier variable aleatoria continua la transforma en una distribución uniforme, por lo que se puede transformar una distribución uniforme por la inversa de la FCD para obtener cualquier distribución que se desee, y luego calcular los estadísticos diseñados para comprobar esa distribución.

Por ejemplo, en la sección 2.3, p. 679 de Cook, Gelman & Rubin describen cómo hacerlo para transformar una distribución hipotéticamente uniforme en la normal estándar, y luego utilizan el hecho de que la suma de cuadrados de la normal sigue una χ $^2$ -con N grados de libertad, siendo N el número de observaciones

0voto

ricree Puntos 5055

No estoy del todo seguro de que esto funcione, pero parece razonable... (si no funciona, me gustaría saber por qué)

Podemos utilizar de forma muy sencilla la integración de Montecarlo para aproximar pi estableciendo un área conocida e inscribiendo un círculo en ella, y muestreando toda el área con un secuencia uniformemente distribuida* y teniendo en cuenta la relación entre los "aciertos" y el número total de "disparos". (He explicado esto ligeramente en esta respuesta a otra pregunta).

* Creo que la distribución uniforme de los puntos es necesaria para garantizar que no haya un sesgo hacia ninguna zona concreta del espacio de muestreo.

Si esta es realmente la característica más destacada de las secuencias uniformemente distribuidas en este contexto, ¿qué pasaría si tomáramos una muestra con una secuencia no uniformemente distribuida? Supongo que no nos aproximaríamos muy bien a los dígitos de pi... Si esto resulta ser cierto, entonces puedes lanzar tu secuencia a un problema de Monte Carlo con una solución conocida y ver cómo lo hace.

Tengo un rápido Matlab script que aproxima pi usando un cuadrado 2-d. En principio, esto podría hacerse en cualquier dimensión. Si sólo tienes una secuencia de puntos (1-d) podrías intentar aproximar la longitud de un segmento dado en un intervalo de longitud conocida. También me parece que cuantos más puntos tengas, mejor idea tendrás de lo lejos que están tus puntos de estar distribuidos uniformemente.

(Hágame saber si algo no tiene sentido aquí y trataré de aclararlo).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X