Например, в R
, MASS::mvrnorm()
функция полезна для генерации данных, чтобы продемонстрировать различные вещи в статистике. Он принимает обязательный Sigma
аргумент, который представляет собой симметричную матрицу, определяющую ковариационную матрицу переменных. Как бы я создал симметричную матрицу с произвольными записями?
21
Ответы:
Создать матрицу с произвольными значениямиn×n A
и затем используйте качестве вашей ковариационной матрицы.Σ=ATA
Например
источник
Sigma <- A + t(A)
.Мне нравится контролировать объекты, которые я создаю, даже когда они могут быть произвольными.
Тогда рассмотрим, что все возможные ковариационные матрицы Σ можно выразить в видеn×n Σ
где - ортогональная матрица и σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0 .P σ1≥σ2≥⋯≥σn≥0
Геометрически это описывает ковариационную структуру с диапазоном главных компонент размеров . Эти компоненты указывают в направлениях строк P . См. Рисунки в разделе « Осмысление анализа главных компонент, собственных векторов и собственных значений» для примеров с n = 3 . Установка σ i будет устанавливать величины ковариаций и их относительные размеры, тем самым определяя любую желаемую форму эллипсоида. Ряды P ориентируют оси формы так, как вы предпочитаете.σi P n=3 σi P
Одно алгебраическое и вычислительное преимущество этого подхода состоит в том, что когда , Σ легко инвертируется (что является обычной операцией на ковариационных матрицах):σn>0 Σ
crossprod
R
Sigma
zapsmall(Sigma %*% Tau)
источник
svd(Sigma)
будут переупорядочены - это смутило меня на минуту.Вы можете моделировать случайные положительно определенные матрицы из дистрибутива Wishart, используя функцию "rWishart" из широко используемого пакета "stats".
источник
Для этого есть специальная посылка
clusterGeneration
(написанная, в частности, Гарри Джо, известным в этой области).Есть две основные функции:
genPositiveDefMat
сгенерировать ковариационную матрицу, 4 разных методаrcorrmatrix
: создать матрицу корреляцииБыстрый пример:
Создано в 2019-10-27 пакетом представлением (v0.3.0)
Наконец, обратите внимание, что альтернативный подход состоит в том, чтобы сначала попробовать с нуля, а затем использовать,
Matrix::nearPD()
чтобы сделать вашу матрицу положительно определенной.источник