Estoy buscando un algoritmo para generar una matriz de N números aleatorios, de modo que la suma de los N números sea 1, y todos los números se encuentren dentro de 0 y 1. Por ejemplo, N = 3, el punto aleatorio (x, y, z) debe estar dentro del triángulo:
x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1
Idealmente, quiero que cada punto dentro del área tenga la misma probabilidad. Si es demasiado difícil, puedo dejar el requisito. Gracias.
Respuestas:
Supongamos primero que desea probar dentro de
Esto no hace una gran diferencia, ya que el punto de muestra seguirá estando en su área solicitada con alta probabilidad.
Ahora te queda muestrear un punto de un simplex . En el ejemplo 3d obtienes un 2d simplex (triángulo) realizado en 3d.
En esta publicación de blog se discutió cómo elegir un punto de manera uniforme al azar (ver los comentarios).
Para su problema, significaría que toma números aleatorios del intervalo ( 0 , 1 ) , luego agrega un 0 y 1 para obtener una lista de n + 1 números. Ordena la lista y luego registra las diferencias entre dos elementos consecutivos. Esto le da una lista de n números que sumarán 1 . Además, este muestreo es uniforme. Esta idea se puede encontrar en Donald B. Rubin, The bootstrap Bayesian Ann. Estadístico. 9, 1981, 130-134.n - 1 ( 0 , 1 ) 0 0 1 n + 1 norte 1
Por ejemplo ( ) tiene los tres números aleatorios, luego obtiene la secuencia ordenada y esto da las diferencias , y por construcción estos cuatro números suman 1.n = 4
0.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
Otro enfoque es el siguiente: primera muestra del hipercubo (es decir, se olvidare re- 1 . Por lo tanto, si muestras de manera uniforme desde el hipercubo, esto no te dará un muestreo uniforme en el símplex. Sin embargo, si toma muestras del hipercubo con una distribución exponencial adecuada, este efecto se cancela. La Figura le da una idea de cómo ambos métodos tomarán muestras. Sin embargo, prefiero el método de "clasificación" debido a su forma simple. También es más fácil de implementar.
x+y+z=1
) y luego normaliza el punto de muestra. La normalización es una proyección del hipercubo al d - 1- simple. Debe quedar intuitivamente claro que los puntos en el centro del símplex tienen más "puntos de preimagen" que en el exteriorfuente
Esto es para agregar a las respuestas existentes.
Devroye es una excelente referencia para preguntas de este tipo. El Capítulo 7 proporciona los algoritmos necesarios para generar estadísticas de orden uniformes, que el OP busca.
fuente
Aquí,
uniform(0,1)
devuelve un número real distribuido de manera independiente y uniforme entre 0 y 1.fuente
Vea este documento : Smith, N. y Tromble, R., Muestreo uniforme de la unidad simplex .
fuente