方差算法

类别:    标签: 数理   阅读次数:   版权: (CC) BY-NC-SA

2013-08-04 15:20:43

计算方差时需要对平方进行累加, 因此, 有时会出现数值不稳定和溢出的问题. 好的算法在于能尽量避免这些问题.

简单算法

利用定义

方差 \(\sigma^2 =< x^2 >-< x >^2 = \bar {x^2}-{\bar x}^2 ={1 \over N} \sum\limits_{i=1}^N x_i^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$

上两种算法都存在舍入误差累积问题

校正两步算法(Corrected Two-pass Algorithm)或补偿算法(Compensated Algorithm)

\[\sigma^2 = {1 \over N} \sum\limits_{i=1}^N(x_i-\bar x)^2 -{1 \over N^2} [\sum\limits_{i=1}^N(x_i-\bar x)]^2\]

若 $\bar x$ 为精确值时, 第二项为零, 否则, 能修正第一项的舍入误差.

实时/在线算法(Online Algorithm)

当采集数据不能全部保存, 只能读取一次时, 可以使用这种递推方法. 计算时保存平均值与方差

\[\bar x_n = {(n-1) \bar x_{n-1} +x_n \over n} = \bar x_{n-1}+{x_n-\bar x_{n-1}}\] \[\sigma_n^2 = {(n-1)\sigma_{n-1}^2+(x_n-\bar x_{n-1})(x_n-\bar x_n) \over n}\]

下面是几种常用软件的方差计算方法

测试数据 1 2 3 4

对比可知, 这三种软件给出的都是样本方差的无偏估计 $s^2$ 及其相应的标准差.

参考

  1. Algorithms for calculating variance
  2. Java 实现样本方差的计算
◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: 坐标轴刻度范围及刻度值的设定
后一篇: 球谐函数及Legendre多项式

访问人次(2015年7月 9日起): | 最后更新: 2024-04-16 06:38:20 UTC | 版权所有 © 2008 - 2024 Jerkwin