使用热图的 NA 值对不同矩阵进行聚类,无需插补

问题描述 投票:0回答:3

我正在尝试制作一个包含很多 NA 的不同矩阵的热图。然而,我在尝试执行聚类时遇到了问题。如果没有聚类,热图可以正常工作。我不想估算/删除 NA。有没有办法进行聚类? 我知道使用 NA 计算距离是一个问题,但应该有办法解决它,对吗?

我收到以下错误消息:

” hclust(get_dist(submat, distance), method = method) 中的错误: 外部函数调用中的 NA/NaN/Inf (arg 10)

另外:警告信息: 矩阵中存在NA,通过去除NA值来计算距离。”

编辑:

我使用的数据是一个不寻常的矩阵,有很多 NA。也许这就是问题所在?但我也想在热图中可视化这些 NA。因此仅对行进行聚类,而不对列进行聚类。

dissimilar matrix example

r heatmap hclust
3个回答
1
投票

我不确定您为什么会收到该错误。

dist
函数应该默认处理 NA。下面是一个例子。另外,您可能想先简单地计算距离矩阵,然后输入到
hclust
vegan
包可以计算许多距离度量,并且您可以指定是否应删除 NA:

# data
set.seed(1)
x <- matrix(rnorm(100), nrow = 5)
df <- matrix(rnorm(100), nrow = 5)

# make missing values
nvals <- length(c(df))
set.seed(1)
df[sample(x = nvals, size = nvals*0.1)] <- NaN

# distance "euclidean"
hc <- hclust(dist(df), method = "ave")
plot(hc)


# other distance metrics
D <- vegdist(df, method = "manhattan", na.rm = TRUE)
hc <- hclust(D, method = "ave")
plot(hc)

0
投票

好吧,我成功解决了这个问题。我必须做简单的插补。 我刚刚用“常量”替换了所有 NA。

然后我可以可视化整个数据集,而无需删除任何样本或行,对行和列进行聚类。然后,当我想绘制 NA 在数据集中的位置时,我只需在任何图中为“常量”指定特定颜色即可。

通过这种方式,我对所有 NA 都一视同仁,而不需要根据其他样本(例如均值/中值/回归方法)为每行/列中的 NA 分配一个值。此方法最适合我的数据集,不会使它们向任何方向倾斜。


0
投票

管理 NA 问题的另一种方法是,如果 NA 的数量高于阈值,则删除该列。阈值将是热图/集群不再工作的最大值。

比如 # 如果 na 数量达到 15,则删除列 na_count <- colSums(is.na(t_Mat)) columns_to_remove <- which(na_count > 15) # 删除已识别的列 t_垫<- t_Mat[, -columns_to_remove]

© www.soinside.com 2019 - 2024. All rights reserved.