Корреляционная матрица с отсутствующими данными - PullRequest
0 голосов
/ 17 октября 2019

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

Ввод c_ret массив numpy:

1   2    3    4    5   6 
              4    5   6
1   2    3    4    5   6
1   2    3    4    5   6
                   5   6
1   2    3    4    5   6

Требуемый выход вычисляет корреляцию, даже если отсутствуют числа, хотя коэффициент корреляции рассчитывается для меньшего набора данных (в зависимости отданные доступны). В этом случае корреляция второй строки (которая имеет только последние 3 точки данных) с другими строками будет рассчитываться путем вырезания всех других строк под номером 4. За исключением 5-й строки, которая должна быть одинаковойразмер как 2-й ряд.

Мой код:

 corr_mat = np.corrcoef(c_ret, rowvar=True)

Выход:

1   1    1    1    1   1 

1   1    1    1    1   1 
1   1    1    1    1   1 

1   1    1    1    1   1 

Желаемый вывод:

1   1    1    1    1   1 
1   1    1    1    1   1 
1   1    1    1    1   1 
1   1    1    1    1   1 
1   1    1    1    1   1 
1   1    1    1    1   1 

1 Ответ

0 голосов
/ 17 октября 2019

Вы можете попробовать np.ma.corrcoef с np.ma.masked_invalid

c_ret = np.array([[ 1.,  2.,  3.,  4.,  5.,  6.],
                  [np.nan, np.nan, np.nan,  4.,  5.,  6.],
                  [ 1.,  2.,  3.,  4.,  5.,  6.],
                  [ 1.,  2.,  3.,  4.,  5.,  6.],
                  [np.nan, np.nan, np.nan, np.nan,  5.,  6.],
                  [ 1.,  2.,  3.,  4.,  5.,  6.]])


np.ma.corrcoef(np.ma.masked_invalid(c_ret), rowvar=True).data

Out[293]:
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
...