关于人工智能:t-检验的-3-种常用方法及在-Python-中使用样例

47次阅读

共计 4138 个字符,预计需要花费 11 分钟才能阅读完成。

t 测验是一种统计技术,能够通知人们两组数据之间的差别有多显著。它通过将信号量(通过样本或总体平均值之间的差别测量)与这些样本中的噪声量(或变动)进行比拟来实现。有许多有用的文章会通知你什么是 t 测验以及它是如何工作的,但没有太多资料探讨 t 测验的不同变体以及何时应用它们。本文将介绍 t 测验的 3 种变体以及何时应用它们以及如何在 Python 中运行它们。

单样本 t 测验

单样本 t 测验将数据样本的平均值与一个特定值进行比拟。最常见的一个例子是可口可乐想要确保装瓶厂在每个罐头中倒入适量的苏打水:他们想要每个罐装 355 毫升,因而能够抽取罐装样品并测量倒入每个罐装的确切毫升数。因为机械过程不准确有些罐头的容量可能超过 355 毫升,而有些罐头的容量可能会变少。通过对罐子样本进行单样本 t 测验,能够测试机器是否向每个罐子中倒入与 355 毫升液体不同的统计学显着量。

它是如何工作的?

1、陈说原假如和备择假如。原假如 (H0) 将是样本均值与特定值(总体均值)没有差别,而备择假如 (H1) 则表明存在差别。应用下面的示例,它们将相似于:

  • H0:均匀每罐可乐有 355ml。
  • H1:均匀每罐可乐超过 355ml。

留神:因为我抉择了一个方向(即“每个罐子里有超过 355 毫升”),这变成了一个单边 t 测验而不是只说数量不是 355 毫升的双边 t 测验。

2、确定显著性程度:显著性程度,通常称为 alpha (α),是在理论为真时回绝原假如的概率。通常应用 0.05 的 alpha 值,这意味着有 5% 的危险得出结论认为样本之间存在统计学上的显著差别,而这实际上只是因为噪声所导致的。

3、收集数据:要测试的值 (μ)、样本均值 (x̄)、样本标准差 (S)、样本察看次数 (n),并将它们代入以下公式计算 t 统计量:

4、将 t 统计量和自由度代入 t 表,失去相应的 p 值。将这个 p 值与你抉择的 alpha 程度比拟,如果它更小,你就能够回绝原假如。

然而这类测试的有效性须要 3 个假如:

  1. 样本是独立的
  2. 数据近似正态分布
  3. 随机采样

代码示例

Scipy 的 stats 库有一个不便的 ttest_1samp 办法,当给定数据样本和要比拟的总体均值时,该办法将计算 t-stat 和 p-value。上面的代码演示了应用该函数为上述示例运行一个示例 t 测验。

# Import numpy and scipy
import numpy as np
from scipy import stats

# Create fake data sample of 30 cans from 2 factories
factory_a = np.full(30, 355) + np.random.normal(0, 3, 30)
factory_b = np.full(30, 353) + np.random.normal(0, 3, 30)

# Run a 1 sample t-test for each one
a_stat, a_pval = stats.ttest_1samp(a=factory_a, popmean=355, alternative='two-sided')
b_stat, b_pval = stats.ttest_1samp(a=factory_b, popmean=355, alternative='two-sided')

# Display results
print("Factory A-  t-stat: {:.2f}   pval: {:.4f}".format(a_stat, a_pval))
print("Factory B-  t-stat: {:.2f}   pval: {:.4f}".format(b_stat, b_pval))

## Output
# Factory A-  t-stat: 0.37   pval: 0.7140
# Factory B-  t-stat: -3.96   pval: 0.000

在这里,我创立了来自工厂 A 和工厂 B 的 30 个罐头的两个数据样本。对于工厂 A,数据的平均值为 355 并增加了噪声项,但对于工厂 B,数据的平均值为 353 并增加了噪声。对两者运行单样本 t 测验,咱们看到工厂 A 的 p 值为 0.71,工厂 B 的 p 值为 0.0004。工厂 A 的 p 值远高于 0.05 的规范 alpha 程度,但工厂 B 低于该程度 阈值容许咱们回绝原假如。

双样本 t 测验

双样本 t 测验不是将数据样本的平均值与单个值(总体平均值)进行比拟,而是比拟两个独立数据样本的平均值。还是下面的例子,如果想要比拟 A 工厂和 B 工厂的罐装液体的均匀量,就能够应用此办法。

它是如何工作的?

1、与单样本 t 测验相似,咱们陈说原假如和备择假如。以两个工厂为例,它们将是:

H0:两家工厂的均匀填充量没有显著差别

H1:两家工厂的均匀填充量存在显著差别

留神:重要的是要记住,原假如和备择假如总是对于个别人群,而不是从中抽取的样本

2、抉择一个显著性程度(咱们将再次抉择 0.05)

3、计算两个样本的均值(x̄)、标准差(S)和样本量(N),代入下式,失去一个 t 统计量

4、将 t 统计量和自由度代入 t 表,失去相应的 p 值。将该 p 值与所选的 alpha 程度进行比拟,如果它更小,则能够回绝原假如。

与单样本 t 测验一样,此测验也必须满足一些假如:

  1. 两个样本是独立的
  2. 两个样本近似正态分布
  3. 两个样本的方差大致相同

代码示例

Scipy 的 ttest_ind 办法接管两个数据样本,并且与 ttest_1samp 相似,从测试中返回一个 t 统计量和相应的 p 值。上面的代码演示了应用该函数来运行下面的示例用例。

# Import numpy and scipy
import numpy as np
from scipy import stats

# Create fake data sample of 30 cans from 2 factories
factory_a = np.full(30, 355) + np.random.normal(0, 3, 30)
factory_b = np.full(30, 353) + np.random.normal(0, 3, 30)

# Run a two sample t-test to compare the two samples
tstat, pval = stats.ttest_ind(a=factory_a, b=factory_b, alternative="two-sided")

# Display results
print("t-stat: {:.2f}   pval: {:.4f}".format(tstat, pval))

## Output
# t-stat: 3.15   pval: 0.0026

因为这个 0.0026 测验的 p 值低于 0.05 的规范 alpha,因而回绝原假如。

配对 t 测验

配对 t 测验通常比拟随工夫变动同一实体的两个测量值。例如,如果想要测试装瓶培训打算的有效性,他们能够比拟每位员工在承受培训之前和之后的均匀装瓶率。

它是如何工作的?

与一样本和二样本 t 测验相似,必须阐明原假如和备择假如,抉择显着性程度,计算 t 统计量,并将其与 t 表中的自由度一起应用以取得 p 值 . 同样,t 统计量的公式不同,如下所示,其中 d 是每个配对值的差别,n 是样本数。

这个测验的另一种形容形式是:配对 t 测验实质上只是对每个配对样本的差别进行单样本 t 测验!在这种状况下,原假如是配对样本差值为零。

代码示例

Scipy 的 ttest_rel 办法接管两个配对数据数组,并且相似于 ttest_1samp 和 ttest_ind 函数,返回一个 t 统计量和相应的 p 值。在上面的代码中,我首先定义了一组员工装瓶率,每分钟随机瓶数介于 10 到 20 之间。而后我应用“apply_training”函数模仿培训,该函数能够将生产率升高 1 瓶 / 分钟,或者进步最多 4 瓶 / 分钟。与后面两个示例相似,我将训练前后的生产力数组输出 scipy 的 ttest_rel 函数并打印输出。

# Import numpy and scipy
import numpy as np
from scipy import stats 

# Create array of worker bottling rates between 10 and 20 bottles/min
pre_training = np.random.randint(low=10, high=20, size=30)

# Define "training" function and apply 
def apply_training(worker):
    return worker + np.random.randint(-1, 4)

post_training = list(map(apply_training, pre_training))

# Run a paired t-test to compare worker productivity before & after the training
tstat, pval = stats.ttest_rel(post_training, pre_training)

# Display results
print("t-stat: {:.2f}   pval: {:.4f}".format(tstat, pval))

## Output
# t-stat: 2.80   pval: 0.0091

最初,作为下面形容的总结,这里演示了配对 t 测验如何与配对差别的单样本 t 测验雷同。在上面的代码片段中,获取了 post_training 和 pre_training 数组之间的差别,并对总体平均值 0 的差别进行了单样本 t 测验(因为零假如是样本之间没有差别)。正如预期的那样,t 统计量和 p 值与配对 t 测验完全相同!

# Take differences in productivity, pre vs. post
differences = [x-y for x,y in zip(post_training, pre_training)]

# Run a 1-sample t-test on the differences with a popmean of 0
tstat, pval = stats.ttest_1samp(differences, 0)

# Display results
print("t-stat: {:.2f}   pval: {:.4f}".format(tstat, pval))

## Output
# t-stat: 2.80   pval: 0.0091

最初,感激浏览
https://www.overfit.cn/post/4d281f529e5c433490381d1e0c73007c

作者:Eric Onofrey

正文完
 0