在python中,检验常常是调用scipy.stats进行计算
(官方文档:https://docs.scipy.org/doc/scipy/reference/stats.html#module-scipy.stats)
T检验也是分为三大块:
from scipy import stats
import numpy as np
# MEAN值为0,STD值为1的100个数据
data = np.random.normal(loc=0, scale=1, size=100)
print(stats.ttest_1samp(data, 0))
print(stats.ttest_1samp(data, 1))
运行结果如下:
Ttest_1sampResult(statistic=-0.6863184685001024, pvalue=0.4941166024877156)
Ttest_1sampResult(statistic=-11.4099277678686, pvalue=9.488883450940155e-20)
数据均值与0的p值大于0.05,差异并不显著。数据均值与1的p值小于0.05,有显著差异。
data1 = np.random.normal(loc=0, scale=1, size=100)
data2 = np.random.normal(loc=1, scale=1, size=100)
print(stats.bartlett(data1, data2))
print(stats.levene(data1, data2))
----
# 运行结果
BartlettResult(statistic=0.008704833109176064, pvalue=0.9256654742880931)
LeveneResult(statistic=0.13570809823548327, pvalue=0.7129791411980255)
对于方差相同的两个数据p值较大,没有显著差异,可以直接使用独立样本T检验:
print(stats.ttest_ind(data1, data2))
----
# 运行结果
Ttest_indResult(statistic=-8.746508944155257, pvalue=9.52763110388834e-16)
生成的mean值不同,std值相同的一对数据有显著差异。
实际上只需要将ttest_ind函数添加上equal_var=False参数即可变成T’检验,这里设置成False则进行Welch’s t-test而不是Student’s t-test。
data1 = np.random.normal(loc=0, scale=1, size=100)
data2 = np.random.normal(loc=0, scale=2, size=100)
print(stats.bartlett(data1, data2))
print(stats.levene(data1, data2))
print(stats.ttest_ind(data1, data2, equal_var=False))
----
# 打印结果
BartlettResult(statistic=48.86476955207111, pvalue=2.7423257937347823e-12)
LeveneResult(statistic=39.662356907852576, pvalue=1.911540051191041e-09)
Ttest_indResult(statistic=-0.29010850521153353, pvalue=0.7721554482009412)
如上,方差有显著差异,但是数据差异不显著。对于方差不齐的数据如果我们直接进行T检验会导致p值偏小,更倾向显著结果:
data1 = np.random.normal(loc=0, scale=1, size=100)
data2 = np.random.normal(loc=0, scale=2, size=100)
print(stats.bartlett(data1, data2))
print(stats.levene(data1, data2))
print(stats.ttest_ind(data1, data2, equal_var=False))
print(stats.ttest_ind(data1, data2))
----
# 打印结果
BartlettResult(statistic=27.356888446192123, pvalue=1.6916077351795814e-07)
LeveneResult(statistic=23.457560950408478, pvalue=2.5699985012691294e-06)
Ttest_indResult(statistic=-1.1305945233688985, pvalue=0.2599245194382134)
Ttest_indResult(statistic=-1.1305945233688985, pvalue=0.25959342786776923)
首先你得确认你的两个样本是相关样本,然后如下检验即可:
stats.ttest_rel(data1, data2)