案例:针对同一系列的教材,学校设计了两种不同的自助学习系统,现采集每种教学系统下学生完成全部教程所需要的时间。(案例摘自《商务与经济统计学》)
1、利用描述统计学方法汇总每种学习系统下学生学完教程的时间数据。根据样本资料,你能观察到有何相似之处和差异?
2、评价两种方法总体均值之间的差异,讨论你的结论? 3、计算每一种系统的标准差与方差,进行两种系统总体方差相等的假设检验,讨论你的结论。
4、关于两种方法之间的差异,你能得到什么结论?你有何建议?请作出解释。
5、对于将来要使用那种系统,在作出最终决定之前你是否还需要其他数据或者检验。
本文主要围绕解决第三个问题来讲解方差齐性检验。
1、方差齐性检验描述
2、python实现方差齐性检验
方差齐性检验的检验统计量使用的是F分布,由于F分布对正态总体的假定是敏感的,只有当两个总体至少近似正态分布的假定是合理的,才能使用F分布。
本案例并未给出两总体的分布,所以我们需要先检验两总体是否服从正态分布。
2.1 检验两总体服从正态分布
data = pd.read_csv(r'/Training.csv')
data.columns=['旧系统完成时间','新系统完成时间']
- 数据标准化:这里使用sklearn中的StandardScaler来进行标准化
# 数据标准化
from sklearn.preprocessing import StandardScaler
data_new = data.copy()
scaler = StandardScaler()
scaler.fit(data_new)
data_ = scaler.transform(data_new)
data_new = pd.DataFrame(data_, columns=['旧系统完成时间', '新系统完成时间']2
- 对样本数据进行分箱,并计算期望频数和观测频数
由于正态分布是连续的,我们需要对时间值进行分箱来定义类别,在使用卡方检验的时候我们要求每一个类别的期望频数至少为5.所以在定义时间值的类别时,也必须使每一类的期望频数至少为5.
# 样本数据分箱
result1, binedge1 = pd.qcut(data_new['旧系统完成时间'], 8, retbins=True)
result2, binedge2 = pd.qcut(data_new['新系统完成时间'], 5, retbins=True)
def get_expect_frequency(binedge, mean, std):
'''
函数功能:计算期望频数
binedge:样本分箱使用的的节点序列
mean:样本均值
std:样本方差
返回值:返回期望频数序列
'''
p_array = []
bin_size = len(binedge)
for i in range(bin_size-1):
# 正态分布的累计分布函数计算概率值
p_array.append((stats.norm.cdf(
binedge[i+1], mean, std)-stats.norm.cdf(binedge[i], mean, std))*61)
print('%s,%s' % (len(p_array), bin_size))
return p_array
old_system_data = result1.value_counts().sort_index()
new_system_data = result2.value_counts().sort_index()
#获取样本均值和样本标准差
means=data_new.mean()
stds=data_new.std()
#返回期望频数
p1 = get_expect_frequency(binedge1,means[0],stds[0])
p2 = get_expect_frequency(binedge2,means[1],stds[1])
- 使用卡方分布构造检验统计量并计算p值
stats.chisquare(old_system_data.values,p1)
Power_divergenceResult(statistic=7.890003188867656, pvalue=0.34239325885492095)
stats.chisquare(new_system_data.values,p2)
Power_divergenceResult(statistic=4.416939724429952, pvalue=0.3525102013466619)
比较p值和显著性水平
,由与p值大于显著性水平,所以我们不能拒绝原假设,这里我们暂且不考虑发生第二类错误的场景,认为两总体均服从正态分布。
综合以上,两总体均服从正态分布,下面开始方差齐性检验:
2.2 方差齐性检验
- 确立原假设和备择假设:
:旧教学系统和新教学系统的方差相等
:旧教学系统和新教学系统的方差不等
- 在原假设为真的前提下构造F检验统计量:
,根据F值计算p值
# 计算F统计量的值
F = data.loc[:, '旧系统完成时间'].var()/data.loc[:, '新系统完成时间'].var()
# 计算p值:使用cdf函数,传入参数,f统计量的值,分子自由度,分母自由度
pvalue = 1-stats.f.cdf(F, 60, 60)
pvalue=0.00028901576919825955
- p值和显著性水平0.05比较,p值小于显著性水平,所以拒绝原假设。最终结论认为两总体方差不等。