2012-11-15 31 views
37

Nếu tôi muốn để tính toán giá trị trung bình của hai nhóm trong Pandas, tôi có thể làm điều đó như thế này:T-test trong Pandas

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 

Tôi có rất nhiều dữ liệu được định dạng theo cách này, và bây giờ tôi cần phải thực hiện T -test để xem liệu giá trị trung bình của cat1cat2 có khác biệt về mặt thống kê hay không. Làm thế nào tôi có thể làm điều đó?

Trả lời

53

nó phụ thuộc những gì sắp xếp của t-test bạn muốn làm (một mặt hoặc hai đứng về phía phụ thuộc hoặc độc lập) nhưng nó phải là đơn giản như:

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) 

nó trả về một tuple với t-statistic & các giá trị p

thấy ở đây cho t-test khác http://docs.scipy.org/doc/scipy/reference/stats.html

3

EDIT: tôi đã không nhận ra điều này là về định dạng dữ liệu. Bạn could use

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

Sau đó accessing the categories cũng đơn giản như

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

Các loc operator truy cập hàng của nhãn hiệu này.


Như @G Garcia said

một mặt hoặc hai đứng về phía phụ thuộc hoặc độc lập

Nếu bạn có hai mẫu độc lập nhưng bạn không biết rằng họ có sai bằng, bạn có thể sử dụng Welch's t-test. Nó đơn giản như

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

Vì lý do thích kiểm tra của Welch, hãy xem https://stats.stackexchange.com/questions/305/when-conducting-a-t-test-why-would-one-prefer-to-assume-or-test-for-equal-vari.

Đối hai mẫu phụ thuộc, bạn có thể sử dụng

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