2010-10-26 27 views
8

Dada una serie de datos generados aleatoriamente, ¿cómo puedo saber qué tan aleatorio es en realidad? ¿R-lang es una buena herramienta para este matlab? ¿Qué otras preguntas pueden estas herramientas responder sobre datos generados aleatoriamente? ¿Hay alguna otra herramienta mejor para esto?Análisis de números aleatorios

+7

Obligatorio: http://www.random.org/analysis/dilbert.jpg –

+1

Ejecutar --- no caminar --- a una librería y comprar Knuth's The Art of Computer Programming, volumen II, Semi-numérico Algoritmos. Hasta que leas eso, estás volando a ciegas. –

+3

Obligatorio: http://xkcd.com/221/ – CanSpice

Respuesta

10

El DieHarder test battery de Robert G. Brown --- que vuelve a implementar y extiende el antiguo DIEHARD de Marsaglia et al - se ha incluido en el paquete R RDieHarder con el que puede empezar.

Tenga en cuenta que las versiones RDieHarder necesitan sus correspondientes versiones DieHarder coincidentes, y aún no hemos llegado a la versión de desarrollo más reciente de esta última.

Editar También, para el subconjunto de pruebas cryptographioic, la suite NIST (que está incluido en DieHarder) debe ser adecuado ya que es lo que fue diseñado.

3

Recomiendo leer Chapter 10 de Beautiful Testing: Probando un generador de números aleatorios. Es un poco más accesible que la mayoría de los textos sobre el tema. Tal vez, si somos amables, el autor de ese capítulo, John Cook, podría pasar y dar su opinión.

+2

JD: Agregué un enlace a ese capítulo. –

4

De acuerdo a Wikipedia (Randomness):

La idea central es que una serie de los bits es aleatoria si y sólo si es más corto que cualquier programa informático que puede producir esa cadena (Kolmogorov aleatoriedad) - esto significa que las cadenas aleatorias son aquellas que no pueden ser comprimidas.

Por lo tanto, dada la secuencia aleatoria de números, guárdelo en un archivo y comprímalo con su herramienta favorita (zip, rar, ...). La relación de compresión puede interpretarse como una medida de la aleatoriedad ... Mejor aún, la usaría como puntaje relativo para comparar la aleatoriedad de dos series de datos.

1

Para la teoría, la referencia mencionada anteriormente por Knuth es útil y para vincular la respuesta de Amro, hay un trabajo de Li & Vitanyi que se relaciona aquí. link text

+0

Cilibrasi hizo un trabajo relacionado con la implementación de ideas en estas líneas, sin embargo, el código no es un paquete/caja de herramientas R/MATLAB. –

5

Primero debe decidir qué tipo de aleatoriedad está probando. ¿Tienes en mente una distribución uniforme dentro de algún rango? Eso es generalmente lo que las personas tienen en mente, aunque es posible que tenga algún otro sabor de aleatoriedad, como una distribución normal.

Una vez que tenga una distribución candidata, puede probar la bondad del ajuste a esa distribución. La prueba de Kolmogorov-Smirnov es una buena prueba de propósito general. Creo que se llama ks.test en R. Pero también creo que asume valores distintos, por lo que podría ser un problema si está tomando muestras de un rango tan pequeño de valores que el mismo valor aparece más de una vez.

S. Lott mencionó Knuth's Seminumerical Algorithms en los comentarios. Ese libro tiene una buena introducción a la prueba de chi-cuadrado y las pruebas de Kolmogorov-Smirnov para la bondad de ajuste.

Si sospecha que tiene valores aleatorios uniformes, la prueba DIEHARD que menciona Dirk Eddelbuettel es una prueba estándar.

+0

Bueno, mencioné * DieHarder *, que es diferente de DIEHARD, que se vuelve a implementar y se amplía con un montón de pruebas que no se encuentran en DIEHARD, incluidas algunas de NIST y algunas de Robert y colaboradores en los que trabajó. –

+0

Lo siento, me lo perdí. Me gusta la alusión a la película de Bruce Willis. :) –

+0

Sí. Robert es un tipo divertido. –