Иерархия scipy. расстояния между Брейем и Кертисом не соответствуют
Я работаю с набором видов (подсчетов) с нескольких разных станций отбора проб (станций). Я вычислил сходство Брея-Кертиса между каждой возможной парой станций выборки, используя функцию pw_distance из scikit-bio. Это дает матрицу расстояний со значениями, ограниченными от 0 до 1. Пока все хорошо.
Я хочу использовать эту матрицу расстояний для создания дендрограммы, показывающей, как станции выборки объединяются. Я делаю это с помощью функции Сципи hierachy.linkage, чтобы найти связи для дендрограммы, а затем строю график с иерархией.dendrogram.
Вот мой код:
from skbio.diversity.beta import pw_distances
from scipy.cluster import hierarchy
bc_dm = pw_distances(counts, stations, metric = "braycurtis")
# use (1 - bc_dm) to get similarity rather than dissimilarity
sim = 1 - bc_dm.data
Z = hierarchy.linkage(sim, 'ward')
hierarchy.dendrogram(
Z,
leaf_rotation=0., # rotates the x axis labels
leaf_font_size=10., # font size for the x axis labels
labels=bc_dm.ids,
orientation="left"
)
вот ссылка на дендрограмму, созданную вышеуказанным кодом
Насколько я понимаю, расстояние на дендрограмме должно соответствовать сходству Брея-Кертиса (аналогично расстоянию), но значения расстояния на моей дендрограмме достигают максимума, превышающего 30. Это правильно? Если нет, то как я могу масштабировать свои расстояния, чтобы соответствовать сходству Брея-Кертиса между станциями выборки? Если это правильно, то чему действительно соответствуют расстояния на дендрограмме?
1 ответ
Смотрите ссылки в комментариях, так как они отвечают на ваши вопросы.
Один scikit-bio
шаг, который не описан в этих ссылках, заключается в том, что вы должны вызвать bc_dm.condensed_form()
, а не на bc_dm
или же sim
, Это даст вам ввод в нужном вам формате. Если вы передаете 2D-матрицу, linkage
предполагает, что это ваш counts
матрица и вычисляет евклидовы расстояния между вашими выборками на основе этих данных.
Также обязательно обратите внимание на method
параметр для scipy.cluster.hierarchy.linkage
так как это повлияет на интерпретацию длин ветвей в вашей дендрограмме. Строка документа для scipy.cluster.hierarchy.linkage
содержит подробности о том, как они вычисляются для различных методов.