ttest_ind_from_stats#
- scipy.stats.ttest_ind_from_stats(mean1, std1, nobs1, mean2, std2, nobs2, equal_var=True, alternative='two-sided')[源代码]#
使用描述性统计量计算两个独立样本均值的 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(默认值),则执行假设总体方差相等的标准独立双样本检验 [1]。如果为 False,则执行韦尔奇 t 检验,该检验不假设总体方差相等 [2]。
- alternative{‘two-sided’, ‘less’, ‘greater’}, 可选
定义备择假设。以下选项可用(默认为 ‘two-sided’)
‘two-sided’:分布的均值不相等。
‘less’:第一个分布的均值小于第二个分布的均值。
‘greater’:第一个分布的均值大于第二个分布的均值。
在 1.6.0 版本中添加。
- 返回:
- statisticfloat 或 array
计算的 t 统计量。
- pvaluefloat 或 array
双尾 p 值。
注释
该统计量计算为
(mean1 - mean2)/se
,其中se
是标准误差。因此,当 mean1 大于 mean2 时,该统计量为正值;当 mean1 小于 mean2 时,该统计量为负值。此方法不检查 std1 或 std2 的任何元素是否为负数。如果调用此方法时,std1 或 std2 参数的任何元素为负数,则此方法将返回与传递
numpy.abs(std1)
和numpy.abs(std2)
时相同的结果;不会发出任何异常或警告。参考文献
示例
假设我们有两个样本的汇总数据,如下所示(样本方差是修正后的样本方差)
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)