为什么样本标准差分母为n-1

我们知道总体标准差(σ)是按照下面的公式来计算的:

为什么样本标准差分母为n-1_第1张图片

但是在真实世界中,找到一个总体的标准差是不现实的。大多数情况下,我们都是通过计算样本标准差(s)来估计总体标准差(σ)的。但是s的计算公式是这样的:

为什么样本标准差分母为n-1_第2张图片

分母为什么要(n-1)呢,而不是n?

维基百科给出的解释有点费解:


看过很多统计学的教程和问答,一个比较利于理解的通俗的解释是:__
分母为n的话算出来的s会低估总体标准差(σ)。__

下面用MATLAB编程来证明这一点。大体是,我们随机生成1000个整数作为总体,然后从这个总体里抽取100个数,作为1个sample,共抽取1000个sample。然后我们用两种方式计算一下这个sample的标准差,即分母为n-1或者n,然后我们数一下这两种计算方式得到的s低于总体标准差(σ)的个数,这
里我们统计1000次的结果,代码在最后面。结果如下图,果不其然,分母为n的时候会较多的低估总体标准差(1000个sample平均有550个低估了总体标准差),而分母为(n-1)的时候基本大差不差(1000个sample基本有一半低估,一半高估)。

为什么样本标准差分母为n-1_第3张图片

为什么样本标准差分母为n-1_第4张图片

代码如下,可直接copy运行:

%% 总体(1000个1-100之间的整数),总体均值和总体标准差
population = [1:1000]
mean_population = mean(population);
sigma_population =sqrt(sum((population-mean_population).^2)/1000);

%% 统计1000次结果,每次1000个sample,看有多少次标准差低估总体标准差的
No_underestimate = [];
No_underestimate_real = [];
for m = 1:1000
    
    sigma_sample = [];
    real_sigma_sample = [];
    %随机取1000次sample
    for i = 1:1000

        %从population里随机选取100个数作为sample

        idx_sample = randi(1000,100,1);
        sample = population(idx_sample);

        
        %样本的均值和“标准差(分母不减一)”
        mean_sample = mean(sample);
        sigma_sample = [sigma_sample sqrt(sum((sample-mean_sample).^2)/length(sample))];

        %样本的标准差,分母减一
        real_sigma_sample = [real_sigma_sample sqrt(sum((sample-mean_sample).^2)/(length(sample)-1))];

    end
      %分母不减一求样本标准差时候低估总体标准差的个数
      No_underestimate =[No_underestimate length(sigma_sample(sigma_sample<= sigma_population))];
      %分母减一求样本标准差时候低估总体标准差的个数
      No_underestimate_real = [No_underestimate_real length(real_sigma_sample(real_sigma_sample<= sigma_population))];
end
%绘图
figure(1)
plot(No_underestimate)
title('分母不减一求样本标准差')
figure(2)
plot(No_underestimate_real)
title('实际求样本标准差(分母减一)')

你可能感兴趣的:(为什么样本标准差分母为n-1)