1.为什么样本方差的分母是n-1
首先给出样本方差的计算方法:
\[S^2=\frac{1}{n-1}\sum_{i=1}^{n}{(X_i-\bar{X})}^2\]
其中样本均值
\[\bar{X}=\frac{1}{n}\sum_{i=1}^{n}X_i\]
总体方差(在总体均值$\mu$已知的情况下)的定义是
\[{\sigma}^2=\frac{1}{n}\sum_{i=1}^{n}{(X_i-\mu)}^2\]
那为什么样本方差的分母要使用n-1而不是n,证明如下:
======插入:证明需要用到以下性质======
(1)期望的线性可加性:若$X$和$Y$是两个随机变量,则他们的期望的和等于和的期望,即
\[E(aX+bY)=aE(X)+bE(Y)\]
(2)方差的性质
若$X$和$Y$相互独立,则
\[D(aX+bY)=a^2DX+b^2DY\]
(3)若总体$X$的均值、方差均存在,且$EX=\mu$,$DX={\sigma}^2$,则
\[E\bar{X}=\mu\]
\[D\bar{X}=\frac{\sigma^2}{n}\]
证明:
\[E\bar{X}=E\left(\frac{1}{n}\sum_{i=1}^{n}X_i\right)=\frac{1}{n}\sum_{i=1}^{n}{EX_i}=\frac{1}{n}\sum_{i=1}^{n}EX=\mu\]
\[D\bar{X}=D\left(\frac{1}{n}\sum_{i=1}^{n}X_i\right)=\frac{1}{n^2}\sum_{i=1}^{n}{DX_i}=\frac{1}{n^2}\sum_{i=1}^{n}DX=\frac{1}{n^2}n\sigma^2=\frac{\sigma^2}{n}\]
======
\[E\left(S^2\right)=\frac{1}{n-1}E\left(\sum_{i=1}^{n}\left(X_i-\bar{X}\right)^2\right)=\frac{1}{n-1}E\left(\sum_{i=1}^{n}\left(X_i-\mu+\mu-\bar{X}\right)^2\right)=\frac{1}{n-1}E\left(\sum_{i=1}^{n}\left(\left(X_i-\mu\right)^2-2(X_i-\mu)(\bar{X}-\mu)+\left(\bar{X}-\mu\right)^2\right)\right)=\frac{1}{n-1}E\left(\sum_{i=1}^{n}{\left(X_i-\mu\right)^2-2(\bar{X}-\mu)\sum_{i=1}^{n}{(X_i-\mu)}+{n\left(\bar{X}-\mu\right)}^2}\right)=\frac{1}{n-1}E\left(\sum_{i=1}^{n}{\left(X_i-\mu\right)^2-2n(\bar{X}-\mu)(\bar{X}-\mu)+{n\left(\bar{X}-\mu\right)}^2}\right)=\frac{1}{n-1}E\left(\sum_{i=1}^{n}{\left(X_i-\mu\right)^2-{n\left(\bar{X}-\mu\right)}^2}\right)=\frac{1}{n-1}\sum_{i=1}^{n}{E(\left(X_i-\mu\right)^2)-nE(\left(\bar{X}-\mu\right)^2)}=\frac{1}{n-1}\left(n\sigma^2-n\frac{\sigma^2}{n}\right)=\sigma^2\]
因此样本方差$S^2$是总体方差$\sigma^2$的无偏估计。
2.什么是无偏估计
无偏估计是用样本统计量来估计总体参数时的一种无偏推断。估计量的数学期望等于被估计参数的真实值,则称此估计量为被估计参数的无偏估计,即具有无偏性,是一种用于评价估计量优良性的准则。无偏估计的意义是:在多次重复下,它们的平均数接近所估计的参数真值。——来源于百度百科
3.软件的计算方法
在matlab和R中,默认使用的都是样本标准差,即分母是n-1,如下。
>> std([1,2,3]) ans = 1
> sd(c(1,2,3)) [1] 1
而在Python中,需要注意默认是用的分母为n的标注差,需要加ddof = 1才是样本标准差。
import numpy as np a=np.std([1,2,3]) b=np.std([1,2,3],ddof = 1) print('a=',a,',b=',b)
a= 0.816496580927726 ,b= 1.0
4.关于是否有偏的测试
mus=[]; sigmas=[]; means=[]; std_ns=[]; std_n_1s=[]; mse_n=[]; mse_n_1=[]; for i=1:10000 mu=rand; sigma=rand; r = normrnd(mu,sigma,[1,20]); mus=[mus,mu]; sigmas=[sigmas,sigma]; means=[means,mean(r)]; std_ns=[std_ns,std_n(r)]; std_n_1s=[std_n_1s,std_n_1(r)]; mse_n=[mse_n,mean(std_ns-sigmas)]; mse_n_1=[mse_n_1,mean(std_n_1s-sigmas)]; end plot(mse_n);hold on;plot(mse_n_1); hold off; legend('std n','std n-1'); function s=std_n(x) s=sqrt(sum((x-mean(x)).^2)/length(x)); end function s=std_n_1(x) s=sqrt(sum((x-mean(x)).^2)/(length(x)-1)); end
可以看到,使用n为分母计算出的比n-1更加精确。