2015-02-09 151 views
1

我有值的兩個樣本,兩種不同的條件下,對同一組測量:計算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錯誤地計算統計信息?

回答

2

的差異似乎是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

1

我在我的python文件夾的site-packages目錄中查看了scipy的源代碼。在文件scipy/stats/stats.py中顯示瞭如何計算ttest_rel。我發現它的做法與手動計算的案例有點不同。但是因爲我不是統計專家,所以你可能想看看你自己的實現。這是最好的提示,我可以在瞬間給...

+0

你是對的,ajcr的回答也解釋了爲什麼ttest是正確的,我的方法不正確。 – 5xum 2015-02-09 10:09:02