t检验一般分为三种,分别是单样本t检验、双样本t检验和配对样本t检验。本文基于python的scipy.stats函数对每种t检验进行了介绍和实验。python
不管哪一种t检验,都有如下的基本前提条件:函数
步骤:3d
应用场景:对某个样本的均值进行检验,比较是否和整体的均值(本身定)是否存在差别。code
原假设和备择假设:orm
例如,我获取了50个中国人的身高(随机生成均值为1.5m的50个数据),想比较当前样本的平均身高和中国人的平均身高(1.7m)是否存在差别。按道理来讲应该是存在差别的,由于一个是1.5,一个是1.7。blog
实现:使用ttest_1samp函数实现,第一个参数为样本数据,第二个参数为整体均值。代码以下:ip
from scipy.stats import ttest_1samp from scipy import stats rvs = stats.norm.rvs(loc=1.5, scale=1, size=(50)) #生成均值为1.5,标准差为1的样本 t, p = ttest_1samp(rvs, 1.7) #进行单样本t检验
最终获得:ci
out:t = -0.29277920321046647 p = 0.7709272063776454
p值大于0.05,说明咱们不能拒绝原假设(即认为样本均值和整体均值没有显著差别),说明样本的身高均值能够认为是1.7m。之因此获得这样的结果可能因为咱们的样本数目太少,还有就是生成的数据1.5和1.7过于的接近。因此咱们再进行一组实验来讲明,将随机数的均值改成2.5。test
rvs = stats.norm.rvs(loc=2.5, scale=1, size=(50)) #生成均值为1.5,标准差为1的样本 t, p = ttest_1samp(rvs, 1.7) #进行单样本t检验,返回对应的t值和p值
获得:import
out:t = 5.333243665065403 p = 2.4443516254546488e-06
此时p小于0.05,咱们能够拒绝原假设(即认为样本均值和整体均值有显著差别),说明样自己高的均值不能够认为是1.7m。并且由于2.5是大于1.7的,最终获得的t也是一个正数。
应用场景:是针对两组不相关样本(各样本量能够相等也能够不相等),检验它们在均值之间的差别。对于该检验方法而言,咱们首先要肯定两个整体的方差是否相等,若是不等,先利用levene检验,检验两整体是否具备方差齐性。
原假设和备择假设:
例如,我想检验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公司的销售额均值存在显著差别
应用场景:是针对同一组样本在不一样场景下均值之间的差别。检验的是两配对样本差值的均值是否等于0,若是等于0,则认为配对样本之间的均值没有差别,不然存在差别。
原假设和备择假设:
例如,咱们有A公司今年的销售额以及去年的销售额,来判断今年和去年的销售额均值之间是否有差别。与独立样本t检验相比,配对样本T检验要求样本是配对的,两个样本的样本量要相同。
实现:能够选择单样本t检验的ttest_1samp函数(两组样本的差别为输入),也能够直接选择实现配对样本t检验的ttest_rel函数(两组样本做为输入)。代码以下:
A0 = stats.norm.rvs(loc=1, scale=1, size=(100)) #生成去年的销售额 A1 = stats.norm.rvs(loc=1.5, scale=1, size=(100)) #生成今年的销售额 # 计算两年销售额之间的差值 diff = A0-A1 # 使用ttest_1samp函数计算配对样本的t统计量 stats.ttest_1samp(diff) out: Ttest_1sampResult(statistic=13.983206457471795, pvalue=1.1154473504425075e-14) # 使用ttest_rel函数计算配对样本的t统计量 stats.ttest_rel(A0,A1) out: Ttest_relResult(statistic=-4.731625986009621, pvalue=7.412846164679422e-06)
可见,用哪一个函数最终获得的t和p值都是相同的。对于这个问题,p值小于0.05,认为两年的销售额存在显著差别。