scipy.stats.

ttest_ind_from_stats#

scipy.stats.ttest_ind_from_stats(mean1, std1, nobs1, mean2, std2, nobs2, equal_var=True, alternative='two-sided')[source]#

根据描述性统计信息,对两个独立样本的均值进行 T 检验。

这是一个检验两个独立样本是否具有相同的平均(期望)值的零假设的检验。

参数:
mean1array_like

样本 1 的均值。

std1array_like

样本 1 的校正样本标准差(即 ddof=1)。

nobs1array_like

样本 1 的观测数。

mean2array_like

样本 2 的均值。

std2array_like

样本 2 的校正样本标准差(即 ddof=1)。

nobs2array_like

样本 2 的观测数。

equal_varbool, 可选

如果为 True(默认值),则执行假设总体方差相等的标准独立 2 样本检验 [1]。如果为 False,则执行 Welch 的 t 检验,该检验不假设总体方差相等 [2]

alternative{‘two-sided’, ‘less’, ‘greater’}, 可选

定义备择假设。以下选项可用(默认值为“two-sided”)

  • ‘two-sided’:分布的均值不相等。

  • ‘less’:第一个分布的均值小于第二个分布的均值。

  • ‘greater’:第一个分布的均值大于第二个分布的均值。

在版本 1.6.0 中添加。

返回:
statisticfloat 或 array

计算出的 t 统计量。

pvaluefloat 或 array

双尾 p 值。

另请参阅

scipy.stats.ttest_ind

注释

统计量计算为 (mean1 - mean2)/se,其中 se 是标准误差。因此,当 mean1 大于 mean2 时,统计量将为正;当 mean1 小于 mean2 时,统计量将为负。

此方法不检查 std1std2 的任何元素是否为负数。如果在调用此方法时,std1std2 参数的任何元素为负数,则此方法将返回与传递 numpy.abs(std1)numpy.abs(std2) 相同的结果;不会发出异常或警告。

ttest_ind_from_stats 除了 NumPy 之外,还对 Python Array API 标准兼容后端提供实验性支持。请考虑通过设置环境变量 SCIPY_ARRAY_API=1 并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。

CPU

GPU

NumPy

不适用

CuPy

不适用

PyTorch

JAX

Dask

不适用

有关更多信息,请参阅 支持数组 API 标准

参考文献

示例

假设我们有以下两个样本的汇总数据(样本方差是校正后的样本方差)

                 Sample   Sample
           Size   Mean   Variance
Sample 1    13    15.0     87.5
Sample 2    11    12.0     39.0

将 t 检验应用于此数据(假设总体方差相等)

>>> import numpy as np
>>> from scipy.stats import ttest_ind_from_stats
>>> ttest_ind_from_stats(mean1=15.0, std1=np.sqrt(87.5), nobs1=13,
...                      mean2=12.0, std2=np.sqrt(39.0), nobs2=11)
Ttest_indResult(statistic=0.9051358093310269, pvalue=0.3751996797581487)

为了比较,这里是从中获取这些汇总统计信息的数据。使用此数据,我们可以使用 scipy.stats.ttest_ind 计算相同的结果

>>> a = np.array([1, 3, 4, 6, 11, 13, 15, 19, 22, 24, 25, 26, 26])
>>> b = np.array([2, 4, 6, 9, 11, 13, 14, 15, 18, 19, 21])
>>> from scipy.stats import ttest_ind
>>> ttest_ind(a, b)
TtestResult(statistic=0.905135809331027,
            pvalue=0.3751996797581486,
            df=22.0)

假设我们改为使用二进制数据,并希望应用 t 检验来比较两个独立组中 1 的比例

                  Number of    Sample     Sample
            Size    ones        Mean     Variance
Sample 1    150      30         0.2        0.161073
Sample 2    200      45         0.225      0.175251

样本均值 \(\hat{p}\) 是样本中 1 的比例,二进制观测值的方差估计为 \(\hat{p}(1-\hat{p})\)

>>> ttest_ind_from_stats(mean1=0.2, std1=np.sqrt(0.161073), nobs1=150,
...                      mean2=0.225, std2=np.sqrt(0.175251), nobs2=200)
Ttest_indResult(statistic=-0.5627187905196761, pvalue=0.5739887114209541)

为了比较,我们可以使用 0 和 1 的数组和上面的 scipy.stat.ttest_ind 计算 t 统计量和 p 值。

>>> group1 = np.array([1]*30 + [0]*(150-30))
>>> group2 = np.array([1]*45 + [0]*(200-45))
>>> ttest_ind(group1, group2)
TtestResult(statistic=-0.5627179589855622,
            pvalue=0.573989277115258,
            df=348.0)