Я хотел бы иметь возможность эффективно генерировать матрицы положительно-полуопределенной (PSD) корреляции. Мой метод значительно замедляется, когда я увеличиваю размер создаваемых матриц.
- Не могли бы вы предложить какие-либо эффективные решения? Если вам известны какие-либо примеры в Matlab, я был бы очень благодарен.
- Когда вы генерируете матрицу корреляции PSD, как бы вы выбрали параметры для описания матриц, которые будут сгенерированы? Средняя корреляция, стандартное отклонение корреляций, собственные значения?
random-generation
correlation-matrix
Eduardas
источник
источник
Ответы:
Вы можете сделать это в обратном направлении: каждая матрица (множество всех симметричных PSD матриц) может быть разложена как p × pС∈ Rп+ + р × р
Чтобы получитьО , сначала сгенерируйте случайный базис ( v1, . , , , vп) (где vя - случайные векторы, обычно в ( - 1 , 1 ) ). Оттуда используйте процесс ортогонализации Грамма-Шмидта, чтобы получить ( ты1, . , , , , уп) = O
Наконец, - это диагональные матрицы, все элементы которых положительны (это, опять же, легко сгенерировать: сгенерировать случайных чисел, возвести их в квадрат, отсортировать и поместить их в диагональ тождества по матрице).р р рD п п п
источник
В статье « Генерация матриц случайной корреляции на основе лоз и расширенного метода лука», выполненной Левандовски, Куровицкой и Джо (LKJ), 2009 г., представлены единый подход и описание двух эффективных методов генерации матриц случайной корреляции. Оба метода позволяют генерировать матрицы из равномерного распределения в определенном точном смысле, определенном ниже, просты в реализации, быстры и имеют дополнительное преимущество, заключающееся в забавных именах.
Вещественная симметричная матрица размера с единицами на диагонали имеет уникальных недиагональных элемента и поэтому может быть параметризована как точка в . Каждая точка в этом пространстве соответствует симметричной матрице, но не все они являются положительно определенными (как это должно быть для корреляционных матриц). Поэтому корреляционные матрицы образуют подмножество (фактически связное выпуклое подмножество), и оба метода могут генерировать точки из равномерного распределения по этому подмножеству.d ( d - 1 ) / 2 R d ( d - 1 ) / 2 R d ( d - 1 ) / 2d× д d( д- 1 ) / 2 рd( д- 1 ) / 2 рd( д- 1 ) / 2
Я предоставлю свою собственную реализацию MATLAB каждого метода и проиллюстрирую их с .d= 100
Луковый метод
Луковый метод взят из другой статьи (ссылка № 3 в LKJ) и получил свое название от того факта, что матрицы корреляции генерируются, начиная с матрицы и увеличивая ее столбец за столбцом и строку за строкой. Результирующее распределение является равномерным. Я не очень понимаю математику метода (и все равно предпочитаю второй метод), но вот результат:1 × 1
Здесь и далее заголовок каждого подзаговора показывает наименьшее и наибольшее собственные значения и определитель (произведение всех собственных значений). Вот код:
Расширенный метод лука
LKJ немного изменил этот метод, чтобы иметь возможность выбирать корреляционные матрицы из распределения, пропорционального . Чем больше значение , тем больше будет определитель, означающий, что сгенерированные корреляционные матрицы будут все больше приближаться к единичной матрице. Значение соответствует равномерному распределению. На рисунке ниже матрицы генерируются с . [ д е тС η η = 1 η = 1 , 10 , 100 , 1000 , 10[ Д е тC ]η- 1 η η= 1 η= 1 , 10 , 100 , 1000 , 10000 , 100000
По какой-то причине, чтобы получить определитель того же порядка, что и в методе с ванильным луком, мне нужно поставить а не (как утверждает LKJ). Не уверен, где ошибка.η = 1η= 0 η= 1
Винный метод
Винный метод был первоначально предложен Джо (J в LKJ) и улучшен LKJ. Мне это нравится больше, потому что это концептуально проще, а также легче модифицировать. Идея состоит в том, чтобы сгенерировать частичных корреляции (они независимы и могут иметь любые значения из без каких-либо ограничений), а затем преобразовать их в необработанные корреляции с помощью рекурсивной формулы. Удобно организовать вычисления в определенном порядке, и этот график известен как «лоза». Важно отметить, что если частичные корреляции выбираются из конкретных бета-распределений (различающихся для разных ячеек в матрице), то полученная матрица будет распределена равномерно. Здесь снова LKJ вводит дополнительный параметр для выборки из распределения, пропорционального[ - 1 , 1 ] η [ d e td( д- 1 ) / 2 [ - 1 , 1 ] η [ Д е тC ]η- 1 . Результат идентичен расширенному луку:
Винный метод с ручной выборкой частичных корреляций
Как видно выше, равномерное распределение приводит к почти диагональным корреляционным матрицам. Но можно легко изменить метод виноградной лозы, чтобы иметь более сильные корреляции (это не описано в статье LKJ, но просто): для этого следует выбрать частичные корреляции из распределения, сосредоточенного около . Ниже я приведу выборку их из бета-распределения (масштабируется с до ) с помощью . Чем меньше параметры бета-распределения, тем больше оно сосредоточено вблизи краев.[ 0 , 1 ] [ - 1 , 1 ] α = β = 50 , 20 , 10 , 5 , 2 , 1± 1 [ 0 , 1 ] [ - 1 , 1 ] α = β= 50 , 20 , 10 , 5 , 2 , 1
Обратите внимание, что в этом случае распределение не обязательно будет инвариантным по перестановке, поэтому я дополнительно случайным образом переставляем строки и столбцы после генерации.
Вот как выглядят гистограммы недиагональных элементов для вышеприведенных матриц (дисперсия распределения монотонно увеличивается):
Обновление: с использованием случайных факторов
И код:
Вот код переноса, использованный для генерации фигур:
источник
В зависимости от приложения, это может не дать вам распределение собственных значений, которые вы хотите; Ответ Квака намного лучше в этом отношении. Собственные значения,
X
полученные этим фрагментом кода, должны соответствовать распределению Марченко-Пастура.Скажем, для моделирования корреляционных матриц акций может потребоваться несколько иной подход:
источник
источник
Вы не указали распределение для матриц. Два распространенных варианта - это рассылки Wishart и обратные рассылки Wishart. Разложение Бартлетта дает Холецкого факторизации матрицы случайных Уишарта (которые также могут быть эффективно решены , чтобы получить случайную обратную Уишарт матрицу).
На самом деле, пространство Холецкого - это удобный способ генерировать другие типы случайных PSD-матриц, так как нужно только убедиться, что диагональ неотрицательна.
источник
источник
Если вы хотите лучше контролировать сгенерированную симметричную матрицу PSD, например, создать синтетический набор данных проверки, у вас есть несколько доступных параметров. Симметричная PSD-матрица соответствует гиперэллипсу в N-мерном пространстве со всеми соответствующими степенями свободы:
Таким образом, для 2-мерной матрицы (т.е. 2d эллипса) у вас будет 1 поворот + 2 оси = 3 параметра.
источник
Дешевый и веселый подход, который я использовал для тестирования, состоит в том, чтобы сгенерировать m N (0,1) n-векторов V [k], а затем использовать P = d * I + Sum {V [k] * V [k] '} как матрица nxn psd. При m <n это будет единственное число для d = 0, а для малых d будет иметь большое число условий.
источник