一、概念和计算公式

样本方差是统计学中常用的一个概念,它用来度量一组样本的离散程度。我们可以通过计算样本方差来确定一组样本的方差,公式如下:

s^2 = Σ(xi - x)^2 / (n - 1)

其中,x是样本的平均值,xi是第i个样本的取值,n是样本数。

如果将公式中的(n-1)改为n,那么就得到了总体方差的计算公式。那么,为什么样本方差要使用(n-1)作为分母呢?接下来,我们会从多个角度进行阐述。

二、解释1:样本方差的无偏估计性质

在统计学中,无偏性是一个非常重要的性质。一个估计量如果具有无偏性,就意味着它的期望等于被估计参数的真实值。而一个估计量如果不具有无偏性,那么我们就说它是有偏的。

在样本方差的计算中,分母为(n-1)的公式是一个无偏估计量,而分母为n的公式是一个有偏估计量。具体来说,使用(n-1)作为分母的样本方差的期望等于总体方差,而使用n作为分母的样本方差的期望则小于总体方差,这意味着它是低估了总体方差的。

为什么使用(n-1)作为分母可以使样本方差具有无偏性呢?这与样本方差的定义有关。样本方差的定义是:样本中每个观测值与样本均值的差的平方值的总和除以样本容量减1。这个定义中减1是为了消除自由度的影响。在计算样本的均值时,我们是用n来计算的,因此样本中自由度的数量为n-1,所以样本方差的分母也要是n-1才能使得样本方差的计算结果无偏估计总体方差。

三、解释2:Bessel校正

同时,从数学上来看,为什么样本方差的无偏估计量要可以通过分母为(s^2)*(n-1)/n来计算呢?

这个问题的答案是Bessel校正。当我们计算样本方差时,我们是将每个样本值与样本平均值的差值的平方相加,然后除以样本容量得到的。在计算过程中,由于是使用样本平均值,因此我们已经用去了一个自由度。再除以样本容量的时候,我们把这个自由度又拿出来了。但是,这样做会导致样本方差的估计值偏小。为了抵消这种偏差,我们需要对样本方差进行Bessel校正,即将分母改为(n-1)。

四、解释3:方差的定义方式不同

同时,我们也可以从方差的定义方式上解释为什么样本方差要使用(n-1)作为分母。方差的定义可以表示为下面的公式:

σ^2 = Σ(xi - μ)^2 / N

其中,N是总体的容量,μ是总体的均值,xi是第i个样本的取值。这个公式中,分母是N而不是(N-1)。这是因为总体中没有需要估计的参数,而样本中有需要估计的参数。因此总体方差的计算中不需要使用Bessel校正,而样本方差的计算中需要使用Bessel校正。

五、完整代码示例

#include <iostream>
#include <vector>
#include <numeric>
#include <cmath>

using namespace std;

double sample_variance(const vector<double>& x)
{
    double sum = accumulate(x.begin(), x.end(), 0.0);
    double mean = sum / x.size();
    double var = 0.0;
    for (auto i : x)
        var += (i - mean) * (i - mean);
    var /= (x.size() - 1);
    return var;
}

int main()
{
    vector<double> x = { 3, 2, 4, 1, 5 };
    double var = sample_variance(x);
    cout << "Sample variance: " << var << endl;
    return 0;
}