考虑以下矩阵:
structure(list(X1 = c(1L, 2L, 3L, 4L, 2L, 5L), X2 = c(2L, 3L,
4L, 5L, 3L, 6L), X3 = c(3L, 4L, 4L, 5L, 3L, 2L), X4 = c(2L, 4L,
6L, 5L, 3L, 8L), X5 = c(1L, 3L, 2L, 4L, 6L, 4L)), .Names = c("X1",
"X2", "X3", "X4", "X5"), class = "data.frame", row.names = c(NA,
-6L))
每列对应一个受访者,每行包含受访者分配给特定对象的排名编号。请注意,排名的范围可能因受访者而异。
我正在尝试创建一个相似性度量,根据每列的范围对距离进行加权。这是我到目前为止所尝试的:
m <- test
d <- dist(m, "manhattan", diag=FALSE, upper=TRUE)/nrow(m)
maxmin <- max(m, na.rm=TRUE) - min(m,na.rm=TRUE)
WeightedAgreement <- as.matrix((-1 * d + maxmin) / maxmin)
使用此度量,X1 和 X3 之间的距离 = 0.761,因为 ((1.666 * - 1)+7)/7 = 0.761。
我的公式的问题在于它使用了表中所有值的范围——因此“maxmin”始终为 7,这会使相似度的计算产生偏差。在计算相似度时,我需要使用列的范围而不是表格。第 1 列和第 3 列的最大值应为 4 (5-1),X1 和 X3 之间的相似度应为 0.583。