Gerar pesos uniformemente distribuídos que somam a unidade?

14

É comum usar pesos em aplicações como modelagem de mistura e combinar linearmente funções básicas. Pesos wi muitas vezes deve obedecer wi 0 e iwi=1 . Eu gostaria de escolher aleatoriamente um vetor de peso w=(w1,w2,) partir de uma distribuição uniforme desses vetores.

Pode ser tentador usar wi=ωijωj ondeωiU (0, 1), no entanto, conforme discutido nos comentários abaixo, a distribuição dewnão é uniforme.

Entretanto, dada a restrição iwi=1 , parece que a dimensionalidade subjacente do problema é n1 , e que deve ser possível escolher um w escolhendo n1 parâmetros de acordo com alguma distribuição e depois computando o correspondente a Wesses parâmetros (porque uma vez que n-1 dos pesos são especificados, o peso restante é totalmente determinado).

O problema parece ser semelhante ao problema de escolha de pontos de esfera (mas, em vez de escolher 3 vetores cuja norma 2 é unidade, quero escolher n vetores cuja 1 norma seja unidade).

Obrigado!

Chris
fonte
3
Seu método não gera um vetor uniformemente distribuído no simplex. Para fazer o que você deseja corretamente, a maneira mais direta é gerar iid E x p ( 1 ) variáveis ​​aleatórias e normalizá-las pela soma. Você poderia tentar fazer isso encontrando algum outro método para desenhar apenas as variáveis n - 1 diretamente, mas tenho minhas dúvidas sobre o tradeoff de eficiência, já que as variáveis E x p ( 1 ) podem ser geradas com muita eficiência a partir de variáveis U ( 0 , 1 ) .nExp(1)n1Exp(1)U(0,1)
cardeal

Respostas:

22

Escolha uniformemente (por meio de n - 1 reais uniformes no intervalo [ 0 , 1 ] ). Classifique os coeficientes de forma que 0 x 1x n - 1 . Conjuntox[0,1]n1n1[0,1]0x1xn1

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

Porque nós podemos recuperar o ordenado por meio das somas parciais do w i , o mapeamento xw é ( n - 1 ) ! para 1; em particular, sua imagem é o n - 1 simplex em R n . Como (a) cada troca de um tipo é uma transformação linear, (b) a fórmula anterior é linear e (c) as transformações lineares preservam a uniformidade das distribuições, a uniformidade de x implica a uniformidade de w no n - 1 simplex.xiwixw(n1)!n1RnxW n-1 Em particular, observe que os marginais de não são necessariamente independentes.W

Gráfico de pontos 3D

Este gráfico de pontos 3D mostra os resultados de 2000 iterações desse algoritmo para . Os pontos são confinados ao simplex e são distribuídos aproximadamente uniformemente sobre ele.n=3


Como o tempo de execução desse algoritmo é , é ineficiente para n grande . Mas isso responde à pergunta! Uma maneira melhor (em geral) de gerar valores uniformemente distribuídos no n - 1- simplex é desenhar n reais reais ( x 1 , , x n ) no intervalo [ 0 , 1 ] , calcularO(nregistro(n))O(n)nn-1n(x1,...,xn)[0 0,1]

yEu=-registro(xEu)

(o que faz com que cada positivo com probabilidade 1 , de onde a sua soma é quase certamente diferente de zero) e conjuntoyEu1

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

Isto funciona porque cada tem um Γ ( 1 ) de distribuição, o que implica w tem um Dirichlet ( 1 , 1 , 1 ) de distribuição - e que é uniforme.yiΓ(1)w(1,1,1)

[Plotagem de pontos 3D 2]

whuber
fonte
1
@ Chris Se por "Dir (1)" você quer dizer a distribuição Dirichlet com parâmetros = ( 1 , 1 , , 1 ) , então a resposta é sim. (α1,,αn)(1,1,,1)
whuber
1
(+1) Um pequeno comentário: a intuição é excelente. Pode ser necessário tomar cuidado na interpretação (a), pois parece que a "transformação linear" nessa parte é aleatória . No entanto, isso é facilmente contornado às custas de formalidades adicionais, usando a permutabilidade do processo de geração e uma certa propriedade de invariância.
cardeal
1
Mais explicitamente: para distribuições com uma densidade , a densidade das estatísticas da ordem de uma amostra iid de tamanho n é n ! f ( x 1 ) f ( x n ) 1 ( x 1 < x 2 < < x n ) . No caso de f = 1 [ 0 , 1 ] ( x )fnn!f(x1)f(xn)1(x1<x2<<xn)f=1[0,1](x), a distribuição das estatísticas do pedido é uniforme em um politopo. Tomadas a partir deste ponto, as transformações restantes são determinísticas e o resultado segue.
cardeal
1
@ cardinal Esse é um ponto interessante, mas acho que não importa, embora você esteja certo de que detalhes adicionais possam ajudar. As permutas (na verdade, reflexões, qua linear transformações) não são aleatórios: eles são pré-determinados. Com efeito, é gravado em ( n - 1 ) !Eun-1=[0 0,1]n-1(n-1)!regiões, das quais uma se distingue das outras, e há uma bijeção afim predeterminada entre cada região e a distinta. Daí, o único fato adicional de que precisamos é que uma distribuição uniforme em uma região seja uniforme em qualquer subconjunto mensurável da mesma, o que é uma trivialidade completa.
whuber
2
@ whuber: observações interessantes. Obrigado por compartilhar! Eu sempre aprecio seus pensamentos perspicazes sobre essas coisas. Em relação ao meu comentário anterior sobre "transformação linear aleatória", meu argumento foi que, pelo menos através de , a transformação usada depende do ponto de amostra ω . Outra maneira de pensar é que existe uma função fixa e predeterminada T : R n - 1R n - 1 tal que w = T ( x ) , mas eu não chamaria essa função de linear, embora seja linear em subconjuntos que particionam o ( n - 1 )xωT:Rn1Rn1w=T(x)(n1)-cubo. :)
cardeal
1
    zz <- c(0, log(-log(runif(n-1))))
    ezz <- exp(zz)
    w <- ezz/sum(ezz)

A primeira entrada é colocada em zero para identificação; você veria isso em modelos logísticos multinomiais. Obviamente, em modelos multinomiais, você também teria covariáveis ​​sob os expoentes, em vez de apenas os zzs aleatórios . A distribuição dos zzs é a distribuição de valor extremo; você precisaria disso para garantir que os pesos resultantes sejam os mesmos que inicialmente coloquei rnormlá, mas depois tive a sensação de que isso não vai funcionar.

StasK
fonte
Isso não funciona. Você tentou olhar para um histograma?
cardeal
4
Sua resposta agora está quase correta. Se você gerar iid E x p ( 1 ) e dividir cada um pela soma, obterá a distribuição correta. Consulte Distribuição do Dirichlet para obter mais detalhes, embora não discuta isso explicitamente . nExp(1)
cardeal
1
Dada a terminologia que você está usando, você parece um pouco confuso.
cardeal
2
Na verdade, o link Wiki faz discutir este (bastante) explicitamente. Veja o segundo parágrafo sob o título Suporte .
cardeal
1
Essa caracterização é muito restritiva e geral demais. É muito geral, pois a distribuição resultante de deve ser "uniforme" no n - 1 simplex em R n . É muito restritivo, pois a pergunta é formulada geralmente o suficiente para permitir que w seja alguma função de uma distribuição n - 1- variável, que por sua vez presumivelmente , mas não necessariamente, consiste em n - 1 variáveis independentes (e talvez iid). wn1RnWn-1n-1
whuber
0

A solução é óbvia. O código MathLab a seguir fornece a resposta para três 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

insira a descrição da imagem aqui

user96990
fonte
1
Seus marginais não têm a distribuição correta. A julgar pelo artigo da Wikipedia sobre a distribuição Dirichlet (seção de geração de número aleatório, que possui o algoritmo que você codificou), você deve usar uma distribuição beta (1,2) para V (1), não uniforme [0,1] distribuição.
soakley
Parece que a densidade aumenta nos cantos deste triângulo inclinado. No entanto, fornece uma boa exibição geométrica do problema.
DWin