【问题标题】:Javascript library for Pearson and/or Spearman correlations用于 Pearson 和/或 Spearman 相关性的 Javascript 库
【发布时间】:2013-03-30 23:21:36
【问题描述】:

是否有 Javascript 库可用于进行 Spearman and/or Pearson 关联?

【问题讨论】:

    标签: javascript statistics correlation


    【解决方案1】:

    有这个

    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

    去做。

    【讨论】:

    • jStat 是做 pearson 还是 spearman?我只看到文档中提到的“相关系数”,但没有具体看到 pearson。
    • @trusktr 看来你是对的,抱歉,我认为是的。
    • 相关系数通常是皮尔逊,不是吗? Spearman 在您的数据行列中不亚于 Pearson,对吧?
    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

      所以这是我在这件事上的两便士 - 皮尔逊相关性:

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

      【讨论】:

        【解决方案4】:

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

        我刚刚在 repo 的 /lib 文件夹中下载了 spearson.js 文件。以下是如何在浏览器中使用它:

        &lt;script src="spearson.js"&gt;&lt;/script&gt;

        <script>
            var x = [3, 4, 5];
            var y = [.1, .2, .3];
            var corr = spearson.correlation.spearman(x, y);
        </script>
        

        同样,您可以将correlation.pearson 用于 Pearson 相关性。

        【讨论】:

          【解决方案5】:

          自从提出最初的问题多年后,我推荐这个很棒的库,它很简单,但仍然有据可查: statistics.js

          在许多其他方法中,它有 correlationCoefficient() 计算两个变量的 Pearson 相关系数spearmansRho() 计算 Spearman 等级相关系数

          【讨论】:

            猜你喜欢
            • 2017-06-29
            • 2022-01-24
            • 1970-01-01
            • 2018-05-09
            • 2018-02-01
            • 2020-02-06
            • 1970-01-01
            • 2020-11-18
            • 2019-02-15
            相关资源
            最近更新 更多