Muestreo uniforme de un simplex

29

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.

Ruofeng
fuente
¿Cuál es la distribución objetivo? Que has intentado
Raphael
3
Tenga en cuenta que siempre hay muestras de rechazo : muestree números uniformes y rechace si los números no suman 1 . Aquí, el número esperado de iteraciones es incómodamente alto, por lo que debe hacer algo más. n1
Raphael

Respuestas:

28

Supongamos primero que desea probar dentro de

x + y + z = 1
0 ≤ x ≤ 1
0 ≤ y ≤ 1
0 ≤ z ≤ 1

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.n1(0,1)01n+1n1

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=40.4 0.2 0.10 0.1 0.2 0.4 10.1 0.1 0.2 0.6

Otro enfoque es el siguiente: primera muestra del hipercubo (es decir, se olvida 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 exteriordd1. 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.

Ejemplo de los 2 métodos de muestreo.

A.Schulz
fuente
n(0,1)
Abordé tu pregunta en la respuesta extendida.
A.Schulz
1
¿Hay alguna prueba simple que muestre que la clasificación da una distribución uniforme? Solo tengo antecedentes elementales en probabilidad, por lo que el papel está sobre mi cabeza.
Chao Xu
55
n(0,1)nn1(0,1)
1
@Orient: Por favor, hágale preguntas en una publicación separada y no haga mal uso de los comentarios para esto.
A.Schulz
8

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.

n[0,1]O(nlogn)nx1,,xnExp(1)

(yi)1in=1ixj1nxj
O(n)

[0,1]2x+3y+z=5

PKG
fuente
Si sigo la respuesta aquí: stackoverflow.com/questions/2106503/... Luego, generar un número aleatorio a partir de la distribución exponencial implica evaluar el logaritmo, que puede ser un poco lento.
R zu
3
X[0] = 0
for i = 1 to N-1
    X[i] = uniform(0,1)
X[n] = 1
sort X[0..N]
for i = 1 to N
    Z[i] = X[i] - X[i-1]
return Z[1..N]

Aquí, uniform(0,1)devuelve un número real distribuido de manera independiente y uniforme entre 0 y 1.

JeffE
fuente
55
Esta es la respuesta de A. Schulz en código sin la explicación, ¿verdad?
Raphael
1

Vea este documento : Smith, N. y Tromble, R., Muestreo uniforme de la unidad simplex .

Alec
fuente
2
Formatee su respuesta de manera legible: está escribiendo para seres humanos, no para el compilador bibtex. Además, si el documento está disponible en línea, es mucho más eficiente para usted proporcionar un enlace.
David Richerby