专栏首页ATYUN订阅号使用python中的Numpy进行t检验

使用python中的Numpy进行t检验

虽然像SciPy和PyMC3这样的流行的统计数据库有预定义的函数来计算不同的测试,但是为了了解这个过程的数学原理,必须了解后台的运行。本系列将帮助你了解不同的统计测试,以及如何在python中只使用Numpy执行它们。

t检验是统计学中最常用的程序之一。但是,即使是经常使用t检验的人,也往往不清楚当他们的数据转移到后台使用像Python和R的来操作时会发生什么。

什么是t检验

t检验(Student’s T Test)比较两个平均值(均值),然后告诉你它们彼此是否有差异。并且,t检验还会告诉你这个差异有没有意义,换句话说,它让你知道这些差异是否可能是偶然发生的。

举一个非常简单的例子:假设你得了感冒,你尝试了自然疗法。你的感冒持续了几天。下一次感冒时,你买了一个非处方药,感冒了一周。你调查你的朋友,他们都告诉你,当他们采取同种方法治疗时,他们的感冒时间较短(平均 3天)。你真正想知道的是,这种情况会不会是碰巧的?t测试可以通过比较两组的方法来回答你,让你知道这些结果碰巧发生的概率。

再举一个例子:t检验可以用在现实生活中作为比较手段。例如,一家制药公司可能想要测试一种新的抗癌药,以确定它是否能提高预期寿命。在实验中,会有一个对照组(给予安慰剂或“糖丸”的组)。对照组可能显示平均寿命增长5年,而服用新药平均寿命增长6年。看样子药物可能产生了效果。但这也可能是个巧合。为了验证这一点,研究人员将使用t检验来确定整这样的情况会不会一直发生。

什么是t分数

t分数是两个组之间的差值与组内差的比值。t分数越大,组间的差异越大。t分数越小,组间的相似度就越大。t分数为3代表这些组是彼此之间的三倍。当你运行t-score时,t值越大,结果越可能重复。

  • t分数越大,这些组差异越大。
  • 如果t分数越小,这些组越相似的。

什么是T值和P值

“足够大”多大?每个t值都有伴随着一个p值。p值是你的样本数据的结果偶然发生的概率。P值为0%至100%。它们通常写为小数。例如,5%的p值为0.05。低p值好;低假定值是好的;他们指出你的数据不是偶然发生的。例如,p值为0.1意味着实验结果只有1%的可能是碰巧发生的。多数情况下,p值为0.05(5%)表示数据有效。

t检验有哪些类型

t检验有三种主要类型:

1.独立样本t检验:比较两组平均值的方法。 2.配对样本t检验:比较同一组中不同时间(例如,相隔一年)平均值的方法。 3.单一样本t检验:检验单个组的平均值对照一个已知的平均值。

如何执行2个样本的t检验

假设,我们必须检验人口中男性的身高与女性的身高是否不同。我们从人口中抽取样本,并使用t检验来判断结果是否有效。

步骤:

1.确定一个虚无假设和对立假设

一般来说,零假设将表明被测试的两个群体没有统计学意义上的差异。对立假设将说明有差异存在。在这个例子中我们可以说:

虚无假设:男女平均身高相同

对立假设:男女平均身高不相同

2.收集样本数据 下一步是为每个群体收集一组数据。在我们的示例中,我们收集了2组数据即:女性身高和男性身高。理想情况下样本量应该是相同的,但这显然不现实。让我们设定样本大小分别是nx和ny。

3.确定置信区间和自由度 这就是我们所说的alpha(α)。α的代表值为0.05。这意味着这个测试的结论有效的可能性是95%。自由度可以通过以下公式计算:

4.计算t统计 t统计量可以用下面的公式计算:

其中, Mx和My是男性和女性两个样本的平均值。 Nx和Ny是两个样本的样本空间 S是标准偏差

5.从t分布 计算临界t值为了计算临界t值,我们需要2件事,选择的α值和自由度。临界t值的公式是复杂的,但是固定的一对自由度和α的值是固定的。因此,我们使用一个表来计算临界t值:

在python中,我们将使用sciPy包中的函数计算而不是在表中查找。(我保证,这是我们唯一一次需要用它!)

6.将临界t值与计算出的t统计量进行比较 如果计算的t统计量大于临界t值,则该测试得出结论:两个群体之间存在统计上显著的差异。因此,你可以驳回虚无假设的两个人群之间没有统计学上显著差异结论。

在任何其他情况下,两个人群之间没有统计学上的显著差异。测试无法驳回虚无假设,但我们接受了对立假设,也就是说男性和女性的身高在统计学上是不同的。

代码如下:

view source

## Import the packages
import numpy as np
from scipyimport stats


## Define 2 random distributions
#Sample Size
N= 10
#Gaussian distributed data with mean = 2 and var = 1
a= np.random.randn(N)+ 2
#Gaussian distributed data with with mean = 0 and var = 1
b= np.random.randn(N)


## Calculate the Standard Deviation
#Calculate the variance to get the standard deviation

#For unbiased max likelihood estimate we have to divide the var by N-1, and therefore the parameter ddof = 1
var_a= a.var(ddof=1)
var_b= b.var(ddof=1)

#std deviation
s= np.sqrt((var_a+ var_b)/2)
s



## Calculate the t-statistics
t= (a.mean()- b.mean())/(s*np.sqrt(2/N))



## Compare with the critical t-value
#Degrees of freedom
df= 2*N- 2

#p-value after comparison with the t
p= 1 - stats.t.cdf(t,df=df)


print("t = " + str(t))
print("p = " + str(2*p))
#Note that we multiply the p value by 2 because its a twp tail t-test
### You can see that after comparing the t statistic with the critical t value (computed internally) we get a good p value of 0.0005 and thus we reject the null hypothesis and thus it proves that the mean of the two distributions are different and statistically significant.


## Cross Checking with the internal scipy function
t2, p2= stats.ttest_ind(a,b)
print("t = " + str(t2))
print("p = " + str(2*p2))

本文分享自微信公众号 - ATYUN订阅号(atyun_com),作者:yuxiangyu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 不用多进程的Python十倍速并行技巧(下)

    上一篇我们学习了三种不易用Python多处理表示的工作负载基准测试的其中两种,并比较了Ray、Python多处理和串行Python代码。今天这一篇我们来聊聊第三...

    AiTechYun
  • t检验的工作原理和在Python中的实现

    因此,总有一天你可能会使用t检验,深入了解它的工作原理非常重要。作为开发人员,通过从头开始实现假设检验以理解。

    AiTechYun
  • 使用Java部署训练好的Keras深度学习模型

    Keras库为深度学习提供了一个相对简单的接口,使神经网络可以被大众使用。然而,我们面临的挑战之一是将Keras的探索模型转化为产品模型。Keras是用Pyth...

    AiTechYun
  • 最好的VIM/VI入门教程

    如果你已经安装了vim/vi的话,这个教程其实已经在你的电脑里了,你只需要在终端输入vimtutor即可(对于windows用户,你需要设置vim的路径到环境变...

    the5fire
  • 每天送0.2美金的小羊毛

    原文在:https://github.com/kusamanetwork/faucet/blob/master/README.md

    爬虫
  • Install ExpressCache for SSD Caching

    如果你拥有一个安装SSD的电脑,而且已经安装了Windows操作系统。如果这台电脑在出厂OEM 系统分区但都已经被你改变了或者是全新的硬盘,那么这篇文章可能适合...

    gigiwangs
  • LeetCode — (1)

      Nim Game、WordPattern、Move zeros、First Bad version、Ugly Number五个算法的python实现。

    oYabea
  • 使用S/4HANA里的Smart Business消费通过CDS view暴露的OData服务

    In my previous blog Build Chart and Table representation via Analytics Path Fram...

    Jerry Wang
  • Tour UVA - 1347

    John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small...

    attack
  • making Task<T> awaitable

    Eduasync part 5: making Task<T> awaitable In part 3 we looked at what the C# 5 c...

    阿新

扫码关注云+社区

领取腾讯云代金券