在R中使用NA值进行聚类

时间:2012-05-23 13:46:43

标签: r cluster-analysis

我很惊讶地发现来自clara的{​​{1}}允许NAs。但是函数文档没有说明它如何处理这些值。

所以我的问题是:

  1. library(cluster)如何处理NAs?
  2. 这可以以某种方式用于clara(不允许使用Nas吗?)
  3. [更新] 所以我确实在kmeans函数中找到了代码行:

    clara

    inax <- is.na(x) valmisdat <- 1.1 * max(abs(range(x, na.rm = TRUE))) x[inax] <- valmisdat 执行缺失值替换。不确定我理解使用这种配方的原因。有任何想法吗?是不是更自然&#34;分别按每列处理NA,可能用均值/中位数替换?

3 个答案:

答案 0 :(得分:8)

虽然没有明确说明,但我认为NA的处理方式是?daisy帮助页面中描述的方式。详细信息部分包含:

  

在菊花算法中,x行中的缺失值不包括在差异中   涉及那一行。

在内部给出clara()将使用相同的代码,这是我理解数据中NA可以处理的方式 - 他们只是不参与计算。这是在这种情况下进行的合理标准方式,例如用于Gower广义相似系数的定义。

更新 C的{​​{1}}来源清楚地表明此(上述)是clara.c NA处理clara()的方式./src/clara.c)中的350-356:

    if (has_NA && jtmd[j] < 0) { /* x[,j] has some Missing (NA) */
        /* in the following line (Fortran!), x[-2] ==> seg.fault
           {BDR to R-core, Sat, 3 Aug 2002} */
        if (x[lj] == valmd[j] || x[kj] == valmd[j]) {
        continue /* next j */;
        }
    }

答案 1 :(得分:3)

不确定kmeans是否可以通过忽略行中的缺失值来处理缺失的数据。

kmeans中有两个步骤;

  1. 计算观察与原始聚类平均值之间的距离。
  2. 根据新计算的距离更新新的聚类均值。
  3. 当我们在观察中遗漏数据时: 可以通过适当调整距离度量来处理步骤1,如同clara/pam/daisy包中一样。但是,如果我们对观察的每一列都有一些值,则只能执行步骤2。因此,输入可能是kmeans处理缺失数据的下一个最佳选择。

答案 2 :(得分:0)

通过查看Clara c代码,我注意到在clara算法中,当观察中存在缺失值时,平方和是#34;减少&#34;与缺失值的数量成正比,我认为这是错误的! clara.c的646行就像&#34; dsum * =(nobs / pp)&#34;这表示它计算每对观察(nobs)中的非缺失值的数量,将其除以变量的数量(pp)并将其乘以平方和。我认为必须以其他方式完成,即&#34; dsum * =(pp / nobs)&#34;。

相关问题