Генерация значений из многомерного гауссовского распределения


14

В настоящее время я пытаюсь моделировать значений N - мерной случайной величины X , который имеет многомерное нормальное распределение со средним вектором μ=(μ1,...,μN)T и ковариационной матрицей S .

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

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

В моем случае я также выбираю параметры распределения случайным образом. В частности, я генерирую каждое из средств из равномерного распределения U ( 20 , 40 ) . Затем я строю ковариационную матрицу S, используя следующую процедуру:μiU(20,40)S

  1. Создайте нижнюю треугольную матрицу где L ( i , i ) = 1 для i = 1 .. N и L ( i , j ) = U ( - 1 , 1 ) для i < jLL(i,i)=1i=1..NL(i,j)=U(1,1)i<j

  2. Пусть , где L Т обозначает транспонирование L .S=LLTLTL

Эта процедура позволяет мне гарантировать, что является симметричным и положительно определенным. Он также предоставляет нижнюю треугольную матрицу L, так что S = L L T , что, я считаю, необходимо для генерации значений из распределения.SLS=LLT

Используя рекомендации по Википедии, я должен быть в состоянии генерировать значения используя N- мерную форму следующим образом:XN

  • 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 Да. Внесены изменения в форматирование вопроса. Спасибо за совет - безусловно, самый простой способ проверить.
Берк У.

Ответы:


14

Если - вектор-столбец стандартных нормальных RV, то если вы установите Y = L X , ковариацияXN(0,I)Y=LX является L L T . YLLT

Я думаю, что проблема, с которой вы столкнулись , может возникнуть из-за того, что функция 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 ZXZ=XLTZT=LXTZT , E[ZTZ]=LLT

Исходя из того, что вы написали , хотя, формула Википедии верна: если были вектор строка , возвращаемая MATLAB, вы не можете левой умножить его на L T . (Но умножение вправо на L T даст вам выборку с той же ковариацией LΦ1(U)LTLT ).LLT


Обратите внимание, что справка для mvnrnd в matlab использует в качестве числа выборок; число измерений является D . Поэтому, если вы запрашиваете N выборок из D- мерной многомерной нормали, она возвращает их в виде матрицы N × D. NDNDN×D
jpillow
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.