2012-05-23 64 views
10

我很惊讶地发现library(cluster)clara允许NAs。但函数文档没有说明它如何处理这些值。在R中使用NA值聚类

所以我的问题是:

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

[更新]clara功能的代码,所以我也发现线路:

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

这确实因valmisdat缺失值替换。不知道我明白使用这种公式的原因。有任何想法吗?单独使用每一列对新手进行治疗会更“自然”,可能会用平均数/中位数代替吗?

回答

7

虽然没有明确规定,我相信NA都在?daisy帮助页描述的方式来处理。详细信息部分包含:

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

鉴于内部相同的代码将被用于由clara()这就是我理解NA S IN的数据可以处理 - 他们只是不计算参加。这是在这种情况下进行合理标准的处理方式,例如用于定义高尔的广义相似系数。

更新C来源clara.c清楚地表明,这个(上述)是NA s的如何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 */; 
     } 
    } 
+0

相同的代码行在'雏菊'中处理'clara'函数中的缺失值(请参阅我的问题更新)。 –

+0

@ danas.zuokas我不知道它只是从您认为与该问题有关的来源拉取任意代码行是多么有帮助。你需要研究R代码和C代码。 'valmisdat'是用来表示C代码中缺失数据('NA')的值,而不是直接使用'NA'。如果你看看C代码,你会发现它显然只是忽略了一个变量对于其中一个或另一个或者两个样本的缺失值的比较,其中计算了不相似性。查看指向代码的指针的更新答案。 –

+0

谢谢你,加文! –

3

不知道kmeans可以处理通过忽略连续丢失的值来丢失数据。

kmeans有两个步骤;

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

当我们已经在我们的观测数据缺失: 步骤1可以通过适当地调整距离度量作为clara/pam/daisy包进行处理。但是,如果我们对观察的每一列都有一些值,则只能执行步骤2。因此,输入可能是kmeans处理丢失数据的下一个最佳选项。

0

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

+1

您可以使用[编辑链接](https://stackoverflow.com/posts/35925440/edit)来编辑以前的答案。 – zero323