首页 文章

Pearson和/或Spearman相关的Javascript库

提问于
浏览
6

是否有可用于执行Spearman and/or Pearson相关的Javascript库?

4 回答

  • 2

    有这个

    http://stevegardner.net/2012/06/11/javascript-code-to-calculate-the-pearson-correlation-coefficient/

    除此之外,您可以尝试:

    http://www.jstat.org/download

    或者,如果这些都不符合要求并且您不想自己编写,您可以随时使用:

    http://www.rforge.net/Rserve/

    http://www.gardenersown.co.uk/education/lectures/r/correl.htm

    去做吧 .

  • 2

    我在Github上使用了Spearson项目here . 我已经测试了Spearman相关性,它给出了准确的值 .

    我刚刚在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相关 .

  • 1

    所以这是我的两个便士值得关注的问题 - Pearson相关性:

    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);
    
  • 0

    试试这个:

    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;
    }
    

相关问题