T分布和T检验的理解,Python代码实现T检验的计算

2023-11-06

每天学习一点,每天进步一点。

声明:本人所有的原创,都是自己在学习过程中的记录点滴,不一定都是对的,肯定也会有一些错误的想法。所以大家看一看就好,不可尽信。当然也欢迎指出。


T分布

定义,有来自标准正态分布的样本X ~ N(0,1),和来自卡方n分布的Y ~ X2(n),
那么有 Z= X/√(Y/n) 成为符合自由度为n的T分布

我们用Python代码画一下他的图形

# 给一个自由度,返回这个自由度的卡方分布 X²(n)
def product(n):
    n = np.ceil(n).astype(int)
    if n <=0:return None
    y = np.power(np.random.randn(1000),2)
    for i in range(1,n):
        y += np.power(np.random.randn(1000),2)
    return y
    
x = np.random.randn(1000)
df = 3
y = product(df)
# 根据公式生成T分布
z = x/(np.sqrt(y/df))
# plt.hist(z,bins=100,density=True)
pd.Series(x,name="正态分布").plot(kind="kde",figsize=(12,5),legend="best")
z = pd.Series(z,name="T分布")
z.plot(kind="kde",legend="best")
plt.grid()
plt.show()

在这里插入图片描述
大概的图形如上,可以看出T的密度函数是一个偶函数,并且当n无限大(一般大于40以后),T分布的密度函数,就会无限接近正态分布的密度函数了。所以当样本量大于40以后,T检验一般就转成了正态检验。因为差别就不大了。

n不大时,他和正态分布的密度函数还是有区别的,他的两边会比较厚,没有像正态分布那样一下就收。当然这就导致了他的头部比较低。因为总面积是1,不会变的。

所以n越大,两边越薄,收的越快,相对的头也就越高,当然两边不会收的比正态还要快。因为他的样本来自于正态。最终只会向正态分布趋近。


T检验方法

T检验是通过比较不同数据的均值,研究两组数据之间是否存在显著差异。

他是有前提条件的,T是用来检验标准差未知,服从标准正态分布的总体的均值。

T检验也分成三种

1.单样本T检验。

比较样本的均值avg(X),和给定的检验值μ,是否存在显著性差异。当总体分布是正态分布,如总体标准差未知且样本容量小于30,那么样本平均数与总体平均数的离差统计量呈t分布。
单总体t检验统计量为:
在这里插入图片描述
μ是给定的检验值。s是样本的标准差。

至于他为什么符合n-1的T分布。在最后的附一,已经写了证明的过程。

单样本的检验,零假设都是样本的均值和给定的检验值没有差异。即相等,然后根据上面公式算出一个t值,对应T分布的概率密度函数上找到这个值是不是在置信区间或者在可拒绝阈。

比如我们想知道这一组数据[15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9],他是随机抽样产生的某汽车厂生产汽车的排放标准数,那么这个汽车厂生产的汽车排放标准是不是超过了20?

Python代码:

from scipy import stats
# 假设均值等于20。
# 这里用的函数是单样本函数
stats.ttest_1samp([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9],20.0)
out:Ttest_1sampResult(statistic=-3.001649525885985, pvalue=0.014916414248897527)

对于这个结果,第一个值时计算的t值,第二个是这个值对应的p值(双尾)。

这里的P不大于5%,所以拒绝原假设。而且由公式知道给定的检验值越大,t值越小,概率也就会越小。所以我们的样本数据的平均值应该小于20,再进一步我们可以知道他的平均值范围在16到19范围内。

如下:

16—p=0.24599052278154576
17—p=0.8609030589711943
18—p=0.40156982970353694
19—p=0.08417468488443326

# 这个函数也可以传入一个要验证的结果的数组。他会每一个都给一个t和一个p
stats.ttest_1samp([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9],
					[15.0,16.0,17.0,18.0,19.0])
out:Ttest_1sampResult(
statistic=array([ 2.30161819,  1.24096464,  0.1803111 , -0.88034244, -1.94099598]), 
pvalue=array([0.0468751 , 	0.24599052, 0.86090306, 0.40156983, 0.08417468])
)

2.独立样本T检验。

用于检验两个服从正态分布的独立样本的均值是否有显著性差异。

  • 前提:这两个样本服从正态分布,且方差相等,那么这两个分布和总样本分布的方差会在推导的过程中消掉。

最终公式:
在这里插入图片描述

很多时候都会假设这两个样本均值相等,也就是零假设。那么μ1 - μ2 = 0。
公式变为:
在这里插入图片描述
S1和S2是两个样本的方差。自由度是n1+n2-2

对于这两个样本计算出来的t值,有对应的P值,这个值决定我们能不能拒绝原假设。

那么问题来了,方差如果不等呢?

  • 当这两个样本方差不相等的时候,要用到不等方差t检验。这个时候公式比较复杂,就不赘述。我找了一篇帖子。很详细。看完肯定有收获。一文详解t分布

当然对于我们来说,有程序,不必记那么多繁琐的公式,只要你脑子里有这个印象就行。

比如有两组数

s1 = [620.16,866.50,641.22,812.91,738.96,899.38,760.78,694.95,749.92,793.94]
s2 = [958.47,838.42,788.90,815.20,783.17,910.92,758.49,870.80,826.26,805.48]

我们要检验他们的均值是否有差异。

# 参数equal_var,就是他们是否具有相同的方差,如果不具有就用false
stats.ttest_ind(s1,s2,equal_var=True)
Ttest_indResult(statistic=-2.2501929924940756, pvalue=0.03718077010540171)

这个时候达不到我们的5%显著性水平,拒绝零假设。他们的均值有显著性差异。

并且我们观察到t值时负数。所以s1的均值应该小于s2的均值。

注:这两个数组不一定有相同的样本数量,即维度不一定要相等。

3.配对样本T检验。

要求:

  • 总体方差相等
  • 正态数据或近似正态

这种一般是检验同一个对象进行不同的处理得到的观测数据,或者前后对比的观测数据。或者检验某一种药物是不是有效的数据。

他们必须是同样的维度,同样的方差。

因为配对样本检测,即可以看成他们的差值的单样本检测。所以维度不一样检测不了

比如上面用过的组数

s1 = [620.16,866.50,641.22,812.91,738.96,899.38,760.78,694.95,749.92,793.94]
s2 = [958.47,838.42,788.90,815.20,783.17,910.92,758.49,870.80,826.26,805.48]

他们均值有没有差异性。

方法一:

# s1,s2有相同维度
stats.ttest_rel(s1,s2)
Ttest_relResult(statistic=-2.1691050163825625, pvalue=0.058198251037855704)

方法二:

# 利用他们的差值,进行单样本检测,也就是和0比较。看他们的差值和0的差异性
s1 = np.array(s1)
s2 = np.array(s2)
stats.ttest_1samp(s1-s2,0)
Ttest_1sampResult(statistic=-2.1691050163825625, pvalue=0.058198251037855704)

当然结果是一样的

注意,配对样本和独立样本之间的差别。他们用的地方不同,而且他们两的自由度也不同。

独立样本的自由度是两组数组的维数相加减2,即n1+n2-2

而配对样本的自由度,是一个样本的维数-1,即n-1。


Python中常用的t检验函数

置信区间函数

# 自由度为3的95置信区间的值区间
stats.t.interval(0.95,df=3)
(-3.182446305284263, 3.182446305284263)

百分比点函数

# 左尾占比2.5%面积的,自由度为9的,这个t值时多少
stats.t.ppf(q=0.025,df=9)


#同下面这个函数,右尾为97.5%是这个t是多少。这两个函数一个左尾一个右尾。
# 这也叫反生存函数
stats.t.isf(0.975,9)
上面的结果都是:
-2.262157162740992

累计分布函数

这个t值,自由度为9时,对应的左尾占比面积。和上面的ppf是相反的
stats.t.cdf(-2.262157162740992,df=9)
0.02500000000233781

生存函数

# 给一个t值,计算他右尾的面积。这个函数就是1-cdf。一个左一个右。
stats.t.sf(-2.262157162740992,df=9)

后面有用到其他函数的时候再添加。
其实很多时候代码很简单。主要就是思想。很多函数我开始也不知道什么意思,我是一个一个函数测试,试出来的。然后就会恍然大悟,原来如此。代码背后有前人留下的知识结晶。慢慢学习。


附一:
(如转载请标注出处)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

T分布和T检验的理解,Python代码实现T检验的计算 的相关文章

随机推荐

  • 互质、最长公共子序列(LCS)

    最长公共子序列 LCS 题目描述 给出 1 2 n 的两个排列P1和P2 求它们的最长公共子序列 输入格式 第一行是一个数 n 接下来两行 每行为 n 个数 为自然数1 2 n 的一个排列 输出格式 一个数 即最长公共子序列的长度 输入输出
  • 翻斗式雨雪量计的使用说明书

    概要 本装置为翻斗式温水式雨量计的感应部 口径200mm的接水口内的雨水每达到一定的量 0 2mm或0 5mm 则翻斗翻转 通过簧片开关检测出翻转动作 输出接点脉冲信号 接水器的外筒内封装的调配液 防冻液 水 保持在一定的温度 由此融化落在
  • python 爬虫的开发环境配置

    1 新建一个python项目 2 在控制台中分别安装下面三个包 pip install requests pip install beautifulsoup4 pip install selenium 如果安装时报以下错误 raise Re
  • RPM软件包编译

    文章目录 spec文件解析 关键字 rpm处理spec文件的几个阶段 变量判断 RPM软件包 制作RPM包 工作目录结构 RPMBUILD命令常用参数 RPM命令常用参数 其他命令 spec文件解析 关键字 Name 软件包的名称 在后面的
  • Cisco—HSRP下实现DHCP主备冗余

    实验 01 拓扑 02 实验要求 S1 S2通过DHCP 为下游的linux服务器 分配IP 地址 S1 S2 上配置HSRP 让S1 S2 动态充当linux服务器的网关 断开SW 连接S1 的接口 查看HSRP 是否能动态的切换 宕机S
  • 统计网站页面的访问量

    最近做的 食盐行业信用管理与公共服务系统 项目 需要做一个网站文章页面的访问量功能 自己的解决方案 可能很简陋 但是解决了问题 而且我也给出了详细的过程 请大家多多支持 参与谈论 博客写这么长不容易啊 嘿嘿 需求及规则如下 1 同一个ip地
  • java游戏主角叶开,《仙侠道》叶开深度解析

    仙侠道 叶开深度解析 成也叶开 败也叶开 高速的都想把叶开秒了 这样赢得几率大 但是对手也会想法设法让你秒不了 上叶开同等战力同样伙伴 低速度的占优势 低速阵印陷阱有两个回个 经脉有两个回合 燕无名魂刃给叶开套上 套上期间任何陷阱 增益 清
  • K8S 安装 Dashboard

    1 在 master 节点执行 本例 k8s 是 v1 17 2 对应的 dashboard 是 v2 0 0 rc5 这个版本 具体去这里查看对应的版本 Releases kubernetes dashboard GitHub wget
  • js算法设计思想之“贪心算法”

    贪心算法是算法设计中一种方法 期盼通过每个阶段的局部最优选择 从而达到全局的最优选择 结果不一定是最优的 leetcode 455 分饼干 解题思路 局部最优 技能满足孩子 还消耗最小 先将 较小的饼干 分给胃口最小的孩子 解题步骤 饼干数
  • datax-web使用介绍

    datax web 路由策略 当执行器集群部署时 提供丰富的路由策略 包括 FIRST 第一个 固定选择第一个机器 LAST 最后一个 固定选择最后一个机器 ROUND 轮询 RANDOM 随机 随机选择在线的机器 CONSISTENT H
  • GRE虚拟隧道配置

    GRE拓扑 配置ip client1 172 16 1 1 172 16 1 254 server1 192 168 1 1 192 168 1 254 配置路由 R1 sys sys peer1 int g0 0 0 ip address
  • AnyTXT Searcher

    AnyTXT Searcher 非常简单 只需要写下您要搜索的关键文字 然后按Enter Go 一体化的界面 用户界面是一个巨大的预览面板 如果您有多个驱动器 则可以选择要搜索的驱动器 也可以全部覆盖 要指定您的驱动器 请单击搜索字段旁边的
  • 一个简单的线程锁------pthread和win32的临界区(Critical Section)

    临界区 临界区是指一个小代码段 在代码能够执行前 它必须独占对某些资源的访问权 这是让若干代码能够 以原子操作方式 来使用资源的一种方法 所谓原子 atomic 操作方式 是指这段代码知道没有别的线程要访问这个资源 说明 1 MacOSX
  • 尝试在条件“$(_DeviceSdkVersion) >= 21”中对计算结果为“”而不是数字的“$(_DeviceSdkVersion)”进行数值比较。

    最近折腾xamarin android 使用genymotion模拟器 vs 2015自带的速度太慢 发生 出现部署错误 问题 查看 输出 窗口 发现是adb exe执行问题 原因是genymotion默认使用自身的adb配置 更改过来即可
  • 【自动控制原理】非零初始条件下的传递函数_含有初始条件的传递函数-笔记

    一个一阶函数 其传递函数为 得其微分方程为 前提条件为x 0 0 而 做Laplace 得到新的传递函数G s 化成框图 不会影响系统的稳定 不影响我们分析该系统 比如
  • 新媒体数据分析:新媒体运营主要做什么?

    新媒体运营主要做什么 新媒体运营每天是做什么 虽然在招聘网上一搜 各种岗位职责 岗位要求 一目了然 但落实到具体的工作中时 都是在做的什么 作为一个从事新媒体运营工作的人 工作主要分为社交媒体的辅助运营 主要媒体的精益运营和自媒体的变现三类
  • Anaconda安装(详细教程)

    一 简介 Anaconda是一个开源的Python发行版本 其包含了conda Python等180多个科学包及其依赖项 其中包括Conda Python以及一大堆安装好的工具包 比如 numpy pandas等 而conda是一个开源的包
  • MTD子系统和NAND

    先前的文章 虚拟文件系统 VFS 基于linux3 10 和 UBIFS文件系统 只是对文件系统进行各层的分析 并没有连贯到读写flash 透过本文可以知道ubifs文件系统发出的读在linux操作系统上是到底是如何完成的 NAND设备 L
  • A-2 LRU-K(攀拓(PAT)- 程序设计(甲级)2023年春季考试仿真卷)

    A 2 LRU K 分数 25 作者 陈越 单位 浙江大学 Least Recently Used LRU cache scheme is to remove the least recently used frame the one ha
  • T分布和T检验的理解,Python代码实现T检验的计算

    每天学习一点 每天进步一点 声明 本人所有的原创 都是自己在学习过程中的记录点滴 不一定都是对的 肯定也会有一些错误的想法 所以大家看一看就好 不可尽信 当然也欢迎指出 T分布 定义 有来自标准正态分布的样本X N 0 1 和来自卡方n分布