// 计算斯皮尔曼等级相关系数
function spearmanRankCorrelation(s, t) {
// 计算排名
function rank(arr) {
let sorted = arr.slice().sort((a, b) => a - b);
return arr.map(v => sorted.indexOf(v) + 1);
}
let n = s.length;
let rankS = rank(s);
let rankT = rank(t);
let dSquaredSum = 0;
for (let i = 0; i < n; i++) {
dSquaredSum += Math.pow(rankS[i] - rankT[i], 2);
}
return 1 - (6 * dSquaredSum) / (n * (Math.pow(n, 2) - 1));
}
// 计算相似度 (0-1,值越大越相似)
function spearmanRankSimilarity(s, t) {
return (spearmanRankCorrelation(s, t) + 1) / 2;
}
上一篇
JavaScript-计算曼哈顿距离
2023-06-21
下一篇
JavaScript-使用条件概率表达式计算对象数组的条件概率
2023-06-20