1. 程式人生 > >關於樣本標準差(SD)與樣本標準誤差(SE)

關於樣本標準差(SD)與樣本標準誤差(SE)

許多paper裡經常能看到Mean±SD(SE)這樣的表達方式,或者在圖表裡用SD或者SE來表示error bar,用SD的居多,但是也有不少用SE的。初學者很容易混淆SD(standard deviation)和SE(standard error)。

SD

SD我們都很清楚,是表達資料的離散程度,然後實際應用中很多資料具有近似正態分佈的概率分佈,有了SD,我們就可以大致估計資料的範圍,譬如經典的"68-95-99.7法則",即約 68% 數值分佈在距離平均值有 1 個標準差之內的範圍,約 95% 數值分佈在距離平均值有 2 個標準差之內的範圍,以及約 99.7% 數值分佈在距離平均值有 3 個標準差之內的範圍。如下圖:

4025027-bc80f2798e909707.png

SE

SE是什麼呢,一般來說,自然界裡很難獲得總體資料,我們只能用樣本(無論是各種實驗還是社會調查抽樣)去近似估計總體,這樣問題就來了,估計的準不準(平均值)?
我們可以理論上這樣做,既然不能獲得總體,我們可以儘可能多(無限)的從標準差為σ的總體資料裡抽取大小為 n 的樣本,每個樣本各有一個平均值,所有樣本平均值的標準差就可以用"68-95-99.7法則"評估準不準了(這就是所謂的置信區間),樣本平均值的標準差可以被證明如下公式表達:

4025027-ed15b20039a520c0.png

但由於通常σ為未知,此時可以用研究中取得樣本的標準差 (S) 來估計:

4025027-1d8fbcd68c14b80c.png
這就是SE的來源,即樣本平均值的SD,我們用MATLAB程式設計演示下。

MATLAB演示

以擲硬幣為例,擲100次,統計正面(1)的次數,共統計1000次作為一個sample,然後我們這樣採1000個sample(程式不怕累的)。
先貼結果,程式碼放後面。結果如下,我們能看到樣本平均值的SD基本等於樣本的SE!

4025027-39f61a0cfaf72273.png

完整程式碼如下:

%1000個樣本(sample)
sample_mean = []

for m=1:1000
    
    %擲硬幣100次,統計正面的次數,共統計1000次作為一個sample
    sample = []
    for i = 1:1000
        box = randi([0,1],100,1);
        sample = [sample length(box(box==1))];    
    end
    sample_mean = [sample_mean mean(sample)];
end

%sample的標準差和標準誤
SD_sample = std(sample)
SE_sample = SD_sample/sqrt(1000)
%sample平均值的標準差
SD_sample_mean = std(sample_mean)

結論

1、標準差(SD)更能反應離散程度。

paper裡需要Mean±SD這個資訊,就是便於讀者進行判斷資料的離散性,e.g.,一般我們把偏離平均值2或3個SD的值作為outlier(i.e., 異常值)。

2、標準誤則比較適合用於評估精確性或準確性的問題。

paper里根據需要也可以提供Mean±SE這個資訊,就是便於讀者進行判斷資料的不確定性,e.g.,95%置信區間是用的Mean ± 2*SE。

無論用哪種表達方式,一定要注意標明,特別是error bar,好的paper都會說明這是什麼的。