13

我很惊讶地发现clarafromlibrary(cluster)允许 NA。但是函数文档没有说明它如何处理这些值。

所以我的问题是:

  1. 如何clara处理 NA?
  2. 这可以以某种方式用于kmeans(不允许Nas)吗?

[更新]所以我确实在clara函数中找到了代码行:

inax <- is.na(x)
valmisdat <- 1.1 * max(abs(range(x, na.rm = TRUE)))
x[inax] <- valmisdat

将缺失值替换为valmisdat. 不确定我是否理解使用这种公式的原因。有任何想法吗?将每列分别处理 NA 是否更“自然”,也许用平均值/中位数代替?

4

3 回答 3

9

虽然没有明确说明,但我相信会按照帮助页面NA中描述的方式进行处理。?daisy详细信息部分有:

在菊花算法中,x 行中的缺失值不包括在涉及该行的相异性中。

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

更新Cclara.c清楚地表明这(上面)是sNA的处理方式clara()(第 350-356 行./src/clara.c):

    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 */;
        }
    }
于 2012-05-23T14:19:19.600 回答
3

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

有两个步骤kmeans

  1. 计算观测值和原始聚类平均值之间的距离。
  2. 根据新计算的距离更新新的聚类平均值。

当我们的观察中缺少数据时:步骤 1 可以通过适当地调整距离度量来处理,就像在clara/pam/daisy包中一样。但是只有当我们对观察的每一列都有一些值时,才能执行第 2 步。因此,插补可能是kmeans处理缺失数据的下一个最佳选择。

于 2014-03-05T08:37:42.617 回答
0

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

于 2016-03-06T23:21:45.037 回答