scipy.stats.random_correlation#

scipy.stats.random_correlation = object>[источник]#

Случайная корреляционная матрица.

Возвращает случайную корреляционную матрицу по заданному вектору собственных значений. Возвращаемая матрица симметрична, положительно полуопределена и имеет единичную диагональ.

The eigs ключевое слово задает собственные значения корреляционной матрицы и подразумевает размерность.

Параметры:
eigs1d ndarray

Собственные значения корреляционной матрицы. Все собственные значения должны быть неотрицательными и в сумме давать количество собственных значений.

seed{None, int, numpy.random.Generator, numpy.random.RandomState, опционально

Если seed равно None (или np.random), numpy.random.RandomState используется синглтон. Если seed является int, новый RandomState используется экземпляр, инициализированный с seed. Если seed уже является Generator или RandomState экземпляр, то используется этот экземпляр.

tolfloat, опционально

Допуск для проверки входных параметров

diag_tolfloat, опционально

Допуск отклонения диагонали результирующей матрицы. По умолчанию: 1e-7

Методы

rvs(eigs=None, random_state=None)

Генерирует случайные корреляционные матрицы, все с собственными значениями eigs.

Возвращает:
rvsndarray или скаляр

Случайные N-мерные матрицы размера (размер, dim, dim), каждая с собственными значениями eigs.

Вызывает:
RuntimeError

Ошибка с плавающей запятой помешала сгенерировать корректную корреляционную матрицу.

Примечания

Генерирует случайную корреляционную матрицу, следуя численно устойчивому алгоритму, описанному Davies & Higham. Этот алгоритм использует одно O(N) подобное преобразование для построения симметричной положительно полуопределённой матрицы и применяет серию вращений Гивенса, чтобы масштабировать её до единиц на диагонали.

Ссылки

[1]

Дэвис, Филип Ай; Хайэм, Николас Дж; "Численно устойчивое генерирование корреляционных матриц и их факторов", BIT 2000, Том. 40, № 4, стр. 640 651

Примеры

>>> import numpy as np
>>> from scipy.stats import random_correlation
>>> rng = np.random.default_rng()
>>> x = random_correlation.rvs((.5, .8, 1.2, 1.5), random_state=rng)
>>> x
array([[ 1.        , -0.02423399,  0.03130519,  0.4946965 ],
       [-0.02423399,  1.        ,  0.20334736,  0.04039817],
       [ 0.03130519,  0.20334736,  1.        ,  0.02694275],
       [ 0.4946965 ,  0.04039817,  0.02694275,  1.        ]])
>>> import scipy.linalg
>>> e, v = scipy.linalg.eigh(x)
>>> e
array([ 0.5,  0.8,  1.2,  1.5])