用法
当两总体方差相等时,即具有方差齐性,可以直接检验。
stats.ttest_ind(data1,data2)
当不确定两总体方差是否相等时,应先利用levene检验,检验两总体是否具有方差齐性。如果返回结果的p值远大于0.05,那么我们认为两总体具有方差齐性。
stats.levene(data1,data2)
如果两总体不具有方差齐性,需要加上参数equal_val并设定为False。
stats.ttest_ind(data1,data2,equal_var=False)
举例
例如,我想检验A公司销售额的均值和B公司销售额的均值是否存在差异。
使用stats.levene检验方差是否相等,再使用stats.ttest_ind进行独立样本t检验。
A = stats.norm.rvs(loc=1, scale=1, size=(100)) # 生成A公司的销售额B = stats.norm.rvs(loc=3, scale=1, size=(100)) # 生成B公司的销售额stats.levene(A, B) # 进行levene检验>> out:LeveneResult(statistic=0.8054648213132949, pvalue=0.37055445629183437)
得到的p值大于0.05,说明满足方差相等。使用ttest_ind函数进行独立样本t检验,函数的最后一个参数为判断两个样本的方差是否相同,如果不同,设为False进行独立样本t检验。
stats.ttest_ind(A,B,equal_var=True)# 进行独立样本t检验>> out:Ttest_indResult(statistic=-15.25297417258199, pvalue=2.993305057567317e-35)
检验结果显示p远小于0.05,我们拒绝原假设,即认为A公司和B公司的销售额均值存在显著差异
实战
from pylab import *import scipy.stats as stats# 读取源数据X = np.load(r"X_epilepsy_data_16.npy", allow_pickle=True)y = np.load(r"label_y.npy", allow_pickle=True)# 读取两种的下标e = np.where(y=='epilepsy')[0].tolist()en = np.where(y=='no_epilepsy')[0].tolist()# 特征恢复原形状x = []for i in X: x.append(i.reshape(16,29))x = np.array(x)tt = stats.ttest_ind(x[e][:10000, :, 0], x[en][:10000, :, 0])print(tt.pvalue)
OUT
[3.16822131e-12 1.46901811e-10 2.47155694e-17 3.79753493e-01 3.29168780e-03 4.84374141e-07 2.02176194e-02 4.18225288e-07 1.23518287e-18 1.29679943e-07 1.11032534e-03 2.49217922e-07 5.37464553e-14 5.46798053e-07 3.81657716e-15 7.33245900e-03]
来源地址:https://blog.csdn.net/qq_37006625/article/details/127937428