layout: post title: 方差算法 categories:
计算方差时需要对平方进行累加, 因此, 有时会出现数值不稳定和溢出的问题. 好的算法在于能尽量避免这些问题.
利用定义
方差 $$\sigma^2 =< x^2 >-< x >^2 = \bar {x^2}-{\bar x}^2 ={1 \over N} \sum\limits_{i=1}^N xi^2 - {1 \over N^2} (\sum\limits{i=1}^N x_i)^2$$
无偏方差 $s^2 = {N \over N-1}\sigma^2$
先计算出平均值, 再计算方差
$\bar x = { 1\over N }\sum\limits_{i=1}^N x_i$
$\sigma^2={ 1\over N }\sum\limits_{i=1}^N(x_i-\bar x)^2$
上两种算法都存在舍入误差累积问题
$$\sigma^2 = {1 \over N} \sum\limits_{i=1}^N(xi-\bar x)^2 -{1 \over N^2} [\sum\limits{i=1}^N(x_i-\bar x)]^2$$
若 $\bar x$ 为精确值时, 第二项为零, 否则, 能修正第一项的舍入误差.
当采集数据不能全部保存, 只能读取一次时, 可以使用这种递推方法. 计算时保存平均值与方差
$$\bar xn = {(n-1) \bar x{n-1} +xn \over n} = \bar x{n-1}+{xn-\bar x{n-1}}$$
$$\sigman^2 = {(n-1)\sigma{n-1}^2+(xn-\bar x{n-1})(x_n-\bar x_n) \over n}$$
下面是几种常用软件的方差计算方法
测试数据 1 2 3 4
Excel:【工具】==>【数据分析】==>【描述统计】
OriginPro 7.5:【Statistics】==>【Descriptive Statistics】==>【Statistics on Columns】
MatLab:
对比可知, 这三种软件给出的都是样本方差的无偏估计 $s^2$ 及其相应的标准差.
参考