¿Generar pesos distribuidos uniformemente que sumen a la unidad?


14

Es común usar pesos en aplicaciones como el modelado de mezclas y combinar linealmente funciones básicas. Los pesos wi menudo deben obedecer wi 0 y iwi=1 . Me gustaría elegir aleatoriamente un vector de peso w=(w1,w2,) de una distribución uniforme de dichos vectores.

Puede ser tentador usar wi=ωijωj dondeωiU (0, 1), sin embargo, como se analiza en los comentarios a continuación, la distribución deno es uniforme.w

Sin embargo, dada la restricción , parece que la dimensionalidad subyacente del problema es , y que debería ser posible elegir a eligiendo parámetros n-1 de acuerdo con alguna distribución y luego calcular el \ mathbf {w} correspondiente a partir de esos parámetros (porque una vez que se especifica n-1 de los pesos, el peso restante está completamente determinado).iwi=1n1wn1wn1

El problema parece ser similar a la punto esfera recoger problema (pero, en lugar de recoger 3-vectores cuyos norma es la unidad, quiero recoger -vectors cuyos norma es la unidad).2n1

¡Gracias!


3
Su método no genera un vector distribuido uniformemente en el simplex. Para hacer lo que desea correctamente, la forma más directa es generar iid variables aleatorias y luego normalizarlas por su suma. Podría intentar hacerlo encontrando algún otro método para dibujar solo variables directamente, pero tengo mis dudas con respecto a la compensación de eficiencia ya que las variables pueden generarse de manera muy eficiente a partir de variaciones. nExp(1)n1Exp(1)U(0,1)
cardenal

Respuestas:


22

Elija uniformemente (por medio de n - 1 reales uniformes en el intervalo [ 0 , 1 ] ). Ordene los coeficientes de modo que 0 x 1x n - 1 . Conjuntox[0,1]n1n1[0,1]0x1xn1

w=(x1,x2x1,x3x2,,xn1xn2,1xn1).

Como podemos recuperar la ordenada por medio de las sumas parciales de w i , el mapeo xw es ( n - 1 ) . a 1; en particular, su imagen es el n - 1 simplex en R n . Debido a que (a) cada intercambio en una especie es una transformación lineal, (b) la fórmula anterior es lineal y (c) las transformaciones lineales preservan la uniformidad de las distribuciones, la uniformidad de x implica la uniformidad de w en el n - 1 simplex.xiwixw(n1)!n1Rnxw n1 En particular, tenga en cuenta que los marginales de no son necesariamente independientes.w

3D point plot

Este gráfico de puntos 3D muestra los resultados de 2000 iteraciones de este algoritmo para . Los puntos se limitan al simplex y se distribuyen aproximadamente de manera uniforme sobre él.n=3


Debido a que el tiempo de ejecución de este algoritmo es , es ineficiente para n grande . ¡Pero esto responde la pregunta! Una mejor manera (en general) de generar valores distribuidos uniformemente en el n - 1 -simplex es dibujar n reales uniformes ( x 1 , ... , x n ) en el intervalo [ 0 , 1 ] , calcularO(nlog(n))O(n)nn1n(x1,,xn)[0,1]

yi=log(xi)

(que hace que cada positiva con probabilidad 1 , de donde su suma es casi seguramente distinto de cero) y conjuntoyi1

w=(y1,y2,,yn)/(y1+y2++yn).

Esto funciona porque cada tiene una distribución Γ ( 1 ) , lo que implica que w tiene una distribución Dirichlet ( 1 , 1 , 1 ) , y eso es uniforme.yiΓ(1)w(1,1,1)

[3D point plot 2]


1
@Chris Si por "Dir (1)" te refieres a la distribución de Dirichlet con parámetros = ( 1 , 1 , ... , 1 ) , entonces la respuesta es sí. (α1,,αn)(1,1,,1)
whuber

1
(+1) Un comentario menor: la intuición es excelente. Puede ser necesario tener cuidado al interpretar (a), ya que parece que la "transformación lineal" en esa parte es aleatoria . Sin embargo, esto se soluciona fácilmente a expensas de una formalidad adicional mediante el uso de intercambiabilidad del proceso de generación y una cierta propiedad de invariancia.
Cardenal

1
Más explícitamente: ¡Para distribuciones con una densidad , la densidad de las estadísticas de orden de una muestra iid de tamaño n es n ! f ( x 1 ) f ( x n ) 1 ( x 1 < x 2 < < x n ) . En el caso de f = 1 [ 0 , 1 ] ( x )fnn!f(x1)f(xn)1(x1<x2<<xn)f=1[0,1](x), la distribución de las estadísticas del pedido es uniforme en un politopo. Tomado de este punto, las transformaciones restantes son deterministas y el resultado sigue.
Cardenal

1
@cardinal Ese es un punto interesante, pero no creo que importe, aunque tienes razón en que detalles adicionales podrían ayudar. Los intercambios (en realidad reflexiones, transformaciones lineales qua ) no son aleatorios: están predeterminados. En efecto, está grabado en ( n - 1 ) !In1=[0,1]n1(n1)!regiones, de las cuales una se distingue de las otras, y hay una biyección afín predeterminada entre cada región y la distinguida. Por lo tanto, el único hecho adicional que necesitamos es que una distribución uniforme en una región es uniforme en cualquier subconjunto medible de la misma, lo cual es una trivialidad completa.
whuber

2
@whuber: observaciones interesantes. ¡Gracias por compartir! Siempre aprecio tus pensamientos perspicaces sobre tales cosas. Con respecto a mi comentario anterior sobre "transformación lineal aleatoria", mi punto fue que, al menos a través de , la transformación utilizada depende del punto de muestra ω . Otra forma de pensar es que hay una función fija y predeterminada T : R n - 1R n - 1 tal que w = T ( x ) , pero no llamaría a esa función lineal, aunque es lineal en subconjuntos esa partición la ( n - 1 )xωT:Rn1Rn1w=T(x)(n1)-cubo. :)
cardenal

1
    zz <- c(0, log(-log(runif(n-1))))
    ezz <- exp(zz)
    w <- ezz/sum(ezz)

La primera entrada se pone a cero para su identificación; Vería que se hace en modelos logísticos multinomiales. Por supuesto, en modelos multinomiales, también tendría covariables debajo de los exponentes, en lugar de solo los zzs aleatorios . La distribución de zzs es la distribución de valor extremo; necesitarías esto para asegurarte de que los pesos resultantes estén en el lugar en el que inicialmente puse rnormals allí, pero luego tuve la sensación de que esto no va a funcionar.


Eso no funciona ¿Intentaste mirar un histograma?
Cardenal

44
Su respuesta ahora es casi correcta. Si genera iid E x p ( 1 ) y divide cada uno por la suma, obtendrá la distribución correcta. Vea la distribución de Dirichlet para más detalles, aunque no se trata explícitamente . nExp(1)
cardenal

1
Dada la terminología que está utilizando, suena un poco confundido.
cardenal

2
En realidad, el enlace Wiki hace hablar de esto (bastante) de forma explícita. Vea el segundo párrafo bajo el encabezado Soporte .
cardenal

1
wn1Rnwn1n1

0

La solución es obvia. El siguiente código MathLab proporciona la respuesta para 3 pesos.

function [  ] = TESTGEN( )
SZ  = 1000;
V  = zeros (1, 3);
VS = zeros (SZ, 3);
for NIT=1:SZ   
   V(1) = rand (1,1);     % uniform generation on the range 0..1
   V(2) = rand (1,1) * (1 - V(1));
   V(3) = 1 - V(1) - V(2);  
   PERM = randperm (3);    % random permutation of values 1,2,3
   for NID=1:3
         VS (NIT, NID) = V (PERM(NID));
    end
end 
figure;
scatter3 (VS(:, 1), VS(:,2), VS (:,3));
end

enter image description here


1
Sus marginales no tienen la distribución correcta. A juzgar por el artículo de Wikipedia sobre la distribución de Dirichlet (sección de generación de números aleatorios, que tiene el algoritmo que ha codificado), debe usar una distribución beta (1,2) para V (1), no un uniforme [0,1] distribución.
soakley

Parece que la densidad aumenta en las esquinas de este triángulo inclinado. No obstante, proporciona una buena visualización geométrica del problema.
DWin
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.