Generazione di variabili casuali che soddisfano vincoli


9

Devo generare un elenco di variabili casuali soggetto a vincoli che possono essere espressi nella forma dove \ bf {E} è una matrice m \ times n se \ bf {x } ha n voci. In tutti i casi che ho a che fare, n >> m , ad esempio n sarà circa 14.000 e m sarà 50. Non sono sicuro del metodo che userò per il campionamento casuale, normale o uniforme, non è chiaro qual è il migliore per il problema che sto cercando di risolvere, ma ho bisogno che tutte le variabili siano campionate dalle distribuzioni con la stessa media e intervallo / varianza.E x = b E m × n xxEx=bEm×nxn > > m n mnn>>mnm

Quello che ho fatto per risolvere questo problema è ridurre E alla forma di riga-scaglione, impostando tutte le variabili corrispondenti alle colonne a destra dell'ultimo perno su valori casuali e quindi risolvendo l'uguaglianza della matrice quadrata rimanente.

Esiste tuttavia un problema, per risolvere l'uguaglianza della matrice quadrata, sottraggo i valori già impostati dal lato destro. Sfortunatamente, si aggiungono anche le variazioni, quindi i miei ultimi 50 valori tendono a variare enormemente, il che è purtroppo inaccettabile in questo problema.

C'è un modo migliore per farlo? Non riesco a pensare a un modo per risolvere il metodo corrente che sto usando. Io uso R.


2
Sfortunatamente, non sarai in grado di farlo, a meno che tu non sia davvero fortunato con la tua matrice di vincoli. Ad esempio, considera una matrice di vincolo con due righe, una voce diversa da zero nella prima riga che vincola e due voci diverse da zero nella seconda riga che vincolano . Ovviamente, avrà una media diversa da almeno una tra e e , a meno che non si impostino le varianze per e , anche una varianza diversa. x 2 + x 3 = 1 x 1 x 2 x 3 x 2 x 3 = 0x1=0x2+x3=1x1x2x3x2x3=0
jbowman,

Risposte:


1

Questo documento e il pacchetto R hanno completamente risolto il mio problema. Utilizza il metodo Markov Chain Monte Carlo, che si basa sul fatto che se riesci a trovare una soluzione iniziale del vincolo, attraverso la programmazione lineare, puoi trovarne un numero arbitrario utilizzando una matrice che, quando moltiplicata per , i vincoli , dà zero. Leggi qui:E

http://www.vliz.be/imisdocs/publications/149403.pdf

ed ecco il pacchetto:

http://cran.r-project.org/web/packages/limSolve/index.html


1
vliz.be/imisdocs/publications/149403.pdf sembra non essere disponibile, aggiorna il link
eee,

0

Potrebbe sembrare banale (e non terribilmente efficiente dalla macchina), ma considerare di ripetere il processo fino a quando non si ottiene una risposta adeguata? Preferibilmente modificando solo un sottoinsieme più piccolo ogni volta.

Puoi creare una misura di "distanza" per quanto sei lontano dalla tua risposta ideale? Potrebbe aiutarti a "ottimizzare"?


Potrei provarlo. Un problema è che avrei ancora bisogno di assicurarmi che la forma della distribuzione fosse la stessa. Anche i vincoli temporali saranno proibitivi.
Mike Flynn,
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.