2012-11-15 31 views
37

如果我想計算兩類在大熊貓的意思,我可以做這樣的:t檢驗熊貓

data = {'Category': ['cat2','cat1','cat2','cat1','cat2','cat1','cat2','cat1','cat1','cat1','cat2'], 
     'values': [1,2,3,1,2,3,1,2,3,5,1]} 
my_data = DataFrame(data) 
my_data.groupby('Category').mean() 

Category:  values: 
cat1  2.666667 
cat2  1.600000 

我有很多格式化這樣的數據,現在我需要做一個牛逼測試至看看CAT1CAT2的平均值是統計學差異。我怎樣才能做到這一點?

回答

53

這取決於你想要做的(單面或雙面依賴或獨立)什麼樣的t檢驗,但它應該是簡單的:

from scipy.stats import ttest_ind 

cat1 = my_data[my_data['Category']=='cat1'] 
cat2 = my_data[my_data['Category']=='cat2'] 

ttest_ind(cat1['values'], cat2['values']) 
>>> (1.4927289925706944, 0.16970867501294376) 

它返回與t統計量的元組& p值

在這裏看到其他的t檢驗http://docs.scipy.org/doc/scipy/reference/stats.html

3

編輯:我沒有意識到這是關於數據格式。您could use

two_data = pd.DataFrame(data, index=data['Category']) 

然後accessing the categories很簡單,只要

scipy.stats.ttest_ind(two_data.loc['cat'], two_data.loc['cat2'], equal_var=False) 

loc operator通過標籤訪問行。


由於@G Garcia said

單面或雙面依賴或獨立

如果你有兩個獨立樣本但你不知道他們有平等的方差,你可以使用Welch's t-test。它是一樣簡單

scipy.stats.ttest_ind(cat1['values'], cat2['values'], equal_var=False) 

爲了更喜歡韋爾奇的測試,請參閱https://stats.stackexchange.com/questions/305/when-conducting-a-t-test-why-would-one-prefer-to-assume-or-test-for-equal-vari

對於兩個因樣品,您可以使用

scipy.stats.ttest_rel(cat1['values'], cat2['values'])