python进行 t 检验

这篇博客介绍了如何使用Python的scipy库进行t检验,包括单样本t检验、双样本独立t检验和成对样本t检验。通过示例展示了如何分析样本均值与指定值的差异以及不同样本之间的差异,并解释了p值的意义。在实际应用中,还提到了方差齐性的检验以及在方差不齐时的处理方法。
摘要由CSDN通过智能技术生成

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.43,这里说明在这个样本下,我们有0.43>0.05的概率认为产品的寿命均值为1200。

同样我们不能拒绝产品的寿命均值>1200。也就是我们接受产品是合格的。(即不能拒绝原假设——均值等于1200,如果p值小于0.05,则拒绝原假设——均值不等于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.48大于0可以知道在样本统计上A型的均值比B型的大,事实上样本A均值为5.5,样本B的均值为4.37。

另外pvalue=1.93e-05远小于0.1,由此我们拒绝A的均值与B的均值相等,也就是说A型蓄电池的续航均值明显比B型蓄电池好,即A型蓄电池比B型蓄电池要好。

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

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

结果为LeveneResult(statistic=0.0994, pvalue=0.76),pvalue>0.05说明具有方差齐性。

假如不具有方差齐性,进行t检验时需要加上参数equal_val并设定为False。如下:

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

三、成对样本t检验

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

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

这里数据都是成对的,使用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.63远大于0.05,我们并不能拒绝两种血压计测量均值相等,即我们认为2种血压计的测量性能并没有显著差异

参考:链接 

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清纯世纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值