Тепловая карта кластеризации-как обрабатывать NAs в корреляционной матрице

#python #cluster-analysis #correlation #linkage

#питон #кластерный анализ #взаимосвязь #связь

Вопрос:

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

 ValueError: Distance matrix 'X' must be symmetric.  

Существует несколько причин для наличия NAs:

  1. нет пар для сравнения между группами =gt; отдельные NAs в некоторых строках/столбцах
  2. никаких изменений в одной из групп (я просто изменяю значение на 0,000001, и это создает небольшую дисперсию, которой достаточно для продолжения)
  3. никаких значений для группы (я просто удаляю эту группу)

В настоящее время у меня нет решения для номера 1. Конечно, я могу отбросить всю строку корреляционной матрицы, если есть хотя бы один NA, но для меня это не звучит как решение. И с NAs в корреляционной матрице я не могу перейти к связи и, следовательно, не могу составить тепловую карту.

Как бы вы подошли к этому вопросу?

Спасибо!

 import scipy.spatial as sp, scipy.cluster.hierarchy as hc from scipy import stats  numpy_data = np.array([[1, 0.9, np.nan, np.nan], [np.nan, np.nan, 8, 9], [10, 11, 16, 17]]) df = pd.DataFrame(data=numpy_data, index=["row1", "row2", "row3"], columns=["column1", "column2", "column3", "column4"])   df= stats.zscore(df, nan_policy='omit', axis = 1) row_dism = 1 - df.T.corr(method='spearman')  row_linkage = hc.linkage(sp.distance.squareform(row_dism), method='average') #error