js实现统计量
常用统计量实现方法
均值计算
使用数组的reduce方法计算平均值:
function mean(arr) {
return arr.reduce((a, b) => a + b, 0) / arr.length;
}
中位数计算
先排序后取中间值:
function median(arr) {
const sorted = [...arr].sort((a, b) => a - b);
const mid = Math.floor(sorted.length / 2);
return sorted.length % 2 !== 0
? sorted[mid]
: (sorted[mid - 1] + sorted[mid]) / 2;
}
方差计算
先计算均值再求平方差:
function variance(arr) {
const m = mean(arr);
return arr.reduce((acc, val) => acc + Math.pow(val - m, 2), 0) / arr.length;
}
标准差计算
方差的开方:
function stdDev(arr) {
return Math.sqrt(variance(arr));
}
频数统计
使用对象记录出现次数:
function frequency(arr) {
return arr.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
}
相关系数计算
皮尔逊相关系数实现:
function correlation(x, y) {
const n = x.length;
const meanX = mean(x);
const meanY = mean(y);
let num = 0;
let denX = 0;
let denY = 0;
for(let i = 0; i < n; i++) {
num += (x[i] - meanX) * (y[i] - meanY);
denX += Math.pow(x[i] - meanX, 2);
denY += Math.pow(y[i] - meanY, 2);
}
return num / (Math.sqrt(denX) * Math.sqrt(denY));
}
分位数计算
通用分位数计算方法:
function quantile(arr, q) {
const sorted = [...arr].sort((a, b) => a - b);
const pos = (sorted.length - 1) * q;
const base = Math.floor(pos);
const rest = pos - base;
if (sorted[base + 1] !== undefined) {
return sorted[base] + rest * (sorted[base + 1] - sorted[base]);
}
return sorted[base];
}
数据标准化
Z-score标准化方法:

function standardize(arr) {
const m = mean(arr);
const sd = stdDev(arr);
return arr.map(x => (x - m) / sd);
}
这些实现涵盖了基础统计量的计算,可根据实际需求进行组合或扩展。对于大型数据集,建议使用专门的统计库如Simple Statistics或Math.js以提高性能。






