2011-01-17 6 views
0

Я делаю проект, который среди прочего состоит из создания временных рядов, где одна из стохастических частей временной эволюции нескольких серий имеет определенную ковариацию. Проблема в том, что многие из моих проектов требуют, чтобы у меня был хотя бы определенный контроль, когда речь заходила о том, как выглядит ковариация между различными временными рядами, и я не нашел пути (с относительной скоростью) нахождения ковариационных матриц вообще, как только размер превышает ~ 30.Как создать желаемую (большую) матрицу ковариации/корреляции?

Так, чтобы подвести итог:
Я хочу сделать симметричные матрицы с п ~ 50, что возжелали число в определенных местах, ноль в других и являются положительным полуопределенным (MATLABs cholcov только требует полуопределенности, к счастью).

Я искренне надеюсь, что у кого-то есть хотя бы идея!

// Niffe

PS: Я работал в MATLAB до сих пор, но я открыт для других языков, а также решений в области ничего, кроме математики.

+0

@Niffe Как выглядит ваш вход? Просто вектор с сигналами с течением времени? Или два сигнала для корреляции? Или что-то другое? – Marnix

+0

@ Marnix- Ковариации будут использоваться для создания lévy-process timeseries, поэтому, прежде чем у меня есть ковариассматрицы, у меня в основном нет ввода. Но когда я выяснил лучший способ создания матриц, я буду Choleskyфактурировать их и умножить их на многомерные нормальные распределения. – Niffe

+0

@Niffe: ok Я знаю, как получить ковариации и все, но создавая их вручную, по-прежнему нужен вход правильно? Вы не можете просто создать cov-матрицу из ничего? Думаю, я не могу вам помочь;) – Marnix

ответ

4

Теперь я могу наконец ответить, я думаю.

Что вы хотите, полностью зависит от того, какой тип распределения вы хотите иметь.

Например, вы могли бы представить распределение по Гауссу/Нормальному. Если у вас есть своя ковариационная матрица, вы можете сделать это, исходя из MATLAB site.

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

mu = [1 2]; 
Sigma = [1 .5; .5 2]; R = chol(Sigma); 
z = repmat(mu,100,1) + randn(100,2)*R; 

Но, конечно, вы могли бы сделать какой-либо процесс с этим. Как я вижу в ваших комментариях, вы хотите генерировать случайные данные. Вот и все. Создание ковариационных матриц из ковариационной матрицы не имеет для меня никакого смысла.

+0

Спасибо, это хорошо! Но я хочу иметь возможность использовать этот метод для 50 разных временных рядов вместо двух, что означает, что мне нужно иметь возможность создавать 50x50 SIGMA, который является симметричным и положительным (полу) определенным (полу, если я использую команда cholcov вместо обычного chol). Таким образом, я хочу, чтобы это можно было определить, как я хочу, чтобы разные таймеры были в Covary (это, вероятно, не слово, но я думаю, что это понятно в контексте), и из этого получается матрица ковариации (50x50), которая Затем я могу взять квадратный корень матрицы. Мне очень жаль, если я не понимаю, с чего начать. – Niffe

+0

@ Niffe Почему это не должно быть возможно? Просто создайте функцию, которая возвращает матрицу 50x50 с ковариациями. Таким образом, вы даже можете создать гауссовую матрицу размером 50 × 50, а затем использовать ее для создания своего сигнала. Я не понимаю, почему это невозможно. – Marnix

+0

@Marnix Основная причина заключается в том, что общая матрица, которая только что сфабрикована, не является положительно определенной (наложение симметрий, необходимых для матрицы, являющейся ковариационной матрицей, конечно, тривиально). По крайней мере, до сих пор у меня были проблемы, или, может быть, я еще что-то пропустил. – Niffe

Смежные вопросы