← 中文资源

简体中文版本

总体与样本标准差计算

对校验后的数值计算总体或样本标准差,并在样本量不足时给出明确错误。

阅读英文原文

功能说明

标准差衡量数值离散程度,总体与样本使用不同分母。该函数先计算均值,再求平方偏差和,最后按总体 n 或样本 n-1 取平方根。一次遍历求和,一次遍历求平方偏差,适合对中小规模指标做快速分析,并明确区分两种统计口径。

关键代码

standardDeviation 校验数组和非有限数字,空数组抛 RangeError;样本模式要求至少两个值。VarianceKind 类型限制取值,运行时仍检查 kind。均值用 reduce 求和,平方偏差同样用 reduce,最后 Math.sqrt 返回非负数。

const mean = values.reduce((total, value) => total + value, 0) / count;
const sumSquares = values.reduce((total, value) => total + (value - mean) ** 2, 0);
return Math.sqrt(sumSquares / (kind === "sample" ? count - 1 : count));

使用注意

该实现只支持未分组数值,不支持加权标准差。大数相减可能损失精度。样本模式在只有一个值时无法估计方差,因此抛错。返回值为非负数,全部相同时为 0。计算会遍历两次数组,超大流式数据应改用在线算法。

验证方式

断言 standardDeviation([2, 4, 4, 4, 5, 5, 7, 9]) 约等于 2。样本模式结果约等于 2.138。单元素总体标准差为 0,单元素样本模式抛 RangeError。包含 Infinity 抛 TypeError。非法 kind 抛 RangeError,输入数组不应被修改。