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