《Python科学计算》的作者
分类: Python/Ruby
2012-02-29 20:30:31
我们用下面的公式计算总体样本的方差:
其中N为样本的总数,为总体样本的平均值。
但是有时候总体样本数量太大,我们只能选取其中的一部分样本,用它对总体样本的方差进行估算。这时我们仍然可以使用上面的公式:
但是使用此公式计算出的方差会偏小,它被称为偏样本方差(biased sample variance),而下面公式计算的方差既不偏大也不偏小,称为无偏样本方差(unbiased sample variance)。
被称为无偏样本方差,因此它的期望等于。
下面让我们用程序验证一下上面的公式。
❶创建一个二维数组,这个数组表示总体样本。而我们已经将它分成了10000组,每组都是一组部分样本,❷计算每组样本的方差,缺省情况下计算的是偏样本方差,而如果设置ddof参数为1,则计算无偏样本方差。❸输出这两种方差的平均值。程序的输出如下:
从程序的运行结果可以看出,无偏样本方差的平均值十分接近总体样本的方差。下面的链接页面详细解释了偏样本方差偏小的原因以及无偏样本方差公式的推导过程。
无偏样本方差为什么除以n-1?
偏样本方差的公式所计算的方差是正态分布随机变量的最大似然估计。首先我们有n个样本,并且知道这n个样本符合正态分布,通过这些样本可以估算出正态分布的概率密度函数的参数。所估算的那组正态分布参数最符合给定的样本,就成为最大似然估计。
正态分布的概率密度函数的定义如下:
其中和是函数的两个参数,分别表示期望和方差。
所谓最大似然估计就是找到一组参数使得下面的乘积最大,其中为样本值:
专业术语总是很难理解,下面我们还是用程序来验证。
❶产生10个正态分布的随机数,❷并计算其最大似然估计的参数。以最大似然估计的方差为中心,产生一组方差值。用正态分布的概率密度函数计算每个样本、每个方差所对应概率密度。p是一个二维数组,它的第0轴为反差,第1轴为样本。❺沿着第1轴求所有样本的概率密度的乘积。❻在最大似然估计的方差处绘制一条直线。程序的输出如下图所示:
图中,横轴为方差,纵轴为方差所对应的概率密度函数在各个样本处的值的乘积。可以看出按照偏样本方差公式计算的方差所对应的乘积最大。
/最大似然估计
最大似然估计的原理以及公式推导