教科書中,關于樣本方差的分布往往是這樣描述的
這里的n-1,就是自由度股缸,表示總體方差幢炸。這一結論的證明并不難,直接從卡方分布的定義著手就好保檐。
我們這里要做的耕蝉,是從實驗著手,運用Python開展抽樣實驗夜只,并直觀的感受這一結論垒在。
1 虛擬一個總體服從正態(tài)分布
import matplotlib.pyplot as plt #加載可視化工具
import seaborn as sns #加載可視化工具
import numpy as np #加載numpy工具
import pandas as pd
np.random.seed(1234)# 設置隨機數種子,保證每次的隨機數相同
pdata=4+3*np.random.randn(50000) #生成正態(tài)分布的50000個數據
sns.distplot(pdata,bins=50,kde=True) #繪制直方圖扔亥,50個分箱(直方)
plt.title("Population")
plt.show()
pdata
總體分布
2 分別按照樣本量50和100场躯,進行5000次抽樣,并計算
from tqdm import tqdm
import statistics
loop_var=pd.DataFrame(columns=('chi49', 'chi99'))
loop=5000
n_size=[50,100]
for loop in tqdm(range(loop)):
np.random.seed(loop+1)
sample1 = np.random.choice(pdata, size=n_size[0])
chi49 = statistics.variance(sample1)*(n_size[0]-1)/9
np.random.seed(loop+1+5000)
sample2 = np.random.choice(pdata, size=n_size[1])
chi99 = statistics.variance(sample2)*(n_size[1]-1)/9
loop_var=loop_var.append(pd.DataFrame({'chi49':[chi49],'chi99':[chi99]}),ignore_index=True)
loop_var.head()
抽樣并計算結果
3 分別畫出樣本量50和100對應的
的分布
import matplotlib.pyplot as plt #加載可視化工具
import seaborn as sns #加載可視化工具
plt.figure()
fig = plt.figure(figsize=(10,4))
sns1=sns.distplot(loop_var["chi49"],bins=30,kde=True,label="Chi-square distribution (df=49)") #繪制直方圖旅挤,30個分箱(直方)踢关,kde表示需要密度曲線
sns2=sns.distplot(loop_var["chi99"],bins=30,kde=True,label="Chi-square distribution (df=99)")
plt.xlabel("X")
plt.legend()
plt.show()
兩個卡方分布