在Python中进行T检验
介绍
众所周知,Python提供了各种统计库,其中一些非常受欢迎,例如 PyMC3 和 SciPy . 这些库为用户提供了不同的预定义函数,以便计算各种测试。但是为了理解背后的数学原理,了解背景中发生的事情是至关重要的。在下面的教程中,我们将了解如何使用 Python 和 NumPy 进行T检验。
T检验 是统计学中最常用的程序之一。然而,即使经常使用T检验的许多人也不确切地知道在后台使用诸如R和Python之类的应用程序对其数据进行操作时会发生什么。
但在我们开始之前,让我们了解一下T检验是什么。
理解T检验
T检验 是一种比较两个平均值(也称为均值)的测试,并告诉我们它们是否不同。T检验也被称为 学生T检验 ,它还告诉我们差异的显著程度。换句话说,它让我们知道这些差异是否可能是偶然发生的。
现在,让我们理解一些示例。
假设我们发烧了,我们尝试了一种自然疗法。发烧持续了几天。下一次我们发烧时,我们去药店买了一种非处方药。这次发烧持续了一个星期。当我们调查我们的朋友时,我们发现当他们服用顺势疗法时,他们的发烧时间更短(平均为3天)。在这个调查中,我们需要知道的是,这些结果是否可重复?通过T检验,我们可以比较这两组的均值,以及这些结果发生偶然的概率。
在现实生活中,我们也可以使用学生T检验来比较均值。例如,一家药企想要测试一种新的抗癌药物,以检查其对预期寿命的改善。在实验中,通常会有一个对照组(提供“糖丸”或安慰剂的组)。对照组的平均预期寿命可能超过五年,而使用新药的组可能超过六年的预期寿命。因此,我们可以说这种药可能有效,但也存在可能仅仅是巧合的机会。因此,为了测试这一点,研究人员将使用学生T检验以确定结果对整个人群是否可重复。
现在,让我们了解一下T值是什么。
理解T值
两组之间的差异与组内差异之间的比值被称为 T值 。如果T值更显著,这意味着组之间存在更大的差异。与此同时,较小的T值表示组之间的相似性。T值为3表示该组与另一个组以及组内部均不同。当在T检验中得到更大的T值时,这更可能意味着结果是可重复的。
因此,我们可以得出以下结论:
- 较大的T值意味着组之间有差异。
- 较小的T值意味着组之间相似。
现在,让我们了解一下T值和P值。
理解T值和P值
每个T值都有一个相应的P值。一个 P值 被称为样本数据结果出现偶然的概率。P值的取值范围是0%到100%。它们通常以小数形式表示。例如,10%的P值是0.1。较低的P值是有利的。较低的P值表示数据不是偶然发生的。例如,0.1的P值表示实验结果仅有1%的概率是巧合。通常情况下,接受0.05的P值表示数据是有效的。
现在,让我们了解一下T检验的类型。
T检验的类型有哪些
T检验有三种重要的类型:
- 独立样本T检验: 该检验用于比较两组的平均值。
- 配对样本T检验: 该检验用于比较同一组在不同时间(例如相隔一年)的平均值。
- 单样本T检验: 该检验用于将单一组的均值与一个已知均值进行比较。
现在,让我们开始进行一次样本T检验。
进行一次样本T检验
假设我们需要测试人群中男性的身高是否与女性的身高有所不同。因此,我们将从人群中抽取一个样本,并利用T检验来检查结果是否显著。
我们将按照以下步骤进行:
步骤1: 确定零假设和备择假设。
步骤2: 收集样本数据。
步骤3: 确定置信区间和自由度。
步骤4: 计算T统计量。
步骤5: 从T分布中计算临界T值。
第6步: 将临界T值与计算得到的T统计量进行比较。
让我们简要了解上述步骤。
确定零假设和备择假设
首先要定义零假设和备择假设。通常,零假设表明被测试的两个群体在统计上没有显著差异。另一方面,备择假设则表明存在显著差异。对于这个示例,我们可以得出以下结论:
- 零假设: 男性和女性的身高相同。
- 备择假设: 男性的身高与女性的身高不同。
收集样本数据
确定了假设后,我们将开始从每个人群中收集数据。对于此示例,我们将收集两个数据集。一个数据集包含男性的身高,另一个数据集包含女性的身高。样本数据的大小理想情况下应该相同,但可以不同。假设样本数据的大小分别为nx和ny。
确定置信区间和自由度
置信区间通常称为α(alpha)。α的典型值为0.05。这意味着对于检验的有效结论,有95%的置信度。我们可以使用以下公式确定自由度:
计算t-统计量
我们可以使用以下公式来计算t-统计量:
M = 平均值
n = 每组的得分数量
x = 个体分数
M = 均值
n = 组中的分数数量
此外,M x 和 M y 是两个女性和男性样本的均值。N x 和 N y 是两个样本的样本空间,S 是标准偏差。
从 t 分布计算关键 t 值
为了计算关键 t 值,我们需要两个对象。第一个是α选择的值,另一个是自由度。关键 t 值的公式很复杂;然而,它对于固定的自由度对和α值是静态的。因此,我们使用表格来计算关键 t 值。
然而,Python 在 SciPy 库中提供了一个具有相同用途的函数。
将关键 T 值与计算得到的 T 统计量进行比较
一旦计算出关键 T 值,我们将把该值与之前计算的 T 统计量进行比较。如果关键 t 值小于计算得到的 T 统计量,则测试得出两个总体之间存在显著差异。因此,我们必须拒绝无显著差异的原假设。
然而,另一种情况下,两个总体之间没有显著差异,测试无法拒绝原假设。因此,我们接受备择假设,即男性和女性的身高在统计上是不同的。
让我们考虑以下示例程序,演示了模型的工作原理。
程序:
# Importing the required libraries and packages
import numpy as np
from scipy import stats
# Defining two random distributions
# Sample Size
N = 10
# Gaussian distributed data with mean = 2 and var = 1
x = np.random.randn(N) + 2
# Gaussian distributed data with mean = 0 and var = 1
y = np.random.randn(N)
# Calculating the Standard Deviation
# Calculating the variance to get the standard deviation
var_x = x.var(ddof = 1)
var_y = y.var(ddof = 1)
# Standard Deviation
SD = np.sqrt((var_x + var_y) / 2)
print("Standard Deviation =", SD)
# Calculating the T-Statistics
tval = (x.mean() - y.mean()) / (SD * np.sqrt(2 / N))
# Comparing with the critical T-Value
# Degrees of freedom
dof = 2 * N - 2
# p-value after comparison with the T-Statistics
pval = 1 - stats.t.cdf( tval, df = dof)
print("t = " + str(tval))
print("p = " + str(2 * pval))
## Cross Checking using the internal function from SciPy Package
tval2, pval2 = stats.ttest_ind(x, y)
print("t = " + str(tval2))
print("p = " + str(pval2))
输出:
Standard Deviation = 0.7642398582227466
t = 4.87688162540348
p = 0.0001212767169695983
t = 4.876881625403479
p = 0.00012127671696957205
解释:
在上面的示例中,我们导入了所需的库并定义了包含数据样本大小的变量。然后,我们计算了高斯分布数据和标准差。之后,我们计算了T统计量并将其与临界T值进行比较。为此,我们计算自由度并比较p值。一旦比较完成,我们将打印出这些值供用户查看。最后,我们使用SciPy包的函数再次比较这些值并将它们打印出来。