利用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更改图片的大小还是蛮简单的,只需 ...
随机推荐
- 常见特征金字塔网络FPN及变体
好久没有写文章了(对不起我在划水),最近在看北京的租房(真真贵呀). 预告一下,最近无事,根据个人多年的证券操作策略和自己的浅显的AI时间序列的算法知识,还有自己Javascript的现学现卖,在微信 ...
- 深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...
- 凝思磐石安全系统V6.0.8版本(debian)增加多于4个串口方法
在网上找了好多方法,大家基本上都用ubuntu系统做实现演示,里面的有些文件我在凝思系统上根本找不到,最终通过摸索已解决,记录下操作过程(整个过程都需要在root用户下进行): 判断系统目前能识别的串 ...
- VMware 虚拟机下CentOS 7连接网络
查看主机网络配置 ipconfig 1.在centos打开终端命令 2. 输入命令 cd /etc/sysconfig/network-scripts/ 进入文件 输入 ls查看此文件夹下的文件 3 ...
- waeshall算法原理和实现
传递闭包Warshall方法简要介绍 ① 在集合X上的二元关系R的传递闭包是包含R的X上的最小的传递关系.R的传递闭包在数字图像处理的图像和视觉基础.图的连通性描述等方面都是基本概念.一般用B表示定义 ...
- Linux7(centOS7)安装jdk/tomcat/docker/mysql
jdk的rpm安装.tomcat的解压缩安装.docker的yum安装.mysql的docker安装 下载地址 1.1.jdk下载地址 https://www.oracle.com/java/tech ...
- 在spark上构造随机森林模型过程的一点理解
这篇文章仅仅是为了帮助自己理解在分布式环境下是如何进行随机森林模型构建的,文章中记录的内容可能不太准确,仅仅是大致上的一个理解. 1.特征切分点统计 不管是连续取值型特征还是离散取值型特征,分裂树结点 ...
- UNP第13章——守护进程
1. 守护进程的启动方法 (1)系统初始化脚本启动,在系统启动阶段,按照如/etc目录或/etc/rc开头的目录中的某些脚本启动,这些守护进程一开始就有超级用户权限.如inetd,cron,Web服务 ...
- 协程实现socket并发编程
在python中多线程其实是被弱化了,因为由于GIL的原因,同一时间只有一个线程能访问CPU,即使你的CPU是多核的在python中因为多线程被弱化了,所以协程显的重要,能够在一个线程中提高CPU的利 ...
- dpkg 批量卸载
dpkg -l |grep deepin|awk '{print $2}'|xargs sudo dpkg -P