Números aleatorios falsos uniformes: distribuidos de manera más uniforme que los datos uniformes verdaderos


43

Estoy buscando una forma de generar números aleatorios que parezcan distribuidos uniformemente, y cada prueba mostrará que son uniformes, excepto que están distribuidos de manera más uniforme que los datos uniformes verdaderos .

El problema que tengo con los randoms uniformes "verdaderos" es que ocasionalmente se agruparán. Este efecto es más fuerte con un tamaño de muestra bajo. Aproximadamente dicho: cuando dibujo dos randoms uniformes en U [0; 1], las posibilidades son de alrededor del 10% de que están dentro de un rango de 0.1, y del 1% de que están dentro de 0.01.

Así que estoy buscando una buena manera de generar números aleatorios que estén distribuidos de manera más uniforme que los randoms uniformes .

Ejemplo de caso de uso: digamos que estoy haciendo un juego de computadora y quiero colocar tesoros al azar en un mapa (sin importarme ninguna otra cosa). No quiero que el tesoro esté en un solo lugar, debería estar en todo el mapa. Con randoms uniformes, si coloco, digamos, 10 objetos, las posibilidades no son tan bajas de que haya 5 o menos realmente cerca el uno del otro. Esto puede dar a un jugador una ventaja sobre otro. Piense en el buscaminas, las posibilidades (aunque sean bajas, si hay suficientes minas) son que tenga mucha suerte y gane con un solo clic.

Un enfoque muy ingenuo para mi problema es dividir los datos en una cuadrícula. Mientras el número sea lo suficientemente grande (y tenga factores), se puede imponer una uniformidad adicional de esta manera. Entonces, en lugar de extraer 12 variables aleatorias de U [0; 1], puedo extraer 6 de U [0; .5] y 6 de U [0.5; 1], o 4 de U [0; 1/3] + 4 de U [1/3; 2/3] + 4 de U [2/3; 1]

¿Hay alguna forma mejor de lograr esta uniformidad adicional en el uniforme? Probablemente solo funcione para randoms por lotes (al dibujar un solo azar, obviamente tengo que considerar todo el rango). En particular, puedo mezclar los registros nuevamente después (por lo que no son los primeros cuatro del primer tercio).

¿Qué tal hacerlo de forma incremental? Entonces, ¿el primero está en U [0; 1], luego dos de cada mitades, uno de cada tercero, uno de cada cuarto? ¿Se ha investigado esto y qué tan bueno es? Es posible que tenga que tener cuidado de usar diferentes generadores para x e y para no correlacionarlos (el primer xy siempre estará en la mitad inferior, el segundo en la mitad izquierda y el tercio inferior, el tercero en el tercio central y el tercero superior). ... por lo que también se necesita al menos una permutación aleatoria del contenedor y, a la larga, será demasiado parejo, supongo.

Como nodo lateral, ¿existe una prueba bien conocida de si alguna distribución está demasiado uniformemente distribuida para ser realmente uniforme? Por lo tanto, probar "verdadero uniforme" versus "alguien se metió con los datos y distribuyó los elementos de manera más uniforme". Si recuerdo correctamente, Hopkins Statistic puede medir esto, pero ¿puede usarse también para pruebas? También es una prueba KS inversa: si la desviación más grande está por debajo de un cierto umbral esperado, ¿los datos se distribuyen de manera uniforme?


77
¿Has oído hablar de las secuencias de Halton ? Para "demasiado uniformemente", las personas (comenzando con la investigación de Fisher de los resultados del experimento de guisantes de Mendel) se han referido a la estadística de chi-cuadrado (habitual) en la cola inferior de una distribución de chi-cuadrado.
whuber

Una forma de formalizar esto sería querer una distribución manera que (1) margina a sobre , (2 ) es simétrica, es decir, son intercambiables y (3) es grande cuando están dispersos. Creo que hay un problema real con (2) y (3) ya que las secuencias intercambiables infinitas en no pueden correlacionarse negativamente, por lo que cuanto mayor sea que queremos usar, menos repulsión podemos hacer cumplir; por otro lado, para grande , deberíamos tener una buena difusión de todos modos.g ( ) 1 x 1 , . . . , X n - 1 g X 1 , . . . , X n g ( x 1 , . . . , X n ) x 1 , . . . , x n R ng(x1,...,xn)g()1x1,...,xn1gX1,...,Xng(x1,...,xn)x1,...,xnRnn
chico

Las secuencias de Halton se acercan bastante al enfoque en el que estaba pensando. Incluyendo omitir las primeras entradas para reducir el riesgo de correlación. También estaba pensando en usar una permutación aleatoria para cada nivel. ¡Gracias por este puntero, ya que esto me da un buen punto para buscar métodos relacionados!
Anony-Mousse

wrt. Halton vuelve a secuenciar. Necesito tenerlos no deterministas, al menos a excepción de una semilla inicial. Veo dos formas aquí. Puedo hacer un cambio cíclico mediante un desplazamiento aleatorio + un desplazamiento de inicio aleatorio + tamaño de paso. El problema es que, por supuesto, el "tesoro" para permanecer en el ejemplo del juego tampoco debería estar en las mismas posiciones entre sí cada vez. O podría usar este enfoque uniforme de subintervalo que tenía en mi pregunta para agregar una cierta cantidad de "giro aleatorio". Por decirlo así: Halton parece nuevamente demasiado predecible y regular para mi uso.
Anony-Mousse

3
en.wikipedia.org/wiki/Low-discrepancy_sequence o mathworld.wolfram.com/QuasirandomSequence.html . Varias de las pruebas comunes de RNG uniformes (como las de las baterías de pruebas Diehard / Dieharder) son sensibles a tales cosas; por ejemplo, hay muy pocas "distancias pequeñas" entre puntos.
Glen_b

Respuestas:


60

, hay muchas formas de producir una secuencia de números que se distribuyen de manera más uniforme que los uniformes aleatorios. De hecho, hay todo un campo dedicado a esta pregunta; Es la columna vertebral de cuasi-Monte Carlo (QMC). A continuación se muestra un breve recorrido por los conceptos básicos absolutos.

Medición de uniformidad

Hay muchas formas de hacer esto, pero la forma más común tiene un sabor fuerte, intuitivo y geométrico. Supongamos que estamos interesados ​​en generar puntos en para algún número entero positivo . Definir donde es un rectángulo en tal que yx 1 , x 2 , , x n [ 0 , 1 ] d dnx1,x2,,xn[0,1]dd

Dn:=supRR|1ni=1n1(xiR)vol(R)|,
R[a1,b1]××[ad,bd][0,1]d0aibi1Res el conjunto de todos esos rectángulos. El primer término dentro del módulo es la proporción "observada" de puntos dentro de y el segundo término es el volumen de , .RRvol(R)=i(biai)

La cantidad menudo se denomina discrepancia o discrepancia extrema del conjunto de puntos . Intuitivamente, encontramos el "peor" rectángulo donde la proporción de puntos se desvía más de lo que esperaríamos con una uniformidad perfecta.Dn(xi)R

Esto es difícil de manejar en la práctica y difícil de calcular. En su mayor parte, las personas prefieren trabajar con la discrepancia de estrella , La única diferencia es el conjunto sobre el cual se toma el supremum. Es el conjunto de rectángulos anclados (en el origen), es decir, donde .

Dn=supRA|1ni=1n1(xiR)vol(R)|.
Aa1=a2==ad=0

Lema : para todos , . Prueba . La mano izquierda unida es obvia ya que . El límite a la derecha sigue porque cada se puede componer mediante uniones, intersecciones y complementos de no más de rectángulos anclados (es decir, en ).DnDn2dDnnd
ARRR2dA

Por lo tanto, vemos que y son equivalentes en el sentido de que si uno es pequeño a medida que crece, el otro también lo será. Aquí hay una imagen (caricatura) que muestra rectángulos candidatos para cada discrepancia.DnDnn

discrepancia extrema y estelar

Ejemplos de secuencias "buenas"

Las secuencias con discrepancia de estrella verificablemente baja menudo se denominan, como era de esperar, secuencias de baja discrepancia .Dn

Van der Corput . Este es quizás el ejemplo más simple. Para , las secuencias de van der Corput se forman expandiendo el número entero en binario y luego "reflejando los dígitos" alrededor del punto decimal. Más formalmente, esto se hace con la función inversa radical en la base , donde y son los dígitos en la expansión base de . Esta función forma la base de muchas otras secuencias también. Por ejemplo, en binario es y asíd=1ib

ϕb(i)=k=0akbk1,
i=k=0akbkakbi41101001a0=1 , , , , y . Por lo tanto, el punto 41 en la secuencia de van der Corput es .a1=0a2=0a3=1a4=0a5=1x41=ϕ2(41)=0.100101(base 2)=37/64

Tenga en cuenta que debido a que el bit menos significativo de oscila entre y , los puntos para impar están en , mientras que los puntos para incluso están en .i01xii[1/2,1)xii(0,1/2)

Secuencias de Halton . Entre las secuencias de baja discrepancia clásicas más populares, estas son extensiones de la secuencia de van der Corput a múltiples dimensiones. Deje que sea ​​la ésima prima más pequeña. Entonces, el ésimo punto de la secuencia dimensional de Halton es Para baja estos funcionan bastante bien, pero tienen problemas en dimensiones más altas .pjjixid

xi=(ϕp1(i),ϕp2(i),,ϕpd(i)).
d

Las secuencias de Halton satisfacen . También son agradables porque son extensibles porque la construcción de los puntos no depende de una elección a priori de la longitud de la secuencia .Dn=O(n1(logn)d)n

Secuencias de Hammersley . Esta es una modificación muy simple de la secuencia de Halton. En su lugar, usamos Quizás sorprendentemente, la ventaja es que tienen una mejor discrepancia de estrellas .

xi=(i/n,ϕp1(i),ϕp2(i),,ϕpd1(i)).
Dn=O(n1(logn)d1)

Aquí hay un ejemplo de las secuencias de Halton y Hammersley en dos dimensiones.

Halton y Hammersley

Secuencias de Halton permutadas por Faure . Se puede aplicar un conjunto especial de permutaciones (fijadas en función de ) a la expansión de dígitos para cada cuando se produce la secuencia de Halton. Esto ayuda a remediar (hasta cierto punto) los problemas a los que se alude en dimensiones superiores. Cada una de las permutaciones tiene la propiedad interesante de mantener y como puntos fijos.iaki0b1

Reglas de celosía . Deje que sean enteros. Tome donde denota la parte fraccional de . La elección juiciosa de los valores produce buenas propiedades de uniformidad. Las malas elecciones pueden conducir a malas secuencias. Tampoco son extensibles. Aquí hay dos ejemplos.β1,,βd1

xi=(i/n,{iβ1/n},,{iβd1/n}),
{y}yβ

Enrejados buenos y malos

(t,m,s) redes . redes en la base son conjuntos de puntos de manera que cada rectángulo de volumen en contiene puntos. Esta es una forma fuerte de uniformidad. Pequeño es tu amigo, en este caso. Las secuencias de Halton, Sobol 'y Faure son ejemplos de redes . Estos se prestan muy bien a la aleatorización a través de la codificación. La aleatorización aleatoria (correcta) de una red produce otra red . El proyecto MinT mantiene una colección de tales secuencias.(t,m,s)bbtm[0,1]sbtt(t,m,s)(t,m,s)(t,m,s)

Aleatorización simple: rotaciones de Cranley-Patterson . Sea una secuencia de puntos. Deje . Entonces los puntos se distribuyen uniformemente en .xi[0,1]dUU(0,1)x^i={xi+U}[0,1]d

Aquí hay un ejemplo con los puntos azules que son los puntos originales y los puntos rojos que son los rotados con líneas que los conectan (y se muestran envueltos, cuando corresponde).

Cranley Patterson

Secuencias completamente distribuidas uniformemente . Esta es una noción aún más fuerte de uniformidad que a veces entra en juego. Sea la secuencia de puntos en y ahora forme bloques superpuestos de tamaño para obtener la secuencia . Entonces, si , tomamos luego , etc. Si, por cada , , entonces se dice que está completamente uniformemente distribuida . En otras palabras, la secuencia produce un conjunto de puntos de cualquier(ui)[0,1]d(xi)s=3x1=(u1,u2,u3)x2=(u2,u3,u4) s1Dn(x1,,xn)0(ui)dimensión que tiene propiedades deseables .Dn

Como ejemplo, la secuencia de van der Corput no está completamente distribuida uniformemente ya que para , los puntos están en el cuadrado y los puntos están en . Por lo tanto, no hay puntos en el cuadrado que implica que para , para todo .s=2x2i(0,1/2)×[1/2,1)x2i1[1/2,1)×(0,1/2)(0,1/2)×(0,1/2)s=2Dn1/4n

Referencias estándar

La monografía de Niederreiter (1992) y el texto de Fang y Wang (1994) son lugares a donde ir para una mayor exploración.


44
Esta respuesta es excelente, y solo quería apreciar el esfuerzo que pones en ella. ¡Gracias!
Anony-Mousse

1
Una pequeña pregunta de seguimiento. Las secuencias de Halton se ven bien, porque también parecen no ser demasiado regulares. El material de celosía es muy normal para mí, y también la secuencia de Hammersley parece tener muchos objetos en líneas a través del origen. ¿Cuál es una buena manera de controlar el equilibrio entre el uniforme verdadero y el uniforme falso? ¿Solo toma el 80% de contribución de Halton + 20% uniforme al azar?
Anony-Mousse

1
¡+ 10k y definitivamente con un récord bajo (87 !!!!) respuestas! Ah, y me gusta mucho esta publicación. Marqué la pregunta como favorita por eso, en realidad. Bien hecho, @cardinal.
Macro

@Macro: ¡Gracias por tan lindo comentario! Eres muy amable. Creo que esta cosa de 10K puede ser temporal para mí. Sospecho que puedo caer muy por debajo de 10K tan pronto como se reviertan los votos del Procrastinator. Me sorprende que esto no haya sucedido, todavía, en realidad. Creo que emitieron casi 3000 votos en este sitio. Gracias también por publicar aquí; ¡De alguna manera nunca vi las preguntas de seguimiento de Anony-Mousse!
cardenal

@ Anony-Mousse: Disculpas por la terrible demora en responder. Debo haber pasado por alto estos comentarios. Creo que crear un equilibrio dependerá de tus objetivos. Teóricamente hablando, la introducción de cualquier punto uniforme aleatorio está destinado a destruir las propiedades óptimas de , por ejemplo. Como cuestión práctica, puede ser mejor usar una fluctuación muy pequeña de los puntos QMC donde la fluctuación se elige en función de las propiedades de la secuencia. También puede introducir transformaciones aleatorias de cuerpo rígido en todos los puntos, por ejemplo, desplazamientos y rotaciones de coordenadas. DD
cardenal

3

Una forma de hacerlo sería generar números aleatorios uniformes, luego probar la "cercanía" utilizando cualquier método que desee y luego eliminar elementos aleatorios que estén demasiado cerca de los demás y elegir otro conjunto de uniformes aleatorios para compensarlos.

¿Tal distribución pasaría todas las pruebas de uniformidad? ¡Espero que no! Ya no se distribuye uniformemente, ahora es otra distribución.

Un aspecto poco intuitivo de la probabilidad es que el azar es desordenado. Hay más ejecuciones en datos aleatorios de lo que la gente cree que habrá. Creo que Tversky investigó un poco sobre esto (investigó tanto que es difícil de recordar).


2
Uno de los (muchos) problemas con este enfoque es que es muy difícil caracterizar la distribución resultante.
whuber

El OP parece más preocupado por los tamaños de muestra pequeños. Esto sugeriría que no necesita preocuparse por toda la distribución. Supongamos que tiene un conjunto de coordenadas, genera otra y luego calcula la distancia euclidiana con respecto a todas las demás. Si la distancia más pequeña está por debajo de algún umbral, deseche el número y genere uno nuevo. Creo que la solución de Peter funciona bien.
John

@whuber Él no parece estar interesado en eso, aunque podría estar equivocado.
Peter Flom - Restablece a Monica

2
Permítame exponer mi objeción un poco más claramente, Peter: cuando elimina y / o ajusta los valores pseudoaleatorios de manera ad hoc para aproximar algunas propiedades deseadas, como la falta de agrupación, es difícil asegurar que las secuencias resultantes tengan Cualquier propiedad deseable. Con su método, por ejemplo, ¿podría decirnos cuál sería el primer momento del proceso resultante? (Es decir, ¿puede incluso asegurarnos que la intensidad es uniforme?) ¿Qué pasa con el segundo momento? Por lo general, constituyen la información mínima necesaria para usar las secuencias de manera efectiva para la inferencia.
whuber

2
OK, pero, en el ejemplo de la pregunta, quiere colocar un tesoro en un mapa en un juego. Eso no implicará inferencia ni momentos ni nada por el estilo. Admito que mi método no sería bueno para muchos propósitos, pero creo que coincide con el ejemplo. Por supuesto, tal vez el ejemplo no sea realmente lo que quiere ... Tal vez quiera algo más formal, en cuyo caso todas las otras respuestas deberían ser consideradas.
Peter Flom - Restablece a Monica

3

Esto se conoce como un proceso de punto de Poisson "núcleo duro", llamado así por Brian Ripley en la década de 1970; es decir, desea que sea aleatorio, pero no desea que ningún punto esté demasiado cerca. El "núcleo duro" se puede imaginar como una zona de amortiguación alrededor de la cual otros puntos no pueden entrometerse.

Imagine que está registrando la posición de algunos automóviles en una ciudad, pero solo está registrando el punto en el centro nominal del automóvil. Mientras están en la calle, no hay dos pares de puntos que se puedan unir porque los puntos están protegidos por el "núcleo duro" de la carrocería: ignoraremos la posible superposición en aparcamientos de varios pisos :-)

Existen procedimientos para generar tales procesos de puntos: una forma es generar puntos de manera uniforme y luego eliminar los que estén demasiado juntos.

Para obtener algunos detalles sobre tales procesos, consulte, por ejemplo, esto


2

Con respecto a la generación por lotes de antemano, generaría una gran cantidad de conjuntos de variantes pseudoaleatorias y luego las probaría con una prueba como la prueba de Kolmogorov-Smirnov. Deberá seleccionar el conjunto que tenga el valor p más alto (es decir, es ideal). Tenga en cuenta que esto será lento, pero a medida que hace más grande, probablemente sea menos necesario. p1N

Con respecto a la generación incremental, esencialmente está buscando una serie con una autocorrelación moderadamente negativa. No estoy seguro de cuál sería la mejor manera de hacerlo, ya que tengo una experiencia muy limitada con series temporales, pero sospecho que existen algoritmos existentes para esto.

Con respecto a una prueba de "demasiado parejo", cualquier prueba de si una muestra sigue una distribución específica (como el KS mencionado anteriormente) servirá, solo desea verificar si , en lugar de enfoque estándar Escribí sobre un ejemplo de este enfoque alternativo aquí: chi-cuadrado siempre es una prueba unilateral . p>(1α)


1

Formalizaría su problema de esta manera: desea una distribución sobre tal que la densidad sea para algunos cuantificando la repulsión de puntos.[0,1]nf(x)e(1kij|xixj|k)1kk<0

Una manera fácil de generar tales vectores es hacer un muestreo de Gibbs.


¿Puedes dar más detalles sobre esto? El muestreo de Gibbs no parece ayudar aquí, ya que la distribución condicional = distribución marginal = uniforme? ¿O es su sugerencia de usar las muestras anteriores para producir "agujeros" en la distribución de la que tomar muestras?
Anony-Mousse

Elija un vector aleatorio uniforme, y luego elija repetidamente uniformemente un índice y muestree de nuevo . Calcule la razón de antes y después del remuestreo y rechace su remuestreo con probabilidades . Esto es mucho más rápido que las otras respuestas que ha obtenido cuando tiene un vector muy largo porque está realizando rechazos locales en lugar de globales. ixirf(x)r
Neil G
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.