python中的T检验

在python中,检验常常是调用scipy.stats进行计算
(官方文档:https://docs.scipy.org/doc/scipy/reference/stats.html#module-scipy.stats)

T检验也是分为三大块:

  1. 单样本T检验
  2. 独立样本T检验
  3. 配对样本T检验
1、先说单样本T检验,我们先通过numpy生成一些正态分布的数据,然后看下单样本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,有显著差异。

2、对于独立样本T检验,并不能直接检验。首先要保证方差齐性,即要先做方差齐性检验,常见的方差齐性检验有levene与bartlett。
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值相同的一对数据有显著差异。

对于方差不齐的数据,需要做T’检验(近似T检验)

实际上只需要将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)
3、配对样本T检验

首先你得确认你的两个样本是相关样本,然后如下检验即可:

stats.ttest_rel(data1, data2)

你可能感兴趣的:(生物信息)