JavaScript库用于Pearson和/或Spearman相关性

8
5个回答

8

那么这就是我的看法——皮尔逊相关性:

const pcorr = (x, y) => {
  let sumX = 0,
    sumY = 0,
    sumXY = 0,
    sumX2 = 0,
    sumY2 = 0;
  const minLength = x.length = y.length = Math.min(x.length, y.length),
    reduce = (xi, idx) => {
      const yi = y[idx];
      sumX += xi;
      sumY += yi;
      sumXY += xi * yi;
      sumX2 += xi * xi;
      sumY2 += yi * yi;
    }
  x.forEach(reduce);
  return (minLength * sumXY - sumX * sumY) / Math.sqrt((minLength * sumX2 - sumX * sumX) * (minLength * sumY2 - sumY * sumY));
};
let arrX = [20, 54, 54, 65, 45];
let arrY = [22, 11, 21, 34, 87];
let R = pcorr(arrX, arrY);
console.log('arrX', arrX, 'arrY', arrY, 'R', R);


3

jStat 是否支持 Pearson 或 Spearman 相关性分析?在文档中只提到了“相关系数”,但没有明确说明是 Pearson。 - trusktr
@trusktr 看起来你是对的,抱歉,我以为它可以。 - Mike H-R
相关系数通常是皮尔逊相关系数,不是吗?而斯皮尔曼相关系数则是基于数据排名的皮尔逊相关系数,没错吧? - Myoch

3
我在Github上使用了Spearson项目这里。我已经测试了它的斯皮尔曼相关性,并且它可以给出准确的值。
我刚刚在repo的/lib文件夹中下载了spearson.js文件。以下是如何在浏览器中使用它的方法: <script src="spearson.js"></script>
<script>
    var x = [3, 4, 5];
    var y = [.1, .2, .3];
    var corr = spearson.correlation.spearman(x, y);
</script>

同样地,您可以使用correlation.pearson来计算Pearson相关系数。


2

多年以来,自从最初提出这个问题,我推荐这个非常直观且文档齐全的库: statistics.js

除了许多其他方法外,它还具有correlationCoefficient(),用于计算两个变量的Pearson相关系数spearmansRho()则计算Spearman等级相关系数


1

试试这个:

function spearmanCorrelation(multiList, p1, p2){
    N=multiList[p1].length;
    order=[];
    sum=0;

    for(i=0;i<N;i++){
        order.push([multiList[p1][i], multiList[p2][i]]);
    }

    order.sort(function(a,b){
        return a[0]-b[0]
    });

    for(i=0;i<N;i++){
        order[i].push(i+1);
    }

    order.sort(function(a,b){
        return a[1]-b[1]
    });

    for(i=0;i<N;i++){
        order[i].push(i+1);
    }
    for(i=0;i<N;i++){
        sum+=Math.pow((order[i][2])-(order[i][3]), 2);

    }

    r=1-(6*sum/(N*(N*N-1)));

    return r;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接