参考资料:用python动手学统计学
本次内容主要讲样本均值的变异程度与样本容量的关系,接续python统计分析——样本均值的分布(上)-CSDN博客
1、导入库
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
from matplotlib import pyplot as plt
import seaborn as sns
2、设置总体
本次研究总体是均值为4,标准差为0.8的正态总体
pop=stats.norm(loc=4,scale=0.8) # stats.norm()表示正态分布,其中loc参数表示均值,scale参数表示标准差
3、定义一个函数,简化多次抽样和计算样本均值的步骤
def calc_sample_mean(size,n_trial):
# size表示样本容量,n_trial表示样本的数量
sample_mean_array=np.zeros(n_trial) # 创建一个数组用于存放样本均值
for i in range(0,n_trial):
sample=pop.rvs(size=size) # 抽样
sample_mean_array[i]=np.mean(sample) # 存放样本均值
return sample_mean_array # 返回一个有n_trial个样本均值的数组
4、制作小提琴图观察不同样本容量的样本均值分布情况
4.1 设置基础数据(不同样本容量的样本均值)
# 使用随机种子用于复现操作结果
np.random.seed(1)
# 样本容量为10的10000个样本均值
size_10=calc_sample_mean(size=10,n_trial=10000)
size_10_df=pd.DataFrame(
{
"sample_mean":size_10,
"size":np.tile('size 10',10000)
}
)
# 样本容量为20的10000个样本均值
size_20=calc_sample_mean(size=20,n_trial=10000)
size_20_df=pd.DataFrame(
{
"sample_mean":size_20,
"size":np.tile('size 20',10000)
}
)
# 样本容量为30的10000个样本均值
size_30=calc_sample_mean(size=30,n_trial=10000)
size_30_df=pd.DataFrame(
{
"sample_mean":size_30,
"size":np.tile('size 30',10000)
}
)
# 将3个df表拼接
sim_result=pd.concat(
[size_10_df,size_20_df,size_30_df]
)
4.2绘制小提琴图
小提图的参数介绍可参考:
python统计分析——小提琴图(sns.violinplot)-CSDN博客
python统计分析——小提琴图(plt.violinplot)_plt violin-CSDN博客
本次使用sns.violinplot()绘制小提琴图
sns.set()
sns.violinplot(x='size',y='sample_mean',data=sim_result)
效果图如下:
由此图,可以看出,随着样本容量的增加,样本均值的分布就约集中。
5、验证“随着样本容量的变大,样本均值分布的标准差越小”
5.1 准备样本容量数组
# 样本容量从2变化至100
size_array=np.arange(start=2,stop=102,step=2)
5.2 准备一个数组用于存放样本均值分布标准差
sample_mean_std_array=np.zeros(len(size_array))
5.3 获取样本均值分布的标准差数据
# 设置随机种子,用于复现结果
for i in range(0,len(size_array)):
sample_mean=calc_sample_mean(size=size_array[i],n_trial=100)
sample_mean_std_array[i]=np.std(sample_mean,ddof=1)
该段代码,用于设置每组样本容量的样本为100个。
样本标准差的函数np.std()可查阅:python统计分析——单变量描述统计-CSDN博客
5.4 绘制样本均值分布的标准差随样本容量变化的趋势图
# 绘制折线图,x轴为样本量,y轴为样本均值分布标准差
plt.plot(size_array,sample_mean_std_array)
plt.xlabel('sample size')
plt.ylabel('mean_std value')
6、标准误差(平均数标准误)
样本均值的标准差的理论值可以通过数学式计算得到。这个值叫标准误差(Standard Error,SE)。标准误差的计算公式为:。
7、对理论值(平均数标准误)和实际值(样本均值的标准差)
standard_error=0.8/np.sqrt(size_array)
plt.plot(size_array,sample_mean_std_array,linestyle='-') # 设置为实线
plt.plot(size_array,standard_error,linestyle=':') # 设置为虚线
plt.xlabel('sample_size')
plt.ylabel('mean_std value')