这可能是一个相当深奥的问题。
我正在尝试将 Albatineh 等人 (2006) (DOI: 10.1007/s00357-006-0017-z) 的一些想法用于空间聚类算法。基本思想是评估聚类结果稳定性的一种方法是检查成对的观察结果出现在同一类中的频率。在定义明确的解决方案中,成对的观察结果应该经常出现在同一组中。
挑战在于,在大型数据集中有 n^2 对可能的对(并且大多数不会出现)。我们的输出结构如下:
A B C C A
B A A A B
A B C C A
其中列索引是观察 ID,每一行代表聚类算法的一次运行。在这个例子中,有 5 个观察值,算法运行了 3 次。集群标签 A:C 在运行之间基本上是任意的。我想要一种有效的方法来计算这样的东西:
ID1 ID2
1 5
2
3 4
4 3
5 1
1 2
2 3
2 4
...
这实现了我的目标,但速度非常慢,尤其是对于大型数据框:
testData <- matrix(data=sample(x=c("A", "B", "C"), 15, replace=TRUE), nrow=3)
cluPr <- function(pr.obs){
pairs <- data.frame()
for (row in 1:dim(pr.obs)[1]){
for (ob in 1:dim(pr.obs)[2]){
ob.pairs <- which(pr.obs[row,] %in% pr.obs[row,ob], arr.ind=TRUE)
pairs <- rbind(pairs, cbind(ob, ob.pairs))
}
}
return(pairs)
}
cluPr(testData)