Генерация случайных величин, удовлетворяющих ограничениям

9

Мне нужно сгенерировать список случайных величин учетом ограничений, которые можно выразить в виде где - это матрица если имеет записей. Во всех случаях, с которыми я имею дело, , например будет около 14 000, а будет 50. Я не уверен, какой метод я буду использовать для случайной выборки, будь то нормальная или равномерная, это не так Ясно, что лучше для проблемы, которую я пытаюсь решить, но мне нужно, чтобы все переменные были выбраны из распределений с одинаковым средним и диапазоном / дисперсией.xEx=bEm×nxnn>>mnm

Чтобы решить эту проблему, я сводил к форме строки-эшелона, устанавливая все переменные, соответствующие столбцам справа от последнего центра, в случайные значения, а затем решая равенство оставшейся квадратной матрицы.E

Однако существует проблема, чтобы решить квадратную матрицу равенства, я вычитаю уже установленные значения из правой части. К сожалению, отклонения также увеличиваются, поэтому мои последние 50 значений имеют тенденцию к значительному изменению, что, к сожалению, неприемлемо в этой проблеме.

Есть лучший способ сделать это? Я не могу придумать способ исправить текущий метод, который я использую. Я использую R.

Майк Флинн
источник
2
К сожалению, вы не сможете сделать это, если вам не повезет с вашей матрицей ограничений. Например, рассмотрим матрицу ограничений с двумя строками, одной ненулевой записью в первой строке, которая ограничивает и двумя ненулевыми записями во второй строке, которые ограничивают . Очевидно, что будет иметь среднее значение, отличное от, по крайней мере, одного из и , и, если вы не установите дисперсии для и , также будет другая дисперсия. x1=0x2+x3=1x1x2x3x2x3=0
jbowman

Ответы:

1

Эта бумага и пакет R полностью решили мою проблему. Он использует метод Марковской цепочки Монте-Карло, который основан на том факте, что, если вы можете найти начальное решение ограничения с помощью линейного программирования, вы можете найти произвольное число из них, используя матрицу, которая при умножении на ограничивает , дает ноль. Читайте об этом здесь:E

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

и вот пакет:

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

Майк Флинн
источник
1
vliz.be/imisdocs/publications/149403.pdf , по-видимому, недоступен, пожалуйста, обновите ссылку
eee
0

Может показаться тривиальным (и не слишком эффективным с точки зрения машины), но подумайте, не повторить ли этот процесс, пока не получите подходящий ответ? Желательно только модифицировать меньшее подмножество каждый раз.

Можете ли вы создать меру «расстояния» для определения того, насколько далеко вы находитесь от своего идеального ответа? Это может помочь вам "оптимизировать"?

Шон
источник
Я мог бы попробовать это. Одна проблема заключается в том, что мне все еще нужно убедиться, что форма распределения будет такой же. Также временные ограничения будут непомерными.
Майк Флинн