熊猫的T检验

时间:2012-11-15 19:11:57

标签: python pandas scipy statistics hypothesis-test

如果我想计算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 -test来查看 cat1 cat2 <的平均值/ em>在统计上有所不同。我怎么能这样做?

3 个答案:

答案 0 :(得分:67)

这取决于你想做什么样的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统计量的元组&amp; p值

请参阅此处了解其他t-tests http://docs.scipy.org/doc/scipy/reference/stats.html

答案 1 :(得分:9)

编辑:我没有意识到这是关于数据格式的。你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'])

答案 2 :(得分:0)

我简化了代码。

is obsoleted