Иерархия 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 содержит подробности о том, как они вычисляются для различных методов.

Другие вопросы по тегам