【问题标题】:Cluster Analysis in R with missing dataR中缺少数据的聚类分析
【发布时间】:2021-06-20 00:06:25
【问题描述】:

所以我花了很多时间试图找到如何做到这一点的答案。到目前为止我找到的唯一答案在这里:How to perform clustering without removing rows where NA is present in R

很遗憾,这对我不起作用。

所以这是我的数据示例(本例中为 d):

Q9Y6X2           NA -6.350055943 -5.78314068
Q9Y6X3           NA           NA -5.78314068
Q9Y6X6  0.831273549  4.875151493  0.78671493
Q9Y6Y8  4.831273549  0.457298979  5.59406985
Q9Y6Z4  4.831273549  4.875151493          NA

这是我尝试过的:

> dist <- daisy(d,metric = "gower")
> hc <- hclust(dist)
Error in hclust(dist) : NA/NaN/Inf in foreign function call (arg 11)

据我了解,daisy 应该能够处理 NA 值,但在尝试对结果进行聚类时仍然收到错误消息。

谢谢。

【问题讨论】:

  • 什么是雏菊。你在用什么库?
  • 我正在使用以下库:gplots、cluster。 Daisy 是一种计算距离矩阵的算法,允许丢失数据。

标签: r cluster-analysis r-daisy


【解决方案1】:

混合模型允许对具有缺失值的数据集进行聚类,方法是假设值完全随机缺失 (MCAR)。此外,信息标准(如 BIC 或 ICL)允许选择集群的数量。您可以使用 R 包 VarSelLCM 对这些数据进行聚类(有一个 Shiny 应用程序可以解释结果)。这个包的教程是可用的here

【讨论】:

    【解决方案2】:

    如果查看 dist 矩阵,您会看到存在 NA,因为样本 Q9Y6X3 和 Q9Y6Z4 没有重叠。这会导致您的 dist 矩阵中出现 NA,这是 hclust 不喜欢的。您可能会强制 NA 为 0 或其他值,但我不确定这是否会留下统计偏差。

    【讨论】:

      【解决方案3】:

      在以下帖子的第二个答案中: How to perform clustering without removing rows where NA is present in R,报告了“daisy”功能中的此类错误。以前该函数由以下人员编码:

      if (any(ina <- is.na(type3))) 
      stop(gettextf("invalid type %s for column numbers %s", 
          type2[ina], pColl(which(is.na))))
      

      没有打印出预期的错误消息,因为错误地使用了 which(is.na) 而不是 which(ina)。

      “cluster”包中包含的这个函数的作者承认了这个问题,并在 2015 年 6 月修复了代码。http://svn.r-project.org/R-packages/trunk/cluster/R/daisy.q

      【讨论】:

      • 请尝试在您的答案中包含链接中的相关部分。这是一个很好的做法,以避免得到带有死链接的答案。
      【解决方案4】:

      您应该从一些描述性统计开始,例如分析每个变量的 NA 频率,并拆分直方图以判断特定变量是否缺失(如果有很多变量缺失,这几乎是不可能的不过)。

      如果您的缺失很少(例如,

      在大多数情况下,缺失取决于数据集中的其他变量,甚至是未观察到的信息。在这种情况下,多重插补通常是最好的。关于这方面的一本非常好的书是:https://stefvanbuuren.name/fimd/ 它来自 mice 软件包的作者。还有其他很棒的插补包,例如,missRanger 使用快速随机森林实现来插补(例如估计)缺失值。

      在任何情况下,您都应该测试各种方法(并迭代非确定性方法)以了解它们对聚类结果的影响。 FeatureImpCluster(由我撰写)提供了每个变量的全局特征重要性度量。如果某个变量与插补结果无关,那么您可能不必担心您使用的插补技术。

      最后,针对 k-means 聚类中的缺失值,我编写了 ClustImpute 包,它不需要您事先估算 NA。

      【讨论】:

        猜你喜欢
        • 2014-07-24
        • 1970-01-01
        • 2013-02-28
        • 2016-06-29
        • 2016-06-07
        • 1970-01-01
        • 2020-04-14
        相关资源
        最近更新 更多