描述性统计手册/统计变异性度量/方差
- 简要描述什么是方差以及它的用途。
- 数学公式
- 指向维基百科相关文章的链接。
在此详细描述方差最有效的的数据集和目的。还应描述可能导致误导结果的数据集。
- 如果存在,请包含常见分布的标准值。例如,正态分布的偏度和峰度始终为零。
- 包含正态分布的标准误差,如果可能,也包含其他分布的标准误差。
- 抽样分布。
计算大小为N的总体方差σ2的公式为
其中
代表总体均值。
计算样本方差s2(总体方差的无偏估计)的公式,从大小为n的样本中计算,为
其中
代表样本均值。
因此,计算方差的简单算法可以用以下伪代码描述
double sum; double sum_sqr; double variance; long n = data.length; // the number of elements in the data array (the actual syntax is language-specific) for i = 0 to n sum += data[i]; sum_sqr += ( data[i] * data[i] ); end for variance = ((n * sum_sqr) - (sum * sum))/(n*(n-1));
另一种在求和时避免sum_sqr中出现大数的算法
double avg; double var; long n = data.length; // number of elements for i = 0 to n avg = (avg*i + data[i]) / (i + 1); if (i > 0) var += (var * (i - 1) + (data[i] - avg)*(data[i] - avg)) / i; end for return var; // resulting variance
Chan、Golub 和 Leveque(American Statistician,1983 年,第 242 页)的“校正两遍算法”
avg=0 for all i avg=avg+data[i] end for avg=avg/n sum=0 sum2=0 for all i sum2=sum2+(data[i]-avg)^2 sum=sum+(data[i]-avg) end for var=(sum2-sum/n)/(n-1) return var
在计算机上处理大型数据集或大数时,选择最大程度减少计算机近似计算引起的误差的算法非常重要。在下面合并上述算法的讨论。
实际上,第一个公式在处理有限精度算术时存在精度问题。如果测量值与均值之间的差异非常小,则第一个公式将产生精度问题,因为信息将在 (xi - µ) 操作中丢失。第二个公式的中间运算中不会发生这种显著性损失。
事实上,第二个公式更容易出现问题。第一个公式在均值相对于方差非常大的时候可能会出现问题,但在实践中这种情况相对较少,而且这个问题也会影响第二个公式。更常见的情况是,均值和方差相当,并且观测值非常多。在这种情况下,第二个公式会导致两个非常大的数字相减,而它们的差值相对较小(大约与观测值的个数成反比)。如果你有一百万个观测值,如果你使用普通的浮点运算,第二个公式会损失大约六位有效数字。
问题可能发生在
- 当偏差相对于均值非常小时,或者
- 当它们相对于算术工具(浮点计算机、定点计算器、纸和笔)的表示能力较小时。
为了精确起见,我们必须指定工具和数据的性质。
你所说的普通浮点运算是什么意思?是在谈论寄存器宽度方面的精度,还是隐含地引用了一些“非普通”方案,即非 IEEE 方案?谢谢。我认为这个参考非常明确。然而,我并不想暗示使用非标准但仍然是浮点运算。我想到的是完全不同的系统。一个简单的例子是一个基于无限精度整数的有理数系统。另一个系统可能是定点运算。第一个系统在计算中不会损失精度,而第二个系统会或多或少地损失精度,具体取决于相关的值和定点系统的特性。你还可以想象一个优化器,它注意到你可能会将大量非常小的数字加起来,并且会重新排序加法以避免大部分舍入误差,方法是使用 log N 个临时值来执行加法。
包括如何在常见的统计软件包中访问它(如果已知)。还可以提供计算它的源代码示例链接等。