Генерування значень при багатоваріантному гауссовому розподілі


14

В даний час я намагаюся моделювати значень N - мірної випадкової величини , що має багатовимірне нормальний розподіл із середнім вектор і ковариационная матриця .Xμ=(μ1,...,μN)TS

Я сподіваюся використовувати методику , аналогічну методу зворотного CDF, а це означає , що я хочу , щоб спочатку створити - мірний рівномірна випадкова величина , а потім підключити , що в зворотному КОР цього розподілу, так , щоб генерувати значення .NUX

У мене виникають проблеми, оскільки процедура недостатньо задокументована і є невеликі відмінності між функцією mvnrnd в MATLAB та описом, який я знайшов у Вікіпедії .

У моєму випадку я також вибираю параметри розподілу випадковим чином. Зокрема, я кожен із засобів, , з рівномірного розподілу . Потім будую коваріаційну матрицю S, використовуючи наступну процедуру:μiU(20,40)S

  1. Створіть нижню трикутну матрицю L де L(i,i)=1 для i=1..N і L(i,j)=U(1,1) для i<j

  2. Нехай S=LLT , де LT позначає транспонування L .

Ця процедура дозволяє мені переконатися, що S симетричний і позитивно визначений. Він також забезпечує нижню трикутну матрицю L так що S=LLT , що, на мою думку, потрібно для отримання значень з розподілу.

Використовуючи вказівки у Вікіпедії, я повинен мати можливість генерувати значення X використовуючи N розмірну форму, як описано нижче:

  • X=μ+LΦ1(U)

Відповідно до функції MATLAB, зазвичай, це робиться як:

  • X=μ+LTΦ1(U)

Де є зворотним ВВР з - мірного, роз'ємні, нормального розподілу, і єдина відмінність між обома методами просто використовувати чи або . N L L TΦ1NLLT

MATLAB чи Wikipedia шлях? Або обидва помиляються?


2
Як було сказано, обидва помиляються, оскільки - вектор рядків, тоді як T i n v n o r m ( U ) повинен бути векторним стовпцем. Коли ви випрямляєте свої рядки та стовпці, на це питання слід відповісти просто, визначивши, яку версію ( X - μ ) ( X - µ ) або ( X - µ ) ( X - µ ) μTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)дає матрицю і яка версія дає тільки номер: перевірте , що ви можете вирахувати математичне очікування матриці версії , і що це дає . S
whuber

@whuber Yeap. Внесли зміни у форматування запитання. Дякую за пораду - безумовно, найпростіший спосіб перевірити.
Берк У.

Відповіді:


14

Якщо являє собою вектор - стовпець стандартного нормального RV, а потім , якщо встановити Y = L X , ковариация Y є L L T . XN(0,I)Y=LXYLLT

Я думаю, що проблема, яка виникає у вас, може виникнути через те, що функція mvnrnd matlab повертає вектори рядків у вигляді зразків, навіть якщо ви вказуєте середнє значення як вектор стовпця. наприклад,

 > size(mvnrnd(ones(10,1),eye(10))  
 > ans =
 >      1    10

І зверніть увагу, що перетворення вектору рядків дає вам протилежну формулу. якщо - вектор рядка, то Z = X L T також є вектором рядків, тому Z T = L X T - вектор стовпця, а коваріація Z T може бути записана E [ Z T Z ] = L L T . XZ=XLTZT=LXTZTE[ZTZ]=LLT

Виходячи з того, що ви написали , хоча, формула Вікіпедії вірна: якщо були вектор рядок , яка повертається MATLAB, ви не можете лівої помножити його на L T . (Але право множення на L T дало б вам вибірку з такою ж коваріацією L L T ).Φ1(U)LTLTLLT


NDNDN×D
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.