计算t统计量使用`scipy.stats`
我有值的两个样本,两种不同的条件下,对同一组测量:计算t统计量使用`scipy.stats`
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 。如在维基百科链路所看到的,这是通过使用下面的公式计算所述吨值来执行:
凡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)
返回应,根据scipy
manual,等于吨 - 值,但它不。我在这里错过了什么,或者是scipy.stats
错误地计算统计信息?
的差异似乎是np.std
计算与N
自由度的标准偏差,而ttest_rel
使用偏估计来计算的话(N-1
自由度) 。
可以通过指定为1
在np.std
在自由度的差异解决这个问题:
>>> (np.average(v1 - v2) * np.sqrt(len(v1)))/(np.std(v1 - v2, ddof=1))
-1.3909712197206947
两个计算然后同意。
我在我的python文件夹的site-packages
目录中查看了scipy的源代码。在文件scipy/stats/stats.py
中显示了如何计算ttest_rel。我发现它的做法与手动计算的案例有点不同。但是因为我不是统计专家,所以你可能想看看你自己的实现。这是最好的提示,我可以在瞬间给...
你是对的,ajcr的回答也解释了为什么ttest是正确的,我的方法不正确。 – 5xum 2015-02-09 10:09:02
啊,当然。标准差的自由度。谢谢你指出我。接受答案。 – 5xum 2015-02-09 10:08:30