计算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 。如在维基百科链路所看到的,这是通过使用下面的公式计算所述值来执行:

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)返回,根据scipymanual,等于 - 值,但它不。我在这里错过了什么,或者是scipy.stats错误地计算统计信息?

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

可以通过指定为1np.std在自由度的差异解决这个问题:

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

两个计算然后同意。

+0

啊,当然。标准差的自由度。谢谢你指出我。接受答案。 – 5xum 2015-02-09 10:08:30

我在我的python文件夹的site-packages目录中查看了scipy的源代码。在文件scipy/stats/stats.py中显示了如何计算ttest_rel。我发现它的做法与手动计算的案例有点不同。但是因为我不是统计专家,所以你可能想看看你自己的实现。这是最好的提示,我可以在瞬间给...

+0

你是对的,ajcr的回答也解释了为什么ttest是正确的,我的方法不正确。 – 5xum 2015-02-09 10:09:02