簡體   English   中英

Pandas 中的 T 檢驗

[英]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檢驗,看看cat1cat2的平均值在統計上是否不同。 我怎樣才能做到這一點?

這取決於你想做什么樣的 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按標簽訪問行。


正如@G Garcia 所說

一側或兩側依賴或獨立

如果您有兩個獨立樣本,但您不知道它們的方差相等,則可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM