【问题标题】:Bray–Curtis distance calculation method in Complexheatmap?Complexheatmap中的Bray-Curtis距离计算方法?
【发布时间】:2021-09-18 07:49:24
【问题描述】:

我在 R 中使用 Complexheatmap 函数(或“热图”),想知道是否有办法使用 Bray-Curtis 方法计算列/行距离(使用 ward.D2 聚类方法),因为它不是Complexheatmap 中支持的方法。不幸的是,我需要使用这个函数而不是 heatmap.2 和 pheatmap。

这是一些虚构的鱼类数量数据(我的实际数据有 47 个站点(行)和 32 个季节,但我不知道如何在这里重新创建):

data<-matrix(rpois(30,0.9),ncol=6, nrow=5)

colnames(data) <- c("2004W", "2004D", "2005W", "2005D", "2006W", "2006D")

# I tried assigning the method this way:

d1 <- vegdist(log(data+1), method = "bray") 

d2 <- vegdist(t(log(data+1)), method = "bray")

Heatmap(data,
  row_names_side = "left",
  row_dend_side = "left",
  column_names_side = "bottom",
  row_names_gp = gpar(cex=fontsize, fontface = "bold"),
  column_names_gp = gpar(cex=0.9, fontface = "bold"),
  row_dend_width = unit(4, "cm"),
  column_dend_height = unit(3, "cm"),
  rect_gp = gpar(col = "grey"),
  column_title = "Year/Season",
  column_names_rot = 35,
  row_title = "Site",
  clustering_distance_rows = d1,
  clustering_distance_columns = d2,
  clustering_method_rows = "ward.D2",
  clustering_method_columns = "ward.D2",
  row_km = 3,
  column_km = 4
  )

【问题讨论】:

    标签: r hierarchical-clustering hclust vegdist complexheatmap


    【解决方案1】:

    您应该首先定义一个用于 Bray-Curtis 距离计算的函数 (bray_dist)。
    然后,您设置 clustering_distance_rows=bray_distclustering_distance_rows=bray_distHeatmap.

    library(vegan)
    library(ComplexHeatmap)
    
    set.seed(1234)
    data <- matrix(rpois(30,0.9),ncol=6, nrow=5)
    colnames(data) <- c("2004W", "2004D", "2005W", "2005D", "2006W", "2006D")
    fontsize <- 8
    
    bray_dist <- function(x) {
      vegdist(log(x+1), method = "bray")
    }
    
    Heatmap(data, row_names_side = "left", column_names_side = "bottom", 
            row_dend_side = "left", rect_gp = gpar(col = "grey"), 
            row_names_gp = gpar(cex=fontsize, fontface = "bold"), 
            column_names_gp = gpar(cex=0.9, fontface = "bold"), 
            row_dend_width = unit(4, "cm"), column_dend_height = unit(3, "cm"), 
            column_title = "Year/Season", column_names_rot = 35, row_title = "Site", 
            clustering_distance_rows = bray_dist, clustering_distance_columns = bray_dist, 
            clustering_method_rows = "ward.D2", clustering_method_columns = "ward.D2", 
            row_km = 3, column_km = 4)
    

    【讨论】:

    • 太棒了!如果我想用 log(x+1) 方法(或任何方法)转换我的数据,我会在开始时或在分配函数时转换它,还是两者兼而有之?如...“Heatmap(log(data+1)...”并保持功能不变,“bray_dist
    • 您应该在分析开始时转换您的数据。在bray_dist 中使用x 而不是log(x+1)。我恳请您接受我的回答,如果您觉得它有帮助,请点赞。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2019-07-23
    • 2017-11-15
    • 2023-03-18
    相关资源
    最近更新 更多