scipy.stats.

ttest_rel#

scipy.stats.ttest_rel(a, b, axis=0, nan_policy='propagate', alternative='two-sided', *, keepdims=False)[源代码]#

计算两个相关评分样本 a 和 b 的 t 检验。

这是一个零假设的测试,即两个相关或重复的样本具有相同的平均(预期)值。

参数:
a, barray_like

数组必须具有相同的形状。

axisint 或 None,默认值: 0

如果为 int,则输入沿其计算统计量的轴。输入的每个轴片(例如行)的统计量将出现在输出的相应元素中。如果 None,则在计算统计量之前,输入将被展平。

nan_policy{‘propagate’, ‘omit’, ‘raise’}

定义如何处理输入 NaN。

  • propagate:如果在计算统计量的轴片(例如行)中存在 NaN,则输出的对应条目将为 NaN。

  • 省略: 执行计算时将省略 NaN。如果用于计算统计信息的轴切片中剩余的数据不足,输出的相应条目将为 NaN。

  • 提升: 如果存在 NaN,会提升 ValueError

备选{‘双向’、‘较小’、‘较大’},可选

定义备选假设。以下选项可用(默认值为‘双向’)

  • ‘双向’:样本基础分布的平均值不相等。

  • ‘较小’:第一个样本基础分布的平均值小于第二个样本基础分布的平均值。

  • ‘较大’:第一个样本基础分布的平均值大于第二个样本基础分布的平均值。

在版本 1.6.0 中添加。

keepdims布尔值,默认值:False

如果将其设置为 True,被约简的轴将以尺寸 1 的维度形式保留在结果中。此选项允许结果针对输入数组正确广播。

返回:
resultTtestResult

具有以下属性的对象

statistic浮点或数组

t 统计量。

pvalue浮点或数组

与给定的备选关联的 p 值。

df浮点或数组

t 统计量计算中使用的自由度数量;它比样本的尺寸(a.shape[axis])小 1。

在版本 1.10.0 中添加。

对象还具有以下方法

confidence_interval(confidence_level=0.95)

计算给定置信水平的人口平均值差别的置信区间。置信区间以 namedtuple 形式返回,其字段为 lowhigh

在版本 1.10.0 中添加。

备注

使用示例为在不同考试中同一组学生的成绩,或从同一装置进行的重复抽样。此检验衡量平均成绩是否在各个样本中(例如考试)有显著差异。如果观察到的 p 值较大,例如大于 0.05 或 0.1,则无法驳回平均成绩相等的零假设。如果 p 值小于阈值,例如 1%、5% 或 10%,则驳回平均值相等的零假设。较小的 p 值对应较大的 t 统计量。

t 统计量计算为 np.mean(a - b)/se,其中 se 是标准误差。因此,当 a - b 的样本均值大于零时,t 统计量将为正值,而当 a - b 的样本均值小于零时,t 统计量将为负值。

从 SciPy 1.9 开始,np.matrix 输入(不建议用于新代码)在执行计算之前会转换为 np.ndarray。在这种情况下,输出将是标量或适当形状的 np.ndarray,而不是二维的 np.matrix。类似地,在忽略掩码数组的掩码元素时,输出将是标量或 np.ndarray,而不是掩码为 mask=False 的掩码数组。

参考

https://en.wikipedia.org/wiki/T-test#Dependent_t-test_for_paired_samples

示例

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> rvs1 = stats.norm.rvs(loc=5, scale=10, size=500, random_state=rng)
>>> rvs2 = (stats.norm.rvs(loc=5, scale=10, size=500, random_state=rng)
...         + stats.norm.rvs(scale=0.2, size=500, random_state=rng))
>>> stats.ttest_rel(rvs1, rvs2)
TtestResult(statistic=-0.4549717054410304, pvalue=0.6493274702088672, df=499)
>>> rvs3 = (stats.norm.rvs(loc=8, scale=10, size=500, random_state=rng)
...         + stats.norm.rvs(scale=0.2, size=500, random_state=rng))
>>> stats.ttest_rel(rvs1, rvs3)
TtestResult(statistic=-5.879467544540889, pvalue=7.540777129099917e-09, df=499)