次のマトリックスについて考えてみます。
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)
この測定では、((1.666 * --1)+7)/ 7 = 0.761であるため、X1とX3の間の距離は0.761になります。
私の数式の問題は、テーブル内のすべての値の範囲を使用していることです。したがって、「maxmin」は常に7であり、類似性の計算にバイアスがかかります。類似度を計算するときは、テーブルではなく列の範囲を使用する必要があります。列1と3のmaxmin値は4(5-1)であり、X1とX3の類似度は0.583である必要があります。