R语言 具有NA值的不相似矩阵的聚类,用于热图而无需插补

vmpqdwk3  于 8个月前  发布在  其他
关注(0)|答案(3)|浏览(114)

我正在尝试制作一个有很多NA的不同矩阵的热图。然而,我在尝试执行聚类时遇到了问题。没有聚类,热图工作正常。我不想估算/删除NA。有没有办法执行聚类?我知道NA计算距离是一个问题,但应该有办法解决,对吗?
我得到以下错误消息:
“hatch(get_dist(submat,distance),method = method)中出错:外部函数调用中的NA/NaN/Inf(arg 10)
此外:警告消息:矩阵中存在NA,通过删除NA值计算距离。
编辑:
我使用的数据是一个不寻常的矩阵,有很多NA。也许这就是问题所在?但我也想在热图中可视化这些NA。所以只聚类行,而不是列。
dissimilar matrix example

1yjd4xko

1yjd4xko1#

我不知道你为什么会得到这个错误。dist函数默认情况下应该处理NA。下面是一个例子。另外,你可能想先简单地计算你的距离矩阵,然后馈送到hclustvegan包可以计算许多距离度量,你可以指定是否应该删除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)

字符串

cig3rfwq

cig3rfwq2#

好的,我设法解决了这个问题。我必须做简单的估算。我只是用一个“常数”代替了所有的NA。
然后,我可以可视化整个数据集,而无需删除任何样本或行,对行和列进行聚类。然后,当我想绘制NA在数据集中的位置时,我只需在任何图中为“常量”给予特定的颜色。
通过这种方式,我对所有的NA都进行了相同的处理,而不会根据其他样本(例如均值/中位数/回归方法)为每行/列中的NA分配一个值。这种方法最适合我的数据集,而不会使它们向任何方向倾斜。

c3frrgcw

c3frrgcw3#

管理NA问题的另一种方法是,如果NA的数量上级超过阈值,则删除该列。阈值将是热图/聚类不再工作的最大值。
例如# remove columns if number of na is up to 15 na_count <- colSums(is.na(t_Mat))columns_to_remove <- which(na_count > 15)# Remove identified columns t_Mat <- t_Mat[,-columns_to_remove]

相关问题