標准誤(Standard Error)


python金融風控評分卡模型和數據分析微專業課(博主親自錄制視頻):http://dwz.date/b9vv

 

1.標准誤概念

標准誤是數據統計的重點概念,且難以理解。百度上文章缺乏詳細描述的文章。所以寫下此文讓讀者能夠徹徹底底了解標准誤概念。

標准誤全稱:樣本均值的標准誤(Standard Error for the Sample Mean),顧名思義,標准誤是用於衡量樣本均值和總體均值的差距。

2.標准誤意義:

用於衡量樣本均值和總體均值的差距有多大?

標准誤越小----樣本均值和總體均值差距越小

標准誤越大----樣本均值和總體均值差距越大

標准誤用於預測樣本數據准確性 ,標准誤越小,樣本均值和總體均值差距越小,樣本數據越能代表總體數據。

3.標准誤與標准差區別:

對一個總體多次抽樣,每次樣本大小都為n,那么每個樣本都有自己的平均值,這些平均值的標准差叫做標准誤。

標准差是單次抽樣得到的,用單次抽樣得到的標准差可以估計多次抽樣才能得到的標准誤差

標准差表示數據離散程度:

標准差越大,分布越廣,集中程度越差,均值代表性越差

標准差越小,分布集中在平均值附近,均值代表性更好

 

標准差與標准誤不同應用范圍:
標准差:(圖左)在正負兩個標准差(95%概率下),Jack消耗時間在68-132秒之間。
標准誤:(圖右)在正負兩個標准誤,Jack消耗平均時間大約在95-105秒之間。

 

4.標准誤計算例子

什么是真實的標准誤?舉個例子,對一個總體12次抽樣,生成12個樣本,每個樣本大小都為5。那么每個樣本都有自己的平均值,這些平均值的標准差叫做標准誤差。這里就是對表格最后一行數組計算標准差(100,101,99,114,103.....93),最后算出來標准誤結果為6.33。

 

但是為了得到標准誤,我們不可能做很多次科學實驗。實際上我們可以做一次樣本實驗,然后采用估算公式:

 

 

如下圖,我們用第一組樣本估算真實標准誤,此樣本標准差除以根號n,結果為7.16, 然后把7.16約等為真實的標准誤6.33。

所以標准誤也是另外一種形式的標准差,標准誤和總體標准差既有相似處,又有區別。標准誤是一個比較難得概念,讀者一次不能很好理解,如果反復看此文章,然后自己動手程序模擬,就會增強直觀印象,加深理解。

 

所有的隨機樣本中,如果數量相同,它們的標准誤默認為近似相同(非真正相同)

 

5.標准誤的應用
我們有兩組數據,一組觀看了指導視頻,一組沒有觀看指導視頻,比較兩組數據在得分方面有無顯著差異?

隨着樣本量不同,我們得到的結果不同。圖左,兩組數據沒有區別,圖中兩組數據可能有區別,可能沒有;圖右兩組數據有區別
樣本量為3時,看視頻組的2*標准誤為15,沒看視頻的2*標准誤為13。

樣本量小時,標准誤很大,樣本均值和總體均值差異很大,樣本數據的代表性很差。

 

樣本量為5時,看視頻組的2*標准誤為9,沒看視頻的2*標准誤為10。

樣本量增大后,標准誤變小。

 

樣本量為10時,看視頻組的2*標准誤為7,沒看視頻的2*標准誤為6。
樣本量增大后,標准誤再次變小

 

隨着樣本量不同,我們得到的結果不同。下面的圖左(樣本量為3),兩組數據沒有區別,圖中(樣本量為5)兩組數據可能有區別,可能沒有;圖右(樣本量為10)兩組數據有區別
實際上,眾多畢業論文和專業期刊的統計分析都是錯的,雖有華麗的可視化圖表,但新手很容易因樣本量太小得到錯誤結果。

 

6.蒙特卡洛模擬

蒙特卡洛驗證,對一組樣本進行標准誤評估,看公式SE = s/√(n)是否准確

結果表明SE = s/√(n)公式得到的標准誤和真實標准誤非常接近

 

樣本值100,標准誤很小,大約0.1

 

樣本值10,標准誤增大,大約0.33

 

樣本值5,標准誤再次增大,大約0.45

 

源代碼如下

問題反饋郵箱231469242@qq.com

微信公眾號:pythonEducation

# -*- coding: utf-8 -*-

import random,math

import numpy as np

n=1000

normal_population=list(np.random.normal(size=n))

mean_population=np.mean(normal_population)

#總體標准差

sigma=np.std(normal_population,ddof=0)

#存放多個隨機樣本

list_samples=[]

#多個隨機樣本的平均數

list_samplesMean=[]

#求單個樣本估算的標准誤

def Standard_error(sample):

    std=np.std(sample,ddof=0)

    standard_error=std/math.sqrt(len(sample))

    return standard_error

#求真實標准誤

def Standard_error_real():

    for i in range(100):

        sample=random.sample(normal_population,100)

        list_samples.append(sample)

    list_samplesMean=[np.mean(i) for i in list_samples]

    standard_error_real=np.std(list_samplesMean,ddof=0)

    return standard_error_real 

#plt.hist(normal_values)

#真實標准誤

standard_error_real=Standard_error_real()

print(standard_error_real)

#隨機抽樣

print(Standard_error(list_samples[0]))

print(Standard_error(list_samples[1]))

print(Standard_error(list_samples[2]))

End.

 

python機器學習生物信息學系列課(博主錄制): http://dwz.date/b9vw

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM