Я хочу сгенерировать простую матрицу совпадений, я искал пакеты 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)
}
Функция работает нормально, но мой фактический набор данных содержит 2560 наблюдений 4 переменных, таким образом создавая матрицу совпадений 2560 x 2560, и для выполнения вычислений требуется довольно много времени. Интересно, есть ли более эффективный способ расчета этого или даже существует ли уже пакет, который может вычислить это расстояние несходства. Эта матрица позже будет использоваться в кластерном анализе.