两个总体比例之差的分布(来自Python的实验)

两个样本比例之差是什么分布?当大样本的情况下,它可由正态分布来近似,这一结论对于置信区间的计算,以及总体比例差的假设检验非常重要,这里要给出的并不是理论推导,而是通过实验的方式给出样本比例之差的分布。实验步骤如下:

1 构造两个总体

import pandas as pd
import numpy as np
num=50000
#np.repeat("class1",num)
#np.random.choice([0,1], size=num, replace=True, p=[0.7,0.3])
class1=np.array([np.repeat("class1",num),np.random.choice(['M','F'], size=num, replace=True, p=[0.8,0.2])])
class2=np.array([np.repeat("class2",num),np.random.choice(['M','F'], size=num, replace=True, p=[0.6,0.4])])
classp=np.hstack((class1,class2)) 
data=pd.DataFrame(classp).T
data.columns=["class","MF"]
data.head()
image.png

2 计算总体比例并画图

mrate1=len(data[(data["class"]=='class1') & (data["MF"]=='M')])/len(data[(data["class"]=='class1')])
mrate2=len(data[(data["class"]=='class2') & (data["MF"]=='M')])/len(data[(data["class"]=='class2')])
print("class1的男性总体比例:",mrate1)
print("class2的男性总体比例:",mrate2)
from pyecharts import Bar
bar =Bar("两个班级的男生比例")
bar.add("总体比例",["class1","class2"], [0.8,0.6])
bar.render()
bar
image.png

3 进行3000次抽样,样本量为1000

from tqdm import tqdm
num_choice=3000
sa_size=1000
ratedata=pd.DataFrame(columns=('rate1','rate2','rate_diff'))
for i in tqdm(range(num_choice)):
    np.random.seed(i+1)
    rate1=np.sum(np.random.choice(data[(data["class"]=='class1')].MF, size=sa_size, replace=True)=="M")/sa_size
    rate2=np.sum(np.random.choice(data[(data["class"]=='class2')].MF, size=sa_size, replace=True)=="M")/sa_size
    rate_diff=rate1-rate2
    ratedata=ratedata.append(pd.DataFrame({'rate1':[rate1],'rate2':[rate2],'rate_diff':[rate_diff]}),ignore_index=True)
ratedata.head()
image.png

4 画出每个样本比例,及比例差的分布图

import matplotlib.pyplot as plt #加载可视化工具
import seaborn as sns #加载可视化工具



plt.figure()
fig = plt.figure(figsize=(16, 8))
sns1=sns.distplot(ratedata["rate1"],bins=20,kde=True,label="Distribution of Sample Proportion for Population 1") #绘制直方图,20个分箱(直方),kde表示需要密度曲线
sns2=sns.distplot(ratedata["rate2"],bins=20,kde=True,label="Distribution of Sample Proportion for Population 2") 
sns3=sns.distplot(ratedata["rate_diff"],bins=20,kde=True,label="Distribution of Sample Proportion difference") 
plt.legend()
plt.show()

image.png

图中绿色的就是样本比例差的分布了,样本量越大,越接近于正态分布,大家可以修改样本量并画图试试。

动动手,让统计学变得更有趣!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容