Я хотел бы создать матрицу случайной корреляции так, чтобы распределение ее недиагональных элементов выглядело примерно как нормальное. Как я могу это сделать?
Мотивация такая. Для набора данных из временных рядов распределение корреляции часто выглядит достаточно близким к нормальному. Я хотел бы создать много «нормальных» матриц корреляции для представления общей ситуации и использовать их для расчета числа рисков.
Я знаю один метод, но полученное стандартное отклонение (распределения недиагональных элементов) слишком мало для моей цели: сгенерировать равномерных или нормальных случайных строк матрицы , стандартизировать строки (вычесть среднее значение, разделить на стандартное отклонение), тогда образец корреляционной матрицы обычно распределяет недиагональные записи [ Обновление после комментариев: стандартное отклонение будет ].X 1~п-1/2
Кто-нибудь может предложить лучший метод, с помощью которого я могу контролировать стандартное отклонение?
Ответы:
Сначала я предоставил то, что теперь считаю неоптимальным ответом; поэтому я отредактировал свой ответ, чтобы начать с лучшего предложения.
Используя метод лозы
В этой теме: Как эффективно генерировать случайные матрицы положительной-полуопределенной корреляции? - Я описал и предоставил код для двух эффективных алгоритмов генерации матриц случайной корреляции. Оба взяты из статьи Левандовски, Куровицки и Джо (2009).
Пожалуйста, смотрите мой ответ там для большого количества цифр и кода Matlab. Здесь я хотел бы только сказать, что метод виноградной лозы позволяет генерировать матрицы случайной корреляции с любым распределением частичных корреляций (обратите внимание на слово «частичный») и может использоваться для генерации матриц корреляции с большими недиагональными значениями. Вот соответствующая цифра из этой темы:
Единственное, что меняется между участками, - это один параметр, который контролирует, насколько сильно распределение частичных корреляций сосредоточено вокруг . Поскольку OP запрашивал приблизительно нормальное распределение вне диагонали, вот график с гистограммами недиагональных элементов (для тех же матриц, что и выше):± 1
Я думаю, что это распределение достаточно «нормальное», и можно увидеть, как стандартное отклонение постепенно увеличивается. Я должен добавить, что алгоритм очень быстрый. Смотрите связанные темы для деталей.
Мой оригинальный ответ
Прямая модификация вашего метода может помочь (в зависимости от того, насколько близко вы хотите, чтобы распределение было нормальным). Этот ответ был вдохновлен комментариями @ cardinal выше и ответом @ psarka на мой собственный вопрос Как создать большую матрицу случайных корреляций полного ранга с некоторыми сильными корреляциями?
Хитрость заключается в том, чтобы сделать сэмплы вашего коррелированными (не функциями, а сэмплами). Вот пример: я генерирую случайную матрицу размером (все элементы из стандартного нормали), а затем добавляю случайное число из в каждую строку для . Для корреляционная матрица (после стандартизации элементов) будет иметь недиагональные элементы, приблизительно нормально распределенные со стандартным отклонением . ДляX 1000 × 100 [ - a / 2 , a / 2 ] a = 0 , 1 , 2 , 5 a = 0 X ⊤ X 1 / √Икс Икс 1000 × 100 [ - a / 2 , a / 2 ] а = 0 , 1 , 2 , 5 а = 0 Икс⊤Икс a>0aa=0,1,2,51 / 1000----√ а > 0 Я вычислить корреляционную матрицу без центрирующего переменных (это сохраняет вставленные корреляции), а стандартное отклонение недиагональных элементов растет с , как показано на этом рисунке (строки соответствуют ):a a=0,1,2,5
Все эти матрицы, конечно, положительно определены. Вот код Matlab:
Вывод этого кода (минимальные и максимальные собственные значения):
источник
Вы можете быть заинтересованы в некотором коде по следующей ссылке:
Корреляция и коинтеграция
источник
Если вы пытаетесь сгенерировать матрицы случайной корреляции, рассмотрите выборку из распределения Wishart. Следующий вопрос содержит информацию о распределении Уишарта, а также советы о том, как сделать выборку: Как эффективно генерировать случайные матрицы положительной-полуопределенной корреляции?
источник
Это не очень сложный ответ, но я не могу не думать, что это все еще хороший ответ ...
Если ваша мотивация заключается в том, что параметры корреляции, создаваемые данными временных рядов, имеют тенденцию выглядеть нормально, почему бы не просто смоделировать данные временных рядов, рассчитать параметры корреляции и использовать их?
У вас может быть веская причина не делать этого, но мне не ясно из вашего вопроса.
источник