scipy PandasT检验

yhqotfr8  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(205)

如果我想计算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-检验,看看 * cat 1 * 和 * cat 2 * 的均值是否有统计学上的差异。我该怎么做呢?

pftdvrlh

pftdvrlh1#

这取决于你想做什么样的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参见此处

jhdbpxl9

jhdbpxl92#

编辑:我还没有意识到这是关于数据格式的。

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加西亚所说
单侧或双侧从属或独立
如果你有两个独立的样本,但是你 * 不知道它们有相等的方差 *,你可以使用Welch's t-test

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

关于选择Welch检验的原因,请参见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'])
yhived7q

yhived7q3#

我稍微简化了代码。

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

相关问题