python 检验两个样本均值是否相同_一文秒懂方差齐性检验

案例:针对同一系列的教材,学校设计了两种不同的自助学习系统,现采集每种教学系统下学生完成全部教程所需要的时间。(案例摘自《商务与经济统计学》)
1、利用描述统计学方法汇总每种学习系统下学生学完教程的时间数据。根据样本资料,你能观察到有何相似之处和差异?
2、评价两种方法总体均值之间的差异,讨论你的结论? 3、计算每一种系统的标准差与方差,进行两种系统总体方差相等的假设检验,讨论你的结论。
4、关于两种方法之间的差异,你能得到什么结论?你有何建议?请作出解释。
5、对于将来要使用那种系统,在作出最终决定之前你是否还需要其他数据或者检验。

本文主要围绕解决第三个问题来讲解方差齐性检验。

1、方差齐性检验描述

python 检验两个样本均值是否相同_一文秒懂方差齐性检验_第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值小于显著性水平,所以拒绝原假设。最终结论认为两总体方差不等。

你可能感兴趣的:(python,检验两个样本均值是否相同)