11 votos

Generando variables aleatorias que satisfacen restricciones

Necesito generar una lista de variables aleatorias $\bf{x}$ sujetas a restricciones que pueden expresarse en la forma $\bf{E}x=b$ donde $\bf{E}$ es una matriz de $m \times n$ si $\bf{x}$ tiene $n$ entradas. En todos los casos con los que estoy tratando, $n >> m$, por ejemplo, $n$ será alrededor de 14,000 y $m$ será 50. No estoy seguro de qué método usar para el muestreo aleatorio, ya sea normal o uniforme, no está claro cuál es el mejor para el problema que estoy tratando de resolver, pero necesito que todas las variables se muestreen de distribuciones con la misma media y rango/varianza.

Lo que he estado haciendo para resolver esto es reducir $\bf{E}$ a forma escalonada por filas, establecer todos las variables correspondientes a columnas a la derecha de la última pivote a valores aleatorios, y luego resolver la matriz cuadrada restante de igualdad.

Sin embargo, hay un problema, para resolver la igualdad de la matriz cuadrada, resto los valores ya establecidos del lado derecho. Desafortunadamente, las varianzas también se suman, por lo que mis últimas 50 valores tienden a variar enormemente, lo cual es lamentablemente inaceptable en este problema.

¿Hay una mejor manera de hacer esto? No puedo pensar en una forma de arreglar el método actual que estoy utilizando. Uso R.

2 votos

Desafortunadamente, no podrás hacer esto, a menos que tengas mucha suerte con tu matriz de restricciones. Por ejemplo, considera una matriz de restricciones con dos filas, una entrada distinta de cero en la primera fila que restringe $x_1 = 0$ y dos entradas distintas de cero en la segunda fila que restringen $x_2+x_3 = 1$. Obviamente, $x_1$ tendrá una media diferente que al menos uno de $x_2$ y $x_3, y a menos que fijes las varianzas para $x_2$ y $x_3 = 0$, también una varianza diferente.

2voto

Henrik Ripa Puntos 325

Este documento y el paquete R resolvieron completamente mi problema. Utiliza el método de Monte Carlo de Cadena de Markov, que se basa en el hecho de que si puedes encontrar una solución inicial del problema, a través de la programación lineal, puedes encontrar un número arbitrario de ellos utilizando una matriz que al ser multiplicada por $E$, las restricciones, da cero. Lee más sobre esto aquí:

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

y aquí está el paquete:

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

1 votos

vliz.be/imisdocs/publications/149403.pdf parece que no está disponible, por favor actualiza el enlace

0voto

Chris Alparas Puntos 21

Puede parecer trivial (y no muy eficiente en términos de máquinas), ¿pero has considerado repetir el proceso hasta encontrar una respuesta adecuada? Preferiblemente modificando solo un subconjunto más pequeño cada vez.

¿Puedes crear una medida de "distancia" para determinar qué tan lejos estás de tu respuesta ideal? ¿Podría ayudarte a "optimizar"?

0 votos

Podría intentarlo. Un problema es que aún necesitaría asegurarme de que la forma de la distribución sea la misma. Además, las limitaciones de tiempo serán prohibitivas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X