使用`scipy.stats`计算t统计量

时间:2015-02-09 08:19:54

标签: python numpy statistics scipy

我有两个值的样本,在两个不同的条件下在同一组上测量:

import numpy as np
import scipy.stats as st

v1 = np.array([ 152.65285 ,   97.011475,   77.56722 ,  120.19234 ])
v2 = np.array([ 149.19984,  172.08975,  143.92285,  108.60255])

我想要做的是对此特定数据集执行dependent t-test for paired examples。如维基百科链接所示,这是通过使用以下公式计算 t 值来执行的:

enter image description here

mu_0设置为0.我执行了此计算并计算出t_value等于

>>> (np.average(v1 - v2) * np.sqrt(len(v1))) / (np.std(v1 - v2))
-1.6061552162815307

但是,使用scipy.stats包,我得到的结果略有不同:

>>> st.ttest_rel(v1,v2)
(-1.3909712197206947, 0.25844779134312651)

根据st.ttest_rel(v1,v2) manualscipy返回应该的第一个数字等于 t - 值,但它不是。我在这里遗漏了什么或者scipy.stats是否错误地计算了统计数据?

2 个答案:

答案 0 :(得分:3)

差异似乎是np.std使用N自由度计算标准差,而ttest_rel使用偏差估算来计算(N-1自由度)。

您可以通过将np.std中的自由度差异指定为1来解决此问题:

>>> (np.average(v1 - v2) * np.sqrt(len(v1))) / (np.std(v1 - v2, ddof=1))
-1.3909712197206947

然后两个计算同意。

答案 1 :(得分:1)

我在python文件夹的site-packages目录中查看了scipy的源代码。在文件scipy/stats/stats.py中显示了如何计算ttest_rel。我发现它与手动计算的情况有所不同。但由于我不是统计学专家,您可能希望自己查看实施情况。那是我现在能给出的最好的提示......