Probar datos generados aleatoriamente contra su distribución prevista


17

He escrito un programa que genera datos aleatorios. Si el programa funciona correctamente, esos datos deben seguir una distribución de probabilidad específica y conocida. Me gustaría ejecutar el programa, hacer algunos cálculos sobre el resultado y obtener un valor p.

Antes de que nadie más lo diga: entiendo que las pruebas de hipótesis no pueden detectar cuándo el programa funciona correctamente. Solo puede detectar cuando está funcionando incorrectamente de una manera específica. (E incluso entonces, la prueba "debería" fallar X% del tiempo, dependiendo del nivel de significancia que elija ...)

Por lo tanto, estoy tratando de comprender qué herramientas podrían ser apropiadas. En particular:

  • Puedo generar tantos datos aleatorios como quiera. Todo lo que tengo que hacer es dejar el programa funcionando lo suficiente. Por lo tanto, no estoy limitado a ningún tamaño de muestra específico.

  • Me interesan las técnicas que producen un valor p. Así que mirar una gráfica y decir "sí, parece un poco lineal" no es una opción interesante. A menos que haya alguna forma de poner un número difícil en la "incertidumbre" de un gráfico. ;-)

Lo que sé hasta ahora:

  • He visto tres tipos principales de pruebas mencionadas que parecen ser aplicables: prueba de chi cuadrado de [Pearson], prueba de Kolmogorov-Smirnov y prueba de Anderson-Darling.

  • Parece que una prueba de ji cuadrado es apropiada para distribuciones discretas , mientras que las otras dos son más apropiadas para distribuciones continuas . (?)

  • Varias fuentes insinúan que la prueba AD es "mejor" que la prueba KS, pero no entran en más detalles.

Finalmente, todas estas pruebas presumiblemente detectan "formas diferentes" de desviarse de la distribución nula especificada. Pero aún no sé cuáles son las diferencias ... En resumen, estoy buscando algún tipo de descripción general de dónde es más aplicable cada tipo de prueba y qué tipo de problemas detecta mejor.


Si ha escrito el suyo, es casi seguro que 'fallará' una vez que supere los límites de su conocimiento (que ha incrustado en el diseño). Eche un vistazo a random.org/analysis que enumera algunos de los métodos de verificación, y obviamente stackoverflow.com/q/2130621/717355 . Filosóficamente, si el programa es determinista, no puede ser aleatorio de todos modos ;-) Definitivamente es un tema que vale la pena estudiar (y no olvides las contraseñas de piratería de contraseñas).
Philip Oakley

Respuestas:


21

Aquí hay una descripción general de cómo funcionan los 3 métodos mencionados.

El método Chi-Squared funciona comparando el número de observaciones en un contenedor con el número que se espera que esté en el contenedor según la distribución. Para distribuciones discretas, los contenedores son generalmente las posibilidades discretas o combinaciones de esos. Para distribuciones continuas, puede elegir puntos de corte para crear los contenedores. Muchas funciones que implementan esto crearán automáticamente los contenedores, pero debería poder crear sus propios contenedores si desea comparar en áreas específicas. La desventaja de este método es que no se detectarán las diferencias entre la distribución teórica y los datos empíricos que todavía colocan los valores en el mismo contenedor, un ejemplo sería redondear, si teóricamente los números entre 2 y 3 deberían extenderse a través del rango (esperamos ver valores como 2.34296),

El estadístico de prueba KS es la distancia máxima entre las 2 funciones de distribución acumulativa que se comparan (a menudo, una teórica y una empírica). Si las 2 distribuciones de probabilidad solo tienen 1 punto de intersección, entonces 1 menos la distancia máxima es el área de superposición entre las 2 distribuciones de probabilidad (esto ayuda a algunas personas a visualizar lo que se está midiendo). Piense en trazar en la misma trama la función de distribución teórica y el FED luego mida la distancia entre las 2 "curvas", la mayor diferencia es el estadístico de prueba y se compara con la distribución de valores cuando esto es nulo. Esto captura las diferencias en la forma de la distribución o 1 distribución desplazada o estirada en comparación con la otra.1norte

La prueba Anderson-Darling también usa la diferencia entre las curvas CDF como la prueba KS, pero en lugar de usar la diferencia máxima, usa una función del área total entre las 2 curvas (en realidad cuadra las diferencias, las pesa para que las colas tengan más influencia, luego se integra sobre el dominio de las distribuciones). Esto da más peso a los valores atípicos que KS y también da más peso si hay varias pequeñas diferencias (en comparación con 1 gran diferencia que KS enfatizaría). Esto puede terminar abrumando la prueba para encontrar diferencias que consideraría poco importantes (redondeo leve, etc.). Al igual que la prueba de KS, esto supone que no calculó parámetros a partir de los datos.

Aquí hay un gráfico para mostrar las ideas generales de los últimos 2:

ingrese la descripción de la imagen aquí

basado en este código R:

set.seed(1)
tmp <- rnorm(25)
edf <- approxfun( sort(tmp), (0:24)/25, method='constant', 
    yleft=0, yright=1, f=1 )

par(mfrow=c(3,1), mar=c(4,4,0,0)+.1)
curve( edf, from=-3, to=3, n=1000, col='green' )
curve( pnorm, from=-3, to=3, col='blue', add=TRUE)

tmp.x <- seq(-3, 3, length=1000)
ediff <- function(x) pnorm(x) - edf(x)
m.x <- tmp.x[ which.max( abs( ediff(tmp.x) ) ) ]
ediff( m.x )  # KS stat
segments( m.x, edf(m.x), m.x, pnorm(m.x), col='red' )  # KS stat

curve( ediff, from=-3, to=3, n=1000 )
abline(h=0, col='lightgrey')    

ediff2 <- function(x) (pnorm(x) - edf(x))^2/( pnorm(x)*(1-pnorm(x)) )*dnorm(x)
curve( ediff2, from=-3, to=3, n=1000 )
abline(h=0)

El gráfico superior muestra un EDF de una muestra de una normal estándar en comparación con el CDF de la normal estándar con una línea que muestra la estadística KS. El gráfico del medio muestra la diferencia en las 2 curvas (puede ver dónde se produce la estadística KS). La parte inferior es la diferencia ponderada al cuadrado, la prueba AD se basa en el área bajo esta curva (suponiendo que tengo todo correcto).

Otras pruebas observan la correlación en un diagrama qq, observan la pendiente en el diagrama qq, comparan la media, var y otras estadísticas basadas en los momentos.


+1, esta es una buena respuesta a la pregunta real (a diferencia de la mía ...). La descripción que se encuentra en el medio del párrafo 3 solo pide una figura ilustrativa, si se siente inclinado a hacer una.
gung - Restablece a Monica

Esa es una muy buena respuesta. Solo para asegurarme de que entiendo completamente: ¿la prueba KS devuelve la mayor desviación entre el CDF y el EDF, mientras que AD devuelve el área total [ponderada] entre las dos curvas?
MathematicalOrchid

@MathematicalOrchid, en su mayoría correcto, el AD cuadra la distancia, luego pesa, luego se integra, por lo que es algo diferente del área (aunque para comprender, pensar que es un área probablemente esté bien y sea mucho más simple).
Greg Snow

1
Espero que si su distribución teórica tuviera una masa puntual (salto vertical en el CDF en un punto dado) y la distribución real de sus datos tuviera una masa puntual en casi, pero no del todo, el mismo lugar, entonces la prueba de KS puede ser superior a la prueba de AD. Pero ese caso es probablemente un poco artificial. La prueba KS permite pruebas de 1 lado donde el AD siempre es de 2 lados, por lo que sería otra diferencia (simplemente no es común).
Greg Snow

2
No me gusta la caracterización de @MathematicalOrchid de que la estadística KS depende solo de "un punto extremo". La ubicación de ese "un punto" (a menudo en el medio de la distribución) en un CDF depende de los valores de los otros puntos en el conjunto y, por lo tanto, no es tan aislado o solitario como el lenguaje sugeriría al oyente ingenuo.
DWin

12

+1 por escribir una pregunta clara y detallada. Espero que mi respuesta no sea demasiado frustrante. Creo que la prueba de hipótesis no es un enfoque apropiado en su caso. La prueba de significancia de hipótesis nula es algo razonable cuando la respuesta podría ser sí o no, pero no sabe cuál . (Desafortunadamente, en realidad no le dice cuál, pero este es un problema diferente). En su caso, supongo, desea saber si su algoritmo es bueno. Sin embargo, se sabe (con certeza) que ningún programa de computadora puede generar datos verdaderamente aleatorios a partir de cualquier distribución de probabilidad. Esto es cierto en primer lugar, porque todas las computadoras son máquinas de estado finito y, por lo tanto, solo pueden producir números pseudoaleatorios. Además (dejando de lado la falta de aleatoriedad verdadera), no es posible que los valores generados sigan perfectamente cualquier distribución continua. Hay varias formas de entender esto, pero quizás la más fácil es que habrá 'huecos' en la recta numérica, lo cual no es cierto para ninguna variable aleatoria continua. Además, estas brechas no son todas perfectamente iguales de ancho o perfectamente iguales. Entre los científicos informáticos que trabajan en la generación de números pseudoaleatorios, el nombre del juego es mejorar los algoritmos de modo que las brechas sean más pequeñas, más uniformes, con períodos más largos (y también que pueden generar más valores más rápido). En cualquier caso, estos hechos establecen que la prueba de hipótesis es el enfoque incorrecto para determinar si su algoritmo está siguiendo "una distribución de probabilidad específica y conocida", porque no lo es (Lo siento.)

En cambio, un marco más apropiado es determinar qué tan cerca están sus datos de la distribución teórica. Para esto, recomendaría reconsiderar las parcelas, específicamente qq-plots y pp-plots1-βr=1

En otra nota, con respecto a la evaluación de la calidad de su algoritmo, es posible que desee cronometrarlo en relación con otros pRNG estándar.

Espero que esto ayude.


No es exactamente lo que pedí, pero no obstante, fue perspicaz. Supongo que por "no continuo" te estás refiriendo básicamente al hecho de que las computadoras no implementan aritmética de precisión infinita.
MathematicalOrchid

Esa es una gran parte, pero no todo el problema. Este es un tema que es inmensamente complejo.
gung - Restablece a Monica

1
Algunas de las ideas del primer párrafo de @ gung se implementan en la función SnowsPenultimateNormalityTesten el TeachingDemospaquete para R. Estoy de acuerdo con la idea de @ gung de mirar una medida de cercanía en lugar de centrarse en un valor p. Un problema con el uso de la correlación en el gráfico qq para esto es que si sus datos tienen la forma correcta, pero diferentes medias, varianzas, etc., aún puede obtener una correlación realmente alta. Una alternativa es utilizar el estadístico KS o el estadístico AD como medidas de diferencia con respecto a lo teórico.
Greg Snow

@gung, gracias por la respuesta. ¿Podría por favor elaborar un poco más sobre "haber convertido sus datos de manera apropiada para el trazado, y haber calculado los valores correspondientes a partir de la distribución teórica en cuestión, puede correlacionarlos"? Haber calculado los datos para el trazado de pp o qq, ¿cuál sería el siguiente paso para obtener la puntuación r que mencionó? ¿Es alguna prueba conocida? ¿Podría por favor dar una referencia? ¡Gracias!
Ivan

1

No he leído completamente todas las respuestas, pero veo que son bastante completas y precisas. Corriendo el riesgo de que estoy repitiendo algo oculto en las respuestas largas, solo quiero decir que v = la prueba de chi cuadrado se puede usar para datos continuos. Puede que no sea la mejor prueba y, como muchas pruebas, se basa en la teoría asintótica y, por lo tanto, puede no ser precisa en muestras pequeñas con células dispersas (esto también depende de cómo se realiza el binning). Anderson-Darling es más poderoso para probar la normalidad que la prueba KS, pero KS puede ser mejor para otras distribuciones continuas. Lillefors tiene una prueba diseñada para distribuciones exponenciales.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.