Generare pesi distribuiti uniformemente che si sommano all'unità?


14

È comune utilizzare pesi in applicazioni come la modellazione della miscela e combinare linearmente le funzioni di base. Pesi spesso devono obbedire w i 0 e Σ i w i = 1 . Vorrei scegliere casualmente un vettore di peso w = ( w 1 , w 2 , ... ) da una distribuzione uniforme di tali vettori.wiwiiwi=1w=(w1,w2,)

Potrebbe essere allettante usare doveωiwi=ωijωj U (0, 1), tuttavia, come discusso nei commenti seguenti, la distribuzione di w non è uniforme.ωiw

Tuttavia, dato il vincolo , sembra che la dimensionalità sottostante del problema sia n - 1 e che dovrebbe essere possibile scegliere un w scegliendo n - 1 parametri in base a una distribuzione e quindi calcolando il w corrispondente a tali parametri (poiché una volta specificato n - 1 dei pesi, il peso rimanente viene completamente determinato).iwi=1n1wn1wn1

Il problema sembra essere simile al problema della raccolta del punto sfera (ma, piuttosto che selezionare 3 vettori la cui norma è unità, voglio selezionare n -vettori la cui 1 norma è unità).2n1

Grazie!


3
Il tuo metodo non genera un vettore uniformemente distribuito sul simplex. Per fare ciò che vuoi correttamente, il modo più semplice è generare iid E x p ( 1 ) variabili casuali e poi normalizzarle con la loro somma. Potresti provare a farlo trovando qualche altro metodo per disegnare direttamente solo n - 1 variate, ma ho i miei dubbi riguardo al compromesso di efficienza poiché le variate E x p ( 1 ) possono essere generate in modo molto efficiente da U ( 0 , 1 )nExp(1)n1Exp(1)U(0,1) variate .
cardinale il

Risposte:


22

Scegli uniformemente (per mezzo di n - 1 reali uniformi nell'intervallo [ 0 , 1 ] ). Ordinare i coefficienti in modo che 0 x 1x n - 1 . Impostatox[0,1]n1n1[0,1]0x1xn1

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

Poiché possiamo recuperare la ordinata per mezzo delle somme parziali della w i , la mappatura xw è ( n - 1 ) ! a 1; in particolare, la sua immagine è il simplex n - 1 in R n . Poiché (a) ogni scambio in una specie è una trasformazione lineare, (b) la formula precedente è lineare e (c) le trasformazioni lineari preservano l'uniformità delle distribuzioni, l'uniformità di x implica l'uniformità di w sul simplex n - 1 .xiwixw(n1)!n1Rnxw n1 In particolare, notare che i margini di w non sono necessariamente indipendenti.

3D point plot

Questo grafico a punti 3D mostra i risultati di 2000 iterazioni di questo algoritmo per . I punti sono limitati al simplex e sono distribuiti approssimativamente in modo uniforme su di esso.n=3


Poiché il tempo di esecuzione di questo algoritmo è , è inefficiente per n grande . Ma questo risponde alla domanda! Un modo migliore (in generale) per generare valori distribuiti uniformemente sul n - 1 -simplex è disegnare n reals uniformi ( x 1 , ... , x n ) sull'intervallo [ 0 , 1 ] , calcolareO(nlog(n))O(n)nn1n(x1,,xn)[0,1]

yi=log(xi)

(che rende ciascuno positivo con probabilità 1 , da cui la loro somma è quasi sicuramente diversa da zero) e impostatoyi1

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

Questo funziona perché ogni ha un Γ ( 1 ) di distribuzione, che implica w ha una Dirichlet ( 1 , 1 , 1 ) distribuzione - e che è uniforme.yiΓ(1)w(1,1,1)

[3D point plot 2]


1
@Chris Se per "Dir (1)" si intende la distribuzione di Dirichlet con parametri = ( 1 , 1 , ... , 1 ) , la risposta è sì. (α1,,αn)(1,1,,1)
whuber

1
(+1) Un commento minore: l'intuizione è eccellente. Potrebbe essere necessario prestare attenzione all'interpretazione (a), poiché sembra che la "trasformazione lineare" in quella parte sia casuale . Tuttavia, questo viene facilmente risolto a scapito di ulteriori formalità utilizzando la scambiabilità del processo di generazione e una certa proprietà di invarianza.
cardinale

1
fnn!f(x1)f(xn)1(x1<x2<<xn)f=1[0,1](X), the distribution of the order statistics is uniform on a polytope. Taken from this point, the remaining transformations are deterministic and the result follows.
cardinal

1
@cardinal That's an interesting point, but I don't think it matters, although you're right that additional details could help. The swaps (actually reflections, qua linear transformations) are not random: they are predetermined. In effect, In1=[0,1]n1 is carved into (n1)!regioni, di cui una si distingue dalle altre, e esiste una biiezione affine predeterminata tra ciascuna regione e quella distinta. Di conseguenza, l'unico fatto aggiuntivo di cui abbiamo bisogno è che una distribuzione uniforme su una regione sia uniforme su qualsiasi sottoinsieme misurabile di essa, il che è una banalità assoluta.
whuber

2
@whuber: osservazioni interessanti. Grazie per la condivisione! Apprezzo sempre i tuoi pensieri perspicaci su queste cose. Per quanto riguarda il mio precedente commento sulla "trasformazione lineare casuale", il mio punto era che, almeno attraversoX, la trasformazione utilizzata dipende dal punto di campionamento ω. Un altro modo di pensarci è che esiste una funzione fissa, predeterminataT:Rn-1Rn-1 such that w=T(x), but I wouldn't call that function linear, though it is linear on subsets that partition the (n1)-cube. :)
cardinal

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

The first entry is put to zero for identification; you would see that done in multinomial logistic models. Of course, in multinomial models, you would also have covariates under the exponents, rather than just the random zzs. The distribution of the zzs is the extreme value distribution; you'd need this to ensure that the resulting weights are i.i.d. I initially put rnormals there, but then had a gut feeling that this ain't gonna work.


That doesn't work. Did you try looking at a histogram?
cardinal

4
Your answer is now almost correct. If you generate n iid Exp(1) and divide each by the sum, then you will get the correct distribution. See Dirichlet distribution for more details, though it doesn't discuss this explicitly.
cardinal

1
Given the terminology you are using, you sound a little confused.
cardinal

2
Actually, the Wiki link does discuss this (fairly) explicitly. See the second paragraph under the Support heading.
cardinal

1
This characterization is both too restrictive and too general. It is too general in that the resulting distribution of w must be "uniform" on the n1 simplex in Rn. It is too restrictive in that the question is worded generally enough to allow that w be some function of an n1-variate distribution, which in turn presumably, but not necessarily, consists of n1 independent (and perhaps iid) variables.
whuber

0

The solution is obvious. The following MathLab code provides the answer for 3 weights.

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
I tuoi marginali non hanno la distribuzione corretta. A giudicare dall'articolo di Wikipedia sulla distribuzione di Dirichlet (sezione di generazione di numeri casuali, che ha l'algoritmo che hai codificato), dovresti utilizzare una distribuzione beta (1,2) per V (1), non un'uniforme [0,1] distribuzione.
Soakley,

Sembra che la densità aumenti negli angoli di questo triangolo inclinato. Tuttavia, fornisce una bella visualizzazione geometrica del problema.
DWin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.