JavaScript-计算斯皮尔曼等级相关系数


// 计算斯皮尔曼等级相关系数
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;
}

文章作者: 钱不寒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 钱不寒 !
  目录