Tôi đang so sánh hai cách tạo bản đồ nhiệt với dendrogram trong R, một với made4
's heatplot
và một với gplots
của heatmap.2
. Các kết quả phù hợp phụ thuộc vào phân tích nhưng tôi đang cố gắng hiểu tại sao các giá trị mặc định khác nhau và cách lấy cả hai hàm để cho kết quả tương tự (hoặc kết quả tương tự cao) để tôi hiểu tất cả các tham số 'blackbox' vào điều này.sự khác biệt trong các giá trị mặc định của bản đồ nhiệt/nhóm trong R (heatplot so với heatmap.2)?
Đây là ví dụ dữ liệu và các gói:
require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])
Clustering dữ liệu với heatmap.2 cho:
heatmap.2(data, trace="none")
Sử dụng heatplot
cho:
heatplot(data)
các kết quả và tỷ lệ khác nhau ban đầu. heatplot
kết quả trông hợp lý hơn trong trường hợp này vì vậy tôi muốn hiểu những thông số nào để nạp vào heatmap.2
để làm cho nó giống nhau, vì heatmap.2
có các ưu điểm/tính năng khác mà tôi muốn sử dụng và vì tôi muốn hiểu Thành phần.
heatplot
sử dụng liên kết trung bình với khoảng cách tương quan vì vậy chúng tôi có thể thức ăn đó vào heatmap.2
để đảm bảo clusterings tương tự được sử dụng (dựa trên: https://stat.ethz.ch/pipermail/bioconductor/2010-August/034757.html)
dist.pear <- function(x) as.dist(1-cor(t(x)))
hclust.ave <- function(x) hclust(x, method="average")
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave)
kết quả là:
điều này làm cho hàng dendrograms trông giống nhau hơn nhưng các cột vẫn khác nhau và do đó là các vảy. Có vẻ như heatplot
quy mô các cột bằng cách nào đó theo mặc định là heatmap.2
không làm điều đó theo mặc định. Nếu tôi thêm một hàng-rộng để heatmap.2, tôi nhận được:
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave,scale="row")
mà vẫn không phải là giống hệt nhau nhưng là gần gũi hơn. Làm thế nào tôi có thể tái sản xuất các kết quả của heatplot
với heatmap.2
? Sự khác biệt là gì?
edit2: nó có vẻ như một sự khác biệt quan trọng là heatplot
lại tỷ lệ chia dữ liệu với cả hàng và cột, sử dụng:
if (dualScale) {
print(paste("Data (original) range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
data <- t(scale(t(data)))
print(paste("Data (scale) range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
data <- pmin(pmax(data, zlim[1]), zlim[2])
print(paste("Data scaled to range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
}
đây là những gì tôi đang cố gắng để nhập khẩu kêu gọi của Mẹ để heatmap.2
. Lý do tôi thích nó là bởi vì nó làm cho sự tương phản lớn hơn giữa các giá trị thấp và cao, trong khi chỉ cần đi qua zlim
đến heatmap.2
bị bỏ qua. Làm thế nào tôi có thể sử dụng 'quy mô kép' này trong khi vẫn bảo toàn nhóm dọc theo các cột?Tất cả tôi muốn là sự tương phản tăng bạn nhận được với:
heatplot(..., dualScale=TRUE, scale="none")
so với độ tương phản thấp bạn nhận được với:
heatplot(..., dualScale=FALSE, scale="row")
bất kỳ ý tưởng về điều này?
Để lệnh cuối cùng, hãy thử thêm 'symbreaks = FALSE' để có màu tương tự như' heatplot'. Dendrograms cột vẫn cần làm việc. – harkmug
@rmk cảm ơn, không chắc tôi hiểu 'symbreaks' làm gì. bất kỳ ý tưởng nào về sự khác biệt về chương trình biểu diễn col? – user248237dfsf
'symbreaks = FALSE' làm cho màu không đối xứng như được thấy trong' heatplot' trong đó giá trị 0 không phải là màu trắng (màu xanh dương). Đối với chương trình dendrogram, tôi nghĩ rằng 'heatamap.2' có thể là đúng. Lưu ý rằng trong 'heatmap.2', EWS.T1 và EWS.T6 là song song, trong khi trong' heatplot', EWS.T4 và EWS.T6 của nó. Các cựu có một 0,2, trong khi cặp sau có 0,5. – harkmug