web-dev-qa-db-ja.com

T =テストPandas

パンダの2つのカテゴリの平均を計算したい場合、次のようにできます。

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は統計的に異なります。どうやってやるの?

52
hirolau

それはあなたがどのような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値を含むTupleを返します

他のt検定についてはこちらをご覧ください http://docs.scipy.org/doc/scipy/reference/stats.html

73
G Garcia

編集:これがデータ形式に関するものだとは気がつきませんでした。あなた は使用できます

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ガルシアが言ったように

片面または両面の依存または独立

2つの独立したサンプルがあるが、等しい分散があることを知らないの場合、 ウェルチのt検定 。それは次のように簡単です

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

ウェルチのテストを好む理由については、 https://stats.stackexchange.com/questions/305/when-conducting-at-test-why-would-one-prefer-to-assume-or -equal-variのテスト

2つの従属サンプルの場合、次を使用できます。

scipy.stats.ttest_rel(cat1['values'], cat2['values'])
10
serv-inc

コードを少し簡略化します。

from scipy.stats import ttest_ind
ttest_ind(*my_data.groupby('Category')['value'].apply(lambda x:list(x)))
2
Ningrong Ye