Pheatmap: изменение порядка листьев на дендограмме

Я создал тепловую карту с соответствующей дендограммой на основе иерархической кластеризации, используя пакет pheatmap. Теперь я хочу изменить порядок листьев на дендограмме. Предпочтительно использовать метод оптимальных листьев. Я искал, но не нашел решения о том, как это изменить.

Я был бы признателен за предложения о том, как изменить порядок листьев, используя метод оптимальных листьев.

Вот мой пример кода со случайными данными:

mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50)
p <- pheatmap(mat, 
         clustering_distance_cols = "manhattan",
         cluster_cols=TRUE,
         cluster_rows=FALSE
         )

person arvchi    schedule 19.02.2019    source источник


Ответы (1)


Для «оптимального упорядочивания листов» вы можете использовать метод order из библиотеки seriation. pheatmap принимает clustering_callback аргумент. Согласно документам:

Функция обратного вызова clustering_callback для изменения кластеризации. Вызывается с двумя параметрами: исходным объектом hclust и матрицей, используемой для кластеризации. Должен возвращать объект hclust.

Итак, вам нужно создать функцию обратного вызова, которая принимает объект hclust и исходную матрицу и возвращает оптимизированный объект hclust.

Вот код:

library(pheatmap)
library(seriation)

cl_cb <- function(hcl, mat){
    # Recalculate manhattan distances for reorder method
    dists <- dist(mat, method = "manhattan")

    # Perform reordering according to OLO method
    hclust_olo <- reorder(hcl, dists)
    return(hclust_olo)
}

mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50)
p <- pheatmap(mat, 
         clustering_distance_cols = "manhattan",
         cluster_cols=TRUE,
         cluster_rows=FALSE,
         clustering_callback = cl_cb
         )
person Istrel    schedule 19.02.2019