如何从R中的距离矩阵或层次聚类中移除离群值?

时间:2019-12-09 07:44:29

标签: r

我有一些问题

首先,我不知道如何在距离矩阵或对称矩阵中查找和删除异常值。

第二,我也使用带有平均链接的层次聚类。

我的数据是engmale161(已经使用DTW建立了对称矩阵)

engmale161 <- na.omit(engmale161)
engmale161 <- scale(engmale161)
d <- dist(engmale161, method = "euclidean")
hc1_engmale161 <- hclust(d, method="average")

我发现用轮廓,wss和gap优化索引4。

>sub_grp <- cutree(hc1_engmale161,h=60, k = 4)
>table(sub_grp)
>table(sub_grp)
sub_grp  
  1   2   3   4
 741  16   7   1 
> subset(sub_grp,sub_grp==4)
4165634865 
         4 


>fviz_cluster(list(data = engmale161, cluster = sub_grp), geom = "point")

enter image description here

因此,我认为右上点(4165634865)离群,并且只有一个点。 如何在H-C算法中删除异常值。

1 个答案:

答案 0 :(得分:0)

只是一些想法。 简而言之,

  • 不要对engmale161进行“ na.omit”操作。使用
  • 找到异常值
  • 分位数和框线图在dist矩阵中将异常值置于NA之外
  • 进行了处理

长版:

  • “ dist”在NA方面表现良好(来自R文档“ Missing 值是允许的,并且不包括在所有涉及的计算中 它们发生的行。此外,当Inf值为 涉及到时,所有对价值的贡献都被排除在外 距离等于NaN或NA)”
  • 要找到一个异常值,我将使用探索性统计中的概念。 使用默认值和na.rm = true的“ quantile”(因为您的dist 矩阵仍然包含NA)->您将获得四分位数的值 (数据集分成4:0-25%,25-50%m,依此类推)。 25-75是“盒子”。 寻找“胡须”是一个有争议的话题。标准方法是 查找InterQuartileRange(IQR),它是第三四分位数, 然后第一个四分位数-1.5 * IQR是“较低”的晶须,第三个 四分位数+ 1.5 * IQR是“上部”晶须。以外的任何值 晶须被认为是异常值。将它们标记为NA,然后继续。

祝你好运,我很高兴能成为真正查看数据的人!