[英]T-test in Pandas
如果我想計算 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檢驗,看看cat1和cat2的平均值在統計上是否不同。 我怎樣才能做到這一點?
這取決於你想做什么樣的 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
編輯:我沒有意識到這是關於數據格式的。 你可以用
import pandas as pd
import scipy
two_data = pd.DataFrame(data, index=data['Category'])
然后訪問類別就像
scipy.stats.ttest_ind(two_data.loc['cat'], two_data.loc['cat2'], equal_var=False)
loc operator
按標簽訪問行。
一側或兩側依賴或獨立
如果您有兩個獨立樣本,但您不知道它們的方差相等,則可以使用Welch 的 t-test 。 就這么簡單
scipy.stats.ttest_ind(cat1['values'], cat2['values'], equal_var=False)
有關偏愛 Welch 測試的原因,請參閱https://stats.stackexchange.com/questions/305/when-conducting-at-test-why-would-one-prefer-to-assume-or-test-for-equal-變種
對於兩個相關樣本,您可以使用
scipy.stats.ttest_rel(cat1['values'], cat2['values'])
我稍微簡化了代碼。
from scipy.stats import ttest_ind
ttest_ind(*my_data.groupby('Category')['value'].apply(lambda x:list(x)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.