Matlab: Как сгенерировать матрицу случайных величин 4x1, предполагая матрицу корреляции 4x4? - PullRequest
3 голосов
/ 08 июня 2011

Я начинаю с 4 временных рядов, помеченных A, B, C, D.

Я генерирую следующее:

  • Матрица средних 4х1.
  • Матрица стандартных отклонений 4x1.
  • Матрица корреляции 4x4 путем отбора 30 выборок из каждого временного ряда.

Что такое код Matlab для генерации матрицы случайных величин 4x1, сохраняя корреляцию между временными рядами нетронутыми?

(причина: это первый этап моделирования Монте-Карло).

Ответы [ 2 ]

5 голосов
/ 08 июня 2011

Вам нужен только вектор средних (назовите его m) и ковариационную матрицу (назовите его C).Обратите внимание, что вы можете получить ковариационную матрицу из корреляции, используя уравнение C = R - m*m' (или просто вычислить ее непосредственно путем вычисления корреляции последовательностей после вычитания их среднего значения).

Затем, чтобы получить вектор сковариации C, вы генерируете случайный вектор IID (скажем, гауссов):

w = randn(4,1)

Затем умножьте его на квадратный корень ковариационной матрицы (назовите его Q) и добавьте среднее:

v = Q*w + m

Вы можете использовать функцию sqrt Matlab для вычисления sqrt (C) или вычислить ее с помощью SVD или EIG.

[u,d] = eig(C)

Q = u*sqrt(d)*u'

Ковариация v будет Q*Q' (= C), а среднее значение будет m

См. Статью в википедии о свойствах ковариационной матрицы.

2 голосов
/ 08 июня 2011

Если у вас есть доступ к панели инструментов Статистика, вы можете использовать mvnrnd для генерации чисел.

Сначала вычислите ковариационную матрицу, C, используя cov или метод, описанный в ответе nimrodm. Тогда просто позвоните

mvnrnd(m, C)

, где m - ваш вектор средних.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...