Сгенерируйте матрицу M на N

#python #numpy

Вопрос:

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

Я пытался

 M = 100
N = 3 
Y = 0.5 
mean = (0,0,0)
cov = np.array([[0.5,0.5,0.5],[0.5,0.5,0.5],[0.5,0.5,0.5]])

np.random.multivariate_normal(mean, cov, (M,N)) 
 

он возвращает массив np, состоящий из массива M, где каждый I-й массив состоит из N значений, и все они одинаковы.

Может ли кто-нибудь посоветовать, как сгенерировать матрицу M на N таким образом, чтобы каждый столбец в единичной дисперсии и корреляции между любыми двумя столбцами был равен Y, где N-число стандартной многомерной нормальной случайной величины.

Ответ №1:

Так что получается, что я почти полностью ошибаюсь. Причина, по которой ваши ценности не отклоняются, заключается в том, что у вас есть значение корреляции 1 между вашими ценностями. В результате значения не меняются.

Комментарии:

1. Одно из последующих действий здесь: 1) Гарантирует ли это, что корреляция между каждым столбцом равна 0,5? Если да, то как?

2. Ах, так что, похоже, у нас здесь больше математических проблем. Матрица ковариации измеряет ковариацию между каждой матрицей. Корреляция равна cov(x,y)/(sd(x) * sd(y)). Если мы посмотрим на матрицу, которую вы привели выше, ковариация между каждой матрицей равна половине, и дисперсия каждой матрицы также равна половине. В результате при расчете корреляции корреляция между каждой переменной равна 1, что объясняет, почему все значения в вашей матрице одинаковы. Если вы хотите иметь корреляцию 0,5, я бы масштабировал значения вариации в коэффициент sqrt(1/2)