利用python库stats进行t检验
t检验通常分为三种,分别是单样本t检验、双样本t检验和配对样本t检验。本文基于python的scipy.stats函数对每种t检验进行了介绍和实验。
一、t检验介绍
无论哪种t检验,都有以下的基本前提条件:
- 样本数据符合正态分布
- 各个样本之间是独立的
步骤:
- 提出原假设和备择假设
- 构造t统计量
- 计算t统计量
- 对于得到的p值进行分析,p大于0.05则接受原假设,反之接受备择假设
二、 单样本t检验
应用场景:对某个样本的均值进行检验,比较是否和总体的均值(自己定)是否存在差异。
原假设和备择假设:
例如,我获取了50个中国人的身高(随机生成均值为1.5m的50个数据),想比较当前样本的平均身高和中国人的平均身高(1.7m)是否存在差异。按道理来说应该是存在差异的,因为一个是1.5,一个是1.7。
实现:使用ttest_1samp函数实现,第一个参数为样本数据,第二个参数为总体均值。代码如下:
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检验
最终得到:
out:t = -0.29277920321046647 p = 0.7709272063776454
p值大于0.05,说明我们不能拒绝原假设(即认为样本均值和总体均值没有显著差异),说明样本的身高均值可以认为是1.7m。之所以得到这样的结果可能由于我们的样本数目太少,还有就是生成的数据1.5和1.7过于的接近。所以我们再进行一组实验来说明,将随机数的均值改为2.5。
rvs = stats.norm.rvs(loc=2.5, scale=1, size=(50)) #生成均值为1.5,标准差为1的样本 t, p = ttest_1samp(rvs, 1.7) #进行单样本t检验,返回对应的t值和p值
得到:
out:t = 5.333243665065403 p = 2.4443516254546488e-06
此时p小于0.05,我们可以拒绝原假设(即认为样本均值和总体均值有显著差异),说明样本身高的均值不可以认为是1.7m。而且因为2.5是大于1.7的,最终得到的t也是一个正数。
三、独立样本t检验(双样本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公司的销售额均值存在显著差异
四、配对t检验
应用场景:是针对同一组样本在不同场景下均值之间的差异。检验的是两配对样本差值的均值是否等于0,如果等于0,则认为配对样本之间的均值没有差异,否则 ad8 存在差异。
原假设和备择假设:
例如,我们有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,认为两年的销售额存在显著差异。
- 利用python进行T检验
- Python利用FFT进行简单滤波的实现
- 利用python对rrd进行resize
- python利用LSTM进行时间序列分析预测
- 利用python对DNS进行的一系列操作
- 利用Python进行数据可视化常见的9种方法!超实用!
- python中利用KNN实现对iris进行分类
- 利用python pytesseract进行OCR(验证码识别)
- python OpenCV学习笔记(三十):利用迭代图割算法进行交互式前景提取
- 利用Python进行数据分析(五)之pandas入门
- 『利用Python进行数据分析学习』第四章:numpy基础学习
- 2018最新Python数据分析实战教程视频 python数据分析班视频 Python数据分析基础教程 利用Python进行数据分析
- 利用python进行数据分析-绘图和可视化2
- 利用Python-caffe进行图像分类,卷积核的显示,激活值特征图的显示以及全连接层直方图显示
- python 利用已有Ner模型进行数据清洗合并代码
- 利用python调用elasticsearch-api来分析数据并作图进行日报邮件发送
- 利用python对有规律的url进行视频爬取中遇到的小问题及解决方案
- 转载]利用Python进行数据分析——绘图和可视化 xticks-学习笔记
- 利用python进行数据处理
- 利用Python进行机器学习和数据挖掘概述