在R中使用NA值进行聚类

dan*_*kas 11 r cluster-analysis

我很惊讶地发现,claralibrary(cluster)允许来港定居.但是函数文档没有说明它如何处理这些值.

所以我的问题是:

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

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

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

哪个缺少价值替代valmisdat.不确定我理解使用这种配方的原因.有任何想法吗?是否更自然地分别对每个列处理NAs,可能用均值/中位数替换?

Rei*_*son 8

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

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

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

更新C来源clara.c清楚地表明,此(以上)是如何NAS被处理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 */;
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 可能但不是没有编写自己的k-means算法.基本上k-means适用于组内的平方和,因此距离质心.`clara`正在做同样的事情所以这个想法是可行的(你只是在计算到质心和质心本身的欧几里德距离时忽略那些比较).你是否坚持使用k-means?如果k-mediods没问题(我不明白为什么它不会比k-means更健壮),使用**cluster**包中的`pam()`函数来处理` NA喜欢`clara()`和`daisy()`. (2认同)