我很惊讶地发现来自library(cluster)
的clara
函数允许NAs。但是函数文档没有说明如何处理这些值。
所以我的问题是:
clara
如何处理NAs?- 这是否可以用于
kmeans
(不允许NAs)?
[更新] 所以我在clara
函数中找到了代码行:
inax <- is.na(x)
valmisdat <- 1.1 * max(abs(range(x, na.rm = TRUE)))
x[inax] <- valmisdat
使用valmisdat
进行缺失值替换。不确定为什么要使用这个公式。有什么建议吗?也许分别处理每列的NAs并用平均值/中位数替换更“自然”?
daisy
函数与clara
函数使用相同的代码行(请参阅我的问题更新)。 - danas.zuokasvalmisdat
是C代码中用于指示缺失数据(NA
)的值,而不是直接使用NA
。 如果您查看C代码,您会发现它明显地忽略了变量具有一个或两个样本的缺失值的比较,这些样本正在计算差异性。 请参见更新的答案以获取指向代码的指针。 - Gavin Simpsonclara
做同样的事情,所以这个想法是可行的(当计算到质心的欧几里得距离和质心本身时,您只需忽略那些比较)。您是否一定要使用 k-means?如果可以使用 k-medoids(因为它比 k-means 更加健壮),则可以使用 cluster 包中的pam()
函数,该函数处理NA
,就像clara()
和daisy()
一样。 - Gavin Simpson