python进行t检验示例

  • Post author:
  • Post category:python


t检验主要是针对正态总体均值的假设检验,即检验样本的均值与某个值的差异,或者两个样本的均值是否有差异等。其不需要事先知道总体的方差,并且在少量样本情况下也可以进行检验。python进行t检验使用scipy包的stats模块

一、单样本t检验

示例:已知某工厂生产的一种点火器平均寿命大于1200次为合格产品,现在质检部随机抽取了20个点火器进行试验,结果寿命分别为(单位:次):

809, 1250, 689, 1541, 995, 1234, 1024, 920, 777, 2510, 2301, 540, 850, 895, 1024, 1000, 1025, 863, 875, 1105

单样本t检验用stats.ttest_1samp函数,如下:

from scipy import stats
import numpy as np

#单样本t检验
sample=[809, 1250, 689, 1541, 995, 1234, 1024, 920, 777, 2510,
        2301, 540, 850, 895, 1024, 1000, 1025, 863, 875, 1105]
sample = np.asarray(sample)
m = np.mean(sample)
print("样本均值:",m)
#单样本检验用stats.ttest_1samp
r = stats.ttest_1samp(sample, 1200, axis=0)
print("statistic:", r.__getattribute__("statistic"))
print("pvalue:", r.__getattribute__("pvalue"))

结果:

样本均值: 1111.35

statistic: -0.8043067483882222

pvalue: 0.4311691484589055


在这里统计量statistic<0,说明样本均值小于指定均值1200,实际上是1111.35。但我们并不能因为1111.35<1200而去认定点火器平均寿命低于1200。我们应看pvalue: 0.4311691484589055,这里说明在这个样本下,我们有0.4311691484589055>0.05的概率认为产品的寿命均值为1200。同样我们不能拒绝产品的寿命均值>1200。也就是我们接受产品是合格的。

二、两个独立样本t检验

示例:现市场上有2种蓄电池,为研究哪种蓄电池比较好,分别抽取两种蓄电池若干件,测试其续航时间,结果如下(单位:h):

A型蓄电池 5.5     5.6     6.3     4.6     5.3     5.0     6.2     5.8     5.1     5.2     5.9
B型蓄电池 3.8     4.3     4.2     4.0     4.9     4.5     5.2     4.8     4.5     3.9     3.7     4.6

根据抽样结果分析两种蓄电池续航是否有显著差异(alpha=0.1)。

独立2个样本t检验用stats.ttest_ind函数,如下:

from scipy import stats
import numpy as np

#独立2个样本t检验
sample1=[5.5, 5.6, 6.3, 4.6, 5.3, 5.0, 6.2, 5.8, 5.1, 5.2, 5.9]
sample2=[3.8, 4.3, 4.2, 4.0, 4.9, 4.5, 5.2, 4.8, 4.5, 3.9, 3.7, 4.6]
sample1 = np.asarray(sample1)
sample2 = np.asarray(sample2)
r = stats.ttest_ind(sample1, sample2)
print("statistic:", r.__getattribute__("statistic"))
print("pvalue:", r.__getattribute__("pvalue"))

结果:

statistic: 5.484377451921326

pvalue: 1.9279192737974777e-05


由statistic=5.484377451921326大于0可以知道在样本统计上A型的均值比B型的大,事实上样本A均值为5.5,样本B的均值为4.37。另外pvalue=1.9279192737974777e-05远小于0.1,由此我们拒绝A的均值与B的均值相等,也就是说A型蓄电池的续航均值明显比B型蓄电池好,即A型蓄电池比B型蓄电池要好。

这里我们假设两个总体有方差齐性,当不确定两总体方差是否相等时,可以先利用

levene检验

,检验两总体是否具有方差齐性。

r = stats.levene(sample1,sample2)
print(r)

结果为LeveneResult(statistic=0.09936227113762626, pvalue=0.7557072345826116),pvalue>0.05说明具有方差齐性,假如不具有方差齐性,进行t检验时需要加上参数

equal_val

并设定为False。如下:

stats.ttest_ind(sample1, sample2, equal_var=False)

三、成对样本t检验

成对样本t检验,是针对成对的数据做的检验,比如比较两种测量方法的差异,每对数据是针对同一个对象的测量。

示例:现有2种血压计,为研究其测量性能是否有显著差异,分别使用这两种血压计测量15个人的血压值,结果如下:

受测人编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
血压计A 68 85 123 74 88 128 63 115 110 93 99 75 89 68 140
血压计B 60 88 132 70 95 115 74 115 121 86 96 71 96 70 143

这里数据都是成对的,使用stats.ttest_rel进行成对数据的t检验。

from scipy import stats
import numpy as np

#成对样本t检验
sample1=[68, 85, 123, 74, 88, 128, 63, 115, 110, 93, 99, 75, 89, 68, 140]
sample2=[60, 88, 132, 70, 95, 115, 74, 115, 121, 86, 96, 71, 96, 70, 143]
sample1 = np.asarray(sample1)
sample2 = np.asarray(sample2)
r = stats.ttest_rel(sample1,sample2)
print("statistic:", r.__getattribute__("statistic"))
print("pvalue:", r.__getattribute__("pvalue"))

结果:

statistic: -0.492910604649229

pvalue: 0.6297167086230713


从结果上看,statistic<0,说明在样本均值上看血压计A的测量结果比血压计B略低。但pvalue=0.6297167086230713远大于0.05,我们并不能拒绝两种血压计测量均值相等,即我们认为2种血压计的测量性能并没有显著差异。


author:

蓝何忠




email:

lanhezhong@163.com



版权声明:本文为lanhezhong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。