利用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,则认为配对样本之间的均值没有差异,否则存在差异。
原假设和备择假设:

例如,我们有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库stats进行t检验的更多相关文章
- 利用python库twilio来免费发送短信
大家好,我是四毛,最近开通了个人公众号“用Python来编程”,欢迎大家“关注”,这样您就可以收到优质的文章了. 今天跟大家分享的主题是利用python库twilio来免费发送短信. 先放一张成品图 ...
- 利用python库计算person相关系数
使用numpy库,可以实现person相关系数的计算,例如对于矩阵a. a Out[235]: array([[1, 1, 2, 2, 3], [2, 2, 3, 3, 5], [1, 4, 2, 2 ...
- 利用python进行数据分析——(一)库的学习
总结一下自己对python常用包:Numpy,Pandas,Matplotlib,Scipy,Scikit-learn 一. Numpy: 标准安装的Python中用列表(list)保存一组值,可以用 ...
- 利用pip批量更新python库
如果python库比较旧,需要更新到最新版本,可以利用pip工具. DOS命令行下,输入pip -V查看pip版本,可以先把pip更新到新版本. 查看系统里过期的python库 pip list #列 ...
- 利用Python进行数据分析——重要的Python库介绍
利用Python进行数据分析--重要的Python库介绍 一.NumPy 用于数组执行元素级计算及直接对数组执行数学运算 线性代数运算.傅里叶运算.随机数的生成 用于C/C++等代码的集成 二.pan ...
- python利用selenium库识别点触验证码
利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
- 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型
人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...
- python 利用PIL库进行更改图片大小的操作
python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需 ...
随机推荐
- k8s中pod的yaml文件全面解读
apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 . kind: Pod #必选,Pod metadata: #必选,元数据 ...
- 【Jmeter】第一个接口测试案例
测试步骤如下: 1.测试计划 2.线程组 3.HTTP Cookie管理器 4.Http信息头管理 5.Http请求默认值 6.Sampler(HTTP请求) 7.断言 8.监听器(查看结果树.图形结 ...
- twoSum问题的核心思想
Two Sum 系列问题在 LeetCode 上有好几道,这篇文章就挑出有代表性的几道,介绍一下这种问题怎么解决. TwoSum I 这个问题的最基本形式是这样:给你一个数组和一个整数 target, ...
- nginx下配置php5和php7
用的是lnmp 一键安装的 php5.6版本网上百度Ubuntu安装多版本PHP就行 参考文章原链接:http://blog.csdn.net/21aspnet/article/details/476 ...
- HTML5 实现的一个俄罗斯方块实例代码
/*实现的功能:方块旋转(W键).自动下落.移动(ASD).消行.快速下落(空格键).下落阴影.游戏结束.*/ <!DOCTYPE html> <html> < ...
- layui系列学习第一天
新开一个博客系列 记录下layui学习过程及感受 今天受到很大的打击 ...希望 自己能坚持做好 到1.12号可以完成这个博客 一.基础说明 layui css 命名规范:1.layui-模块名- ...
- C++ 数据结构 1:线性表
1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...
- Nacos配置中心和服务的注册发现
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...
- lua调用dll demo
使用的是lua5.3 DllMain.cpp 1 //生成的dll 是 lua_add53.dll 2 //luaopen_lua_add 3 extern "C" { 4 #in ...
- Innodb表空间迁移过程
1.大致流程 将a实例的表的数据迁移到b实例上. 1.在目标实例b上创建一个相同的表 2.在目标库b上执行ALTER TABLE t DISCARD TABLESPACE; 3.在源库a上执行FLUS ...