模拟结果图
按照两个样本方差比分布的理论推导可以得到
这里为样本方差,
为总体方差。
这里将对这一结论进行基于Python的计算机模拟。代码如下。
1 生成两个总体,总体1服从正态分布
,总体2服从正态分布
。
import matplotlib.pyplot as plt #加载可视化工具
import seaborn as sns #加载可视化工具
import numpy as np #加载numpy工具
import pandas as pd
np.random.seed(1234)# 设置随机数种子,保证每次的随机数相同
pdata1=4+3*np.random.randn(50000) #生成服从标准正态分布的50000个数据
np.random.seed(2345)
pdata2=7+2*np.random.randn(50000) #生成服从标准正态分布的50000个数据
sns.distplot(pdata1,bins=50,kde=True,label="$N(4,3^2)$") #绘制直方图,50个分箱(直方),kde表示需要密度曲线
sns.distplot(pdata2,bins=50,kde=True,label="$N(7,2^2)$") #绘制直方图,50个分箱(直方),kde表示需要密度曲线
plt.title("Population")
plt.legend()
plt.show()
总体分布
2 随机抽样5000次,样本量分别为50和40,得到两个样本方差
的分布,以及
的分布
from tqdm import tqdm
import statistics
loop_var=pd.DataFrame(columns=('vars1', 'vars2','vars_ratio'))
loop=5000
n_size=[50,40]
for loop in tqdm(range(loop)):
np.random.seed(loop+1)
sample1 = np.random.choice(pdata1, size=n_size[0])
vars1 = statistics.variance(sample1)
np.random.seed(loop+1+5000)
sample2 = np.random.choice(pdata2, size=n_size[1])
vars2 = statistics.variance(sample2)
vars_ratio=(vars1/9)/(vars2/4)
loop_var=loop_var.append(pd.DataFrame({'vars1':[vars1],'vars2':[vars2],'vars_ratio':[vars_ratio]}),ignore_index=True)
loop_var.head()
3 画出两个样本方差
的分布图,以及
的分布图
import matplotlib.pyplot as plt #加载可视化工具
import seaborn as sns #加载可视化工具
plt.figure()
fig = plt.figure(figsize=(8,5))
sns1=sns.distplot(loop_var["vars1"],bins=30,kde=True,label="Distribution of sample variance 1") #绘制直方图,30个分箱(直方),kde表示需要密度曲线
sns2=sns.distplot(loop_var["vars2"],bins=30,kde=True,label="Distribution of sample variance 2")
sns3=sns.distplot(loop_var["vars_ratio"],bins=30,kde=True,label="Distribution of sample variance ratio")
#plt.xlabel("X")
plt.legend()
plt.show()
抽样分布