【发布时间】:2013-03-30 23:21:36
【问题描述】:
是否有 Javascript 库可用于进行 Spearman and/or Pearson 关联?
【问题讨论】:
标签: javascript statistics correlation
是否有 Javascript 库可用于进行 Spearman and/or Pearson 关联?
【问题讨论】:
标签: javascript statistics correlation
有这个
http://stevegardner.net/2012/06/11/javascript-code-to-calculate-the-pearson-correlation-coefficient/
除此之外,您还可以尝试:
或者,如果这些都不符合要求并且您不想自己写一个,您可以随时使用:
与
http://www.gardenersown.co.uk/education/lectures/r/correl.htm
去做。
【讨论】:
试试这个:
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;
}
【讨论】:
所以这是我在这件事上的两便士 - 皮尔逊相关性:
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);
【讨论】:
我在 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 相关性。
【讨论】:
自从提出最初的问题多年后,我推荐这个很棒的库,它很简单,但仍然有据可查: statistics.js
在许多其他方法中,它有 correlationCoefficient() 计算两个变量的 Pearson 相关系数,spearmansRho() 计算 Spearman 等级相关系数。
【讨论】: