Génération de variables aléatoires satisfaisant aux contraintes

9

J'ai besoin de générer une liste de variables aléatoires soumises à des contraintes qui peuvent être exprimées sous la forme où est une matrice m \ fois n si \ bf {x } a n entrées. Dans tous les cas que je traite, n >> m , par exemple n sera environ 14 000 et m sera 50. Je ne sais pas quelle méthode j'utiliserai pour un échantillonnage aléatoire, normal ou uniforme, ce n'est pas clair ce qui est le mieux pour le problème que j'essaie de résoudre, mais j'ai besoin que toutes les variables soient échantillonnées à partir de distributions avec la même moyenne et la même plage / variance.E x = b E m x n x n n > > m n mxEx=bEm×nxnn>>mnm

Ce que j'ai fait pour résoudre ce problème, c'est de réduire E sous forme d'échelon de ligne, de définir toutes les variables correspondant aux colonnes à droite du dernier pivot sur des valeurs aléatoires, puis de résoudre l'égalité de matrice carrée restante.

Il y a un problème cependant, pour résoudre l'égalité de la matrice carrée, je soustrais les valeurs déjà définies du côté droit. Malheureusement, les écarts s'ajoutent également, donc mes 50 dernières valeurs ont tendance à varier énormément, ce qui est malheureusement inacceptable dans ce problème.

Y a-t-il une meilleure manière de faire cela? Je ne peux pas penser à un moyen de corriger la méthode actuelle que j'utilise. J'utilise R.

Mike Flynn
la source
2
Malheureusement, vous ne pourrez pas le faire, sauf si vous êtes vraiment chanceux avec votre matrice de contraintes. Par exemple, considérons une matrice de contraintes avec deux lignes, une entrée non nulle dans la première ligne qui contraint et deux entrées non nulles dans la deuxième ligne qui contraignent . De toute évidence, aura une moyenne différente de celle d'au moins et , et à moins que vous ne définissiez les variances pour et , une variance différente également. x 2 + x 3 = 1 x 1 x 2 x 3 x 2 x 3 = 0x1=0x2+x3=1x1x2x3x2x3=0
jbowman

Réponses:

1

Ce paquet papier et R a complètement résolu mon problème. Il utilise la méthode Markov Chain Monte Carlo, qui repose sur le fait que si vous pouvez trouver une solution initiale de la contrainte, grâce à la programmation linéaire, vous pouvez en trouver un nombre arbitraire en utilisant une matrice qui, multipliée par , les contraintes , donne zéro. Lisez à ce sujet ici:E

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

et voici le package:

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

Mike Flynn
la source
1
vliz.be/imisdocs/publications/149403.pdf ne semble pas être disponible, veuillez mettre à jour le lien
eee
0

Cela peut sembler trivial (et pas très efficace en termes de machine), mais envisagez de répéter le processus jusqu'à ce que vous obteniez une réponse appropriée? De préférence ne modifiant à chaque fois qu'un sous-ensemble plus petit.

Pouvez-vous créer une mesure de «distance» pour vous éloigner de votre réponse idéale? Cela pourrait vous aider à "optimiser"?

Sean
la source
Je pourrais essayer ça. Un problème est que je devrais toujours m'assurer que la forme de la distribution serait la même. Les contraintes de temps seront également prohibitives.
Mike Flynn