标准差是描述数据偏离平均值程度最常用的指标。但在计算器或 Excel 中求标准差时,有时会得到两个不同的值。一个是用离差平方和除以 n,另一个是除以 n−1。本文结合示例说明这两个公式分别表示什么、为什么样本要用 n−1,以及实际工作中应当选择哪一个。
两个公式的区别
已知整个总体时的标准差(总体标准差)如下。
- 总体标准差:
σ = √(Σ(x−μ)² / N)
用从总体中抽取的一部分样本来估计总体的离散程度时,使用下面的公式。
- 样本标准差:
s = √(Σ(x−x̄)² / (n−1))
区别有两处。第一,中心值不是总体均值 μ,而是样本均值 x̄。第二,除数不是 n,而是 n−1。第二处区别称为贝塞尔校正(Bessel's correction)。
为什么要除以 n−1
样本均值 x̄ 正是由这组样本计算出来的,因此它处在离样本数据最近的位置。事实上,离差平方和 Σ(x−c)² 在 c 等于样本均值时取最小值。所以,用 x̄ 代替真正的总体均值 μ 来度量离差,离差平方和会系统性地偏小。
从数学上计算,除以 n 的方差的期望值是 (n−1)/n × σ²。例如样本量为 5 时,除以 n 的方差平均只有真实方差的 4/5 = 80%。为了纠正这种低估,乘以 n/(n−1),最终就得到除以 n−1 的公式。这样 s² 就成为总体方差 σ² 的无偏估计量。
另一种解释方式是自由度。n 个离差 (x−x̄) 有一个约束:它们的和必须为 0。因此只要确定了 n−1 个离差,最后一个就自动确定。可以自由变动的信息有 n−1 个,所以除以 n−1。
注意:
s²是σ²的无偏估计量,但开平方后的s并不是σ的无偏估计量。由于平方根是凹函数,s平均而言略小于σ。不过样本增大后这一差异小到可以忽略,因此实际工作中直接使用s。
手算示例
假设有以下 8 个值。
2, 4, 4, 4, 5, 5, 7, 9
第 1 步:均值
x̄ = (2+4+4+4+5+5+7+9) / 8 = 40 / 8 = 5
第 2 步:离差与离差平方
| 值 x | 离差 x−x̄ | 离差平方 |
|---|---|---|
| 2 | −3 | 9 |
| 4 | −1 | 1 |
| 4 | −1 | 1 |
| 4 | −1 | 1 |
| 5 | 0 | 0 |
| 5 | 0 | 0 |
| 7 | 2 | 4 |
| 9 | 4 | 16 |
离差之和为 −3−1−1−1+0+0+2+4 = 0,正好印证了前面提到的约束。离差平方和为 9+1+1+1+0+0+4+16 = 32。
第 3 步:两种方差与标准差
| 类别 | 方差 | 标准差 |
|---|---|---|
| 按总体计算(÷n) | 32 / 8 = 4 | √4 = 2 |
| 按样本计算(÷(n−1)) | 32 / 7 ≈ 4.5714 | √4.5714 ≈ 2.1381 |
如果这 8 个值就是关注对象的全部,标准差为 2。反之,如果是用从更大群体中抽取的 8 个值来估计该群体的离散程度,就应报告约 2.1381。当 n 像 8 这样小时,两者相差约 7%,差别明显。n 为 100 时相差约 0.5%,n 为 1,000 时约 0.05%。
什么时候用哪一个
判断标准是:“手上的数据是想了解的对象的全部,还是一部分?”
- 总体(÷n):只针对某个班级描述 30 名学生考试成绩的离散程度,或描述某公司全体员工的工资分布,即数据就是对象全体的情况。
- 样本(÷(n−1)):用 500 名问卷受访者推断全体国民的倾向,或用从生产线抽取的 20 个零件估计整个工序的偏差,即数据只是更大群体的一部分的情况。
实际工作中处理的数据大多是样本。置信区间、t 检验、样本量计算等通向推断的计算,都以样本标准差 s 为前提。如果不确定属于哪一种,使用样本公式是更保守的选择。
Excel 与编程工具的对应
| 工具 | 样本(÷(n−1)) | 总体(÷n) |
|---|---|---|
| Excel·Google 表格 | STDEV.S、VAR.S(旧版 STDEV) | STDEV.P、VAR.P(旧版 STDEVP) |
| R | sd()、var() | 需自行校正 |
| Python pandas | Series.std() 默认 ddof=1 | std(ddof=0) |
| Python NumPy | np.std(x, ddof=1) | np.std(x) 默认 ddof=0 |
特别是 NumPy 和 pandas 的默认值正好相反,用同样的数据计算却得到不同结果的情况很常见。比较结果时,最好先确认用的是哪个公式。
如何解读标准差
标准差与原始数据单位相同。成绩数据的单位是“分”,身高数据的单位是“cm”。方差的单位是平方,难以直观理解,所以报告时通常使用标准差。如果数据接近正态分布,大致可以认为均值 ± 1 个标准差内约有 68% 的值,± 2 个标准差内约有 95% 的值。比较均值相差很大的两个群体的离散程度时,也会同时看标准差除以均值得到的变异系数(CV)。
常见错误
- 报告中不注明使用了哪个公式:小样本时数值差别明显,因此要明确写出
s或σ符号,或写明“样本标准差”。 - 混淆标准差与标准误:标准误
SE = s / √n表示的不是单个数据的离散程度,而是样本均值的离散程度。置信区间使用的是标准误。 - n 为 1 时求样本标准差:n−1 为 0,因此没有定义。计算器报错是正常的。
- 不检查异常值:标准差使用平方,一个极端值就会使其大幅波动。怀疑有异常值时,应同时查看四分位距(IQR)。
把数据粘贴到本站的描述统计计算器中,即可并排查看样本标准差和总体标准差。
要点总结
- 数据是对象全体时除以 n,是更大群体的一部分时除以 n−1。
- 除以 n 的样本方差的期望值为
(n−1)/n × σ²,存在低估;除以 n−1 可以纠正这一点(贝塞尔校正)。 - 示例
2, 4, 4, 4, 5, 5, 7, 9的标准差按总体计算为 2,按样本计算约为 2.1381。 - Excel 用
STDEV.S(样本)和STDEV.P(总体)加以区分,NumPy 与 pandas 的默认值不同。 - 要区分标准差(数据的离散程度)与标准误(均值的离散程度)。