我很惊讶地发现来自clara
的{{1}}允许NAs。但是函数文档没有说明它如何处理这些值。
所以我的问题是:
library(cluster)
如何处理NAs?clara
(不允许使用Nas吗?) [更新] 所以我确实在kmeans
函数中找到了代码行:
clara
由inax <- is.na(x)
valmisdat <- 1.1 * max(abs(range(x, na.rm = TRUE)))
x[inax] <- valmisdat
执行缺失值替换。不确定我理解使用这种配方的原因。有任何想法吗?是不是更自然&#34;分别按每列处理NA,可能用均值/中位数替换?
答案 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,如同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;。