導(dǎo)言
本文使用Python構(gòu)造經(jīng)驗累積分布函數(shù) (Empirical Cumulative Distribution Function),驗證格利文科定理(Glivenko–Cantelli Theorem):從總體中抽取容量為n的樣本乘碑,樣本容量n越大扇雕,樣本的分布越趨近于總體分布。
理論
對于一個樣本序列 募书,經(jīng)驗累積分布函數(shù) (Empirical Cumulative Distribution Function)可被定義為
其中 是一個指示函數(shù)绪囱,如果,指示函數(shù)取值為1莹捡,否則取值為0鬼吵,因此 能反映在樣本中小于 的元素數(shù)量占比。
根據(jù)格利文科定理(Glivenko–Cantelli Theorem)篮赢,如果一個樣本滿足獨立同分布(IID)齿椅,那么其經(jīng)驗累積分布函數(shù) 會趨近于真實的累積分布函數(shù) 。
代碼實現(xiàn)
首先定義一個類启泣,命名為ECDF:
class ECDF:
def __init__(self, observations):
# 初始化函數(shù)涣脚,儲存所有樣本
self.observations = observations
def __call__(self, x):
counter = 0
for obs in self.observations:
# 如果樣本中觀測值小于或者等于x,則記為1
if obs <= x:
counter += 1
return counter / len(self.observations)
我們采用均勻分布(Uniform)進(jìn)行驗證寥茫,導(dǎo)入uniform
包遣蚀,然后進(jìn)行兩輪抽樣,第一輪抽取10次坠敷,第二輪抽取1000次妙同,比較輸出的結(jié)果。
from random import uniform
samples = [uniform(0, 1) for i in range(10)]
# 在0到1之間的均勻分布中抽取10次
F = ECDF(samples)
print(F(0.5)) # 當(dāng)x = 0.5膝迎,計算ecdf的值
F.observations = [uniform(0, 1) for i in range(1000)]
# 在0到1之間的均勻分布中抽取1000次
print(F(0.5))
輸出結(jié)果為:
0.2
0.521
而我們知道粥帚,在真實的0到1均勻分布中, 時限次,芒涡,從模擬結(jié)果可以看出柴灯,樣本量越大,最終的經(jīng)驗累積分布函數(shù)值也越接近于真實的累積分布函數(shù)值费尽,因此格利文科定理得以證明赠群。