【发布时间】:2020-01-25 08:46:07
【问题描述】:
我想生成一个简单的重合矩阵,我一直在寻找 R 包,但到目前为止找不到可以进行此计算的包,我不知道该矩阵的英文术语是否与葡萄牙文不同。 ..所以,这就是我需要做的。
我有一个矩阵:
[,1] [,2] [,3] [,4]
[1,] 1 1 2 1
[2,] 1 2 3 1
[3,] 2 3 1 2
[4,] 1 2 3 3
将计算一个重合矩阵,逐行比较每个元素以生成相异距离,公式为:
Diss = 1 - (Coincidences / (Coincidences + Discordance))
所以我得到的矩阵是一个对称的矩阵,具有暗淡的 4x4 和对角线元素等于 0,所以在示例中我的 A(1,2) 会是:
A(1,2) = 1 - (2 / 4) = 0.5
A(1,3) = 1 - (0/4) = 1.0
等等……
我已经创建了一个函数来生成这个矩阵:
cs_matrix <- function (x) {
cs.mat <- matrix(rep(0,dim(x)[1]^2), ncol = dim(x)[1])
for (i in 1:dim(x)[1]){
for (j in 1:dim(x)[1]){
cs.mat[i,j] <- 1 - (sum(x[i,] == x[j,]) / dim(x)[2])
}
}
return(cs.mat)
}
该函数工作正常,但我的实际数据集有 4 个变量的 2560 个观测值,因此生成了一个 2560 x 2560 的重合矩阵,并且计算需要相当长的时间。我想知道是否有更有效的计算方法,或者是否已经有一个包可以计算这种差异距离。该矩阵稍后将用于聚类分析。
【问题讨论】:
-
你的意思是 Diss = 1 - (Coincidences / (Coincidences + Discordance))?
-
另外,对角线不应该为零,因为每一行都与自己相似吗?
-
是的@Gabriel,谢谢你指出来。
-
@JorisChau 是的,对角线元素等于零,我想到了相似值。谢谢。
标签: r matrix cluster-analysis