#python #cluster-analysis #correlation #linkage
#питон #кластерный анализ #взаимосвязь #связь
Вопрос:
В настоящее время я создаю тепловую карту кластеризации на Python и понял, что не могу продолжить связывание, если моя корреляционная матрица содержит NAs. Я получаю ошибку:
ValueError: Distance matrix 'X' must be symmetric.
Существует несколько причин для наличия NAs:
- нет пар для сравнения между группами =gt; отдельные NAs в некоторых строках/столбцах
- никаких изменений в одной из групп (я просто изменяю значение на 0,000001, и это создает небольшую дисперсию, которой достаточно для продолжения)
- никаких значений для группы (я просто удаляю эту группу)
В настоящее время у меня нет решения для номера 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