​ t检验通常分为三种,分别是单样本t检验、双样本t检验和配对样本t检验。本文基于python的scipy.stats函数对每种t检验进行了介绍和实验。

一、t检验介绍

无论哪种t检验,都有以下的基本前提条件:

  1. 样本数据符合正态分布
  2. 各个样本之间是独立的

步骤:

  1. 提出原假设和备择假设
  2. 构造t统计量
  3. 计算t统计量
  4. 对于得到的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检验的更多相关文章

  1. 利用python库twilio来免费发送短信

    大家好,我是四毛,最近开通了个人公众号“用Python来编程”,欢迎大家“关注”,这样您就可以收到优质的文章了. 今天跟大家分享的主题是利用python库twilio来免费发送短信. 先放一张成品图 ...

  2. 利用python库计算person相关系数

    使用numpy库,可以实现person相关系数的计算,例如对于矩阵a. a Out[235]: array([[1, 1, 2, 2, 3], [2, 2, 3, 3, 5], [1, 4, 2, 2 ...

  3. 利用python进行数据分析——(一)库的学习

    总结一下自己对python常用包:Numpy,Pandas,Matplotlib,Scipy,Scikit-learn 一. Numpy: 标准安装的Python中用列表(list)保存一组值,可以用 ...

  4. 利用pip批量更新python库

    如果python库比较旧,需要更新到最新版本,可以利用pip工具. DOS命令行下,输入pip -V查看pip版本,可以先把pip更新到新版本. 查看系统里过期的python库 pip list #列 ...

  5. 利用Python进行数据分析——重要的Python库介绍

    利用Python进行数据分析--重要的Python库介绍 一.NumPy 用于数组执行元素级计算及直接对数组执行数学运算 线性代数运算.傅里叶运算.随机数的生成 用于C/C++等代码的集成 二.pan ...

  6. python利用selenium库识别点触验证码

    利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...

  7. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  8. 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型

    人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...

  9. python 利用PIL库进行更改图片大小的操作

    python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需 ...

随机推荐

  1. [LuoguP2147] [SDOI2008]洞穴勘测 (LCT维护连通性)

    题面 传送门:https://www.luogu.org/problemnew/show/P2147 Solution 这题...... 我们可以发现题目要求我们维护一个动态森林,而且只查询连通性.. ...

  2. Zookeeper(4)---ZK集群部署和选举

    一.集群部署 1.准备三台机器,安装好ZK.强烈建议奇数台机器,因为zookeeper 通过判断大多数节点的存活来判断整个服务是否可用.3个节点,挂掉了2个表示整个集群挂掉,而用偶数4个,挂掉了2个也 ...

  3. 关于Wrapper Class

    public class RunTest{ public static void main(String[] args) { Integer ten=new Integer(10); Long nin ...

  4. nginx&http 第三章 ngx 事件http 初始化1

    在 http 配置块中,我们配置了 http 连接相关的信息,HTTP 框架也正是从这里启动的 在 nginx 初始化的过程中,执行了 ngx_init_cycle 函数,其中进行了配置文件解析,调用 ...

  5. dst_output发包

    不管是收到报文转发还是本机发送报文,最后都会调用dst_output /* Output packet to network from transport. */ static inline int ...

  6. 用system v消息队列实现回射客户/服务器程序

    客户端程序 #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include< ...

  7. ipmi常用的命令行命令

    前言 记录一些常用的命令行操作 命令 查询机器的电源状态 ipmitool -I lanplus -U admin -P admin -H 172.16.21.215 power status 硬重启 ...

  8. mysql 创建数据库知识总结

    表设计 库名.表名.字段名必须使用小写字母,"_"分割,且名称长度不超过12个字符并且要做到见名知意. 建议使用InnoDB存储引擎. 存储精确浮点数必须使用DECIMAL替代FL ...

  9. Python _PyQt5对话框

    Python 调用PyQt5 制作对话框,退出时候有二次确认(注:默认是直接退出) 1 # -*- ytf-8 -*- 2 """ 3 用PyQt建一个对话框,退出时提示 ...

  10. jq根据id替换修改或添加css属性

    jq方法 $("#id").css("display","none"); js方法 document.getElementById(&quo ...