Ответ 1
Основные отличия между функциями heatmap.2
и heatplot
заключаются в следующем:
-
heatmap.2, по умолчанию используется меру евклидовой, чтобы получить матрицу расстояний и полный метод агломерации для кластеризации, тогда как тепловой план использует корреляцию и средний агломерационный метод, соответственно.
-
heatmap.2 вычисляет матрицу расстояний и запускает алгоритм кластеризации до масштабирования, тогда как массивы Heatplot (when
dualScale=TRUE
) уже масштабируют данные. -
heatmap.2 переупорядочивает дендрограмму на основе средних значений строк и столбцов, как описано здесь.
Настройки по умолчанию (стр. 1) можно просто изменить в heatmap.2, предоставив пользовательские аргументы distfun
и hclustfun
. Однако с. 2 и 3 не могут быть легко решены без изменения исходного кода. Поэтому функция heatplot
действует как обертка для тепловой карты. Во-первых, он применяет необходимое преобразование к данным, вычисляет матрицу расстояний, кластеризует данные, а затем использует функцию heatmap.2 только для построения тепловой карты с указанными выше параметрами.
Аргумент dualScale=TRUE
в функции Heatplot применяется только к центрированию и масштабированию по строке (описание). Затем он переназначает крайности (описание) масштабированных данных в значения zlim
:
z <- t(scale(t(data)))
zlim <- c(-3,3)
z <- pmin(pmax(z, zlim[1]), zlim[2])
Чтобы соответствовать выходному сигналу функции теплового модуля, я хотел бы предложить два решения:
я - добавить новую функциональность в исходный код -> heatmap.3
Код можно найти здесь. Не стесняйтесь просматривать изменения, чтобы увидеть изменения, внесенные в функцию heatmap.2. Итак, я представил следующие варианты:
- преобразование z-score выполняется до кластеризации:
scale=c("row","column")
- крайние значения могут быть переназначены в масштабированных данных:
zlim=c(-3,3)
- опция отключения переупорядочения дендрограмм:
reorder=FALSE
Пример:
# require(gtools)
# require(RColorBrewer)
cols <- colorRampPalette(brewer.pal(10, "RdBu"))(256)
distCor <- function(x) as.dist(1-cor(t(x)))
hclustAvg <- function(x) hclust(x, method="average")
heatmap.3(data, trace="none", scale="row", zlim=c(-3,3), reorder=FALSE,
distfun=distCor, hclustfun=hclustAvg, col=rev(cols), symbreak=FALSE)
II - определить функцию, которая предоставляет все необходимые аргументы для heatmap.2
Если вы предпочитаете использовать исходную тепловую карту .2, функция zClust
(ниже) воспроизводит все шаги, выполняемые тепловым экраном. Он предоставляет (в формате списка) масштабированные матрицы данных, строки и столбцы дендрограммы. Они могут использоваться как вход для функции heatmap.2:
# depending on the analysis, the data can be centered and scaled by row or column.
# default parameters correspond to the ones in the heatplot function.
distCor <- function(x) as.dist(1-cor(x))
zClust <- function(x, scale="row", zlim=c(-3,3), method="average") {
if (scale=="row") z <- t(scale(t(x)))
if (scale=="col") z <- scale(x)
z <- pmin(pmax(z, zlim[1]), zlim[2])
hcl_row <- hclust(distCor(t(z)), method=method)
hcl_col <- hclust(distCor(z), method=method)
return(list(data=z, Rowv=as.dendrogram(hcl_row), Colv=as.dendrogram(hcl_col)))
}
z <- zClust(data)
# require(RColorBrewer)
cols <- colorRampPalette(brewer.pal(10, "RdBu"))(256)
heatmap.2(z$data, trace='none', col=rev(cols), Rowv=z$Rowv, Colv=z$Colv)
Несколько дополнительных комментариев относительно функциональности heatmap.2(3)
:
-
symbreak=TRUE
рекомендуется при масштабировании. Он будет корректировать цветовую гамму, поэтому она разрывается на 0. В текущем примере отрицательные значения = синий, а положительные значения = красный. -
col=bluered(256)
может предоставить альтернативное решение для раскраски и не требует библиотеки RColorBrewer.