我有两个值的样本,在两个不同的条件下在同一组上测量:
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 值来执行的:
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)
manual,scipy
返回应该的第一个数字等于 t - 值,但它不是。我在这里遗漏了什么或者scipy.stats
是否错误地计算了统计数据?
答案 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。我发现它与手动计算的情况有所不同。但由于我不是统计学专家,您可能希望自己查看实施情况。那是我现在能给出的最好的提示......