<<返回python首页 python

《Python 应用案例》

使用python进行统计学t检验

使用python库stats进行t检验

本文基于python的scipy.stats函数进行t检验进行了介绍和实例操作。

t检验通常分为三种,分别是单样本t检验、双样本t检验和配对样本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检验
t, p

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值
t, p

此时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检验

得到的p值大于0.05,说明满足方差相等。使用ttest_ind函数进行独立样本t检验,函数的最后一个参数为判断两个样本的方差是否相同,如果不同,设为False进行独立样本t检验。

stats.ttest_ind(A,B,equal_var=True)             #进行独立样本t检验

检验结果显示p远小于0.05,我们拒绝原假设,即认为A公司和B公司的销售额均值存在显著差异

三、配对t检验

应用场景:是针对同一组样本在不同场景下均值之间的差异。检验的是两配对样本差值的均值是否等于0,如果等于0,则认为配对样本之间的均值没有差异,否则存在差异。

原假设和备择假设:

例如,我们有A公司今年的销售额以及去年的销售额,来判断今年和去年的销售额均值之间是否有差异。与独立样本t检验相比,配对样本T检验要求样本是配对的, 两个样本的样本量要相同

实现:可以直接选择实现配对样本t检验的ttest_rel函数(两组样本作为输入)。代码如下:

A0 = stats.norm.rvs(loc=1, scale=1, size=(100))          #生成去年的销售额
A1 = stats.norm.rvs(loc=1.5, scale=1, size=(100))        #生成今年的销售额
# 使用ttest_rel函数计算配对样本的t统计量
stats.ttest_rel(A0,A1)

对于这个问题,p值小于0.05,认为两年的销售额存在显著差异。

移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。

狐狸教程 Copyright 2021

进入全屏