完全独立随机设计的两样本均数的比较,其目的是检验两样本所来自总体的均数是否相等。例如两个不同版本的测试程序对产品温度控制是否一样;两种不同的加工方法加工出的工件长度是否一样等。
#_*_coding:utf-8_*_
#本节内容学习用python统计包scipy自动计算双独立假设检验:
'''
双独立(independent)样本检验(ttest_ind)'''
import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 雅黑字体
plt.rcParams['axes.unicode_minus']=False
#T检验是假设检验的一种,又叫student t检验(Student’s t test),主要用于样本含量较小(例如n<30),总体标准差σ未知的正态分布资料。A=[1.629,1.628,1.63,1.632,1.633,1.634,1.635,1.635,1.6335,1.6351,1.636,1.6362,1.637,1.638,1.639,1.72,1.721,1.731]
B=[1.628,1.6289,1.631,1.63,1.634,1.634,1.635,1.635,1.6335,1.6351,1.636,1.6362,1.637,1.637,1.636,1.73]
dataA=np.array(A)
dataB=np.array(B)
A_mean=dataA.mean()B_mean=dataB.mean()
print('A版本的平均值=',A_mean)
print('B版本的平均值=',B_mean)'''
这里要区别:数据集的标准差,和样本标准差
数据集的标准差公式除以的是n,样本标准差公式除以的是n-1。
样本标准差,用途是用样本标准差估计出总体标准差pandas计算的标准差,默认除以的是n-1,也就是计算出的是样本标准差''''''#样本标准差a_std=dataA.std()
b_std=dataB.std()print('A版本样本标准差=',a_std)
print('B版本样本标准差=',b_std)
#零假设:A版本和B版本没有差别,也就是A版平均值=B版本平均值
#备选假设:A版本和B版本有差别,也就是A版本平均值不等于B版本平均值
#因为有2组样本,是不同的人,选择双独立样本检验.两样本均值比较,双尾检验.sns.distplot(dataA)
plt.title('A版本数据集分布')
plt.show()
sns.distplot(dataB)
plt.title('B版本数据集分布')
plt.show()
'''
Scipy的双独立样本t检验不能返回自由度,对于后面计算置信区间不方便。所以我们使用另一个统计包(statsmodels)
'''
'''
ttest_ind:独立检验双样本t检验,usevar='unequal'两个总体方差不一样
返回的第1个值t是假设检验计算出的t值,
第2个p_two是双尾检验的p值
第3个DF是独立双样本的自由度'''import statsmodels.stats.weightstats as stt,p_two,df=st.ttest_ind(dataA,dataB, usevar='unequal')print('t=',t,'p_twotail=',p_two,'df=',df)
#判断标准(显著水平)使用alpha=0.05
alpha=0.05
#做出结论
if (p_two<alpha/2):
print('拒绝零假设,A和B版本有差异')
else:
print('接受零假设,A和B没有差别')
程序运行结果为:
A版本的平均值= 1.6490444444444445
B版本的平均值= 1.63979375
A版本样本标准差= 0.03370152027929608
B版本样本标准差= 0.023452384440339966
t= 0.9093861632613868 p_twotail= 0.37029967620807425 df= 30.402183227443754
接受零假设,A和B没有差别
由于P>0.05; A版本和B版本没有区别。