如何在python中使用t检验方法计算t和p值?

时间:2020-06-01 08:28:59

标签: python statistics

我有一个可以同时测量大量基因表达水平的数据集。

这是我数据框的一部分

enter image description here

第0列指基因类型,其他列为患者样品。数据集中的样本代表患者。为每位患者测量7070个基因表达(值),以将其疾病分类为以下情况之一:EPD,JPA,MED,MGL,RHB。

我想生成具有最高2、4、6、8、10、12、15、20、25和30个最高基因的子集 每个类别的绝对T值最高。

我尝试对每个可能的对使用scipy.stats.ttest_ind。

def calculate_t():
t_res = []
for cls in range(np.max(classes)):
    samp = np.where(classes == cls)[0]
    for gene in range(train.shape[1]):
        for other_genes in range(gene, train.shape[1]):
            t_res.append(ttest_ind(train[samp, gene], train[samp, other_genes])[:])

return t_res

我没有继续,因为我认为这会花费太长时间。

如果有人有任何想法,我将不胜感激。祝你有美好的一天。

1 个答案:

答案 0 :(得分:1)

我将尽量避免使统计数据过于繁重,因为Stack Overflow旨在关注技术问题,但是进行多重测试存在很大的理论问题。简而言之,接受通常需要p值为0.05,这意味着如果原假设为真,则其出现的机会仅为5%。如果您进行大量类似的测试,那么其中一个会拒绝原假设的可能性就更大。

可以想像一下,如果您掷骰子获得6个骰子-每掷骰子只有六分之一的机会,但是如果您掷骰百次,则或多或少可以保证很多掷骰子都是6 (即使在特定情况下也不大可能)。

与其优化代码以进行多个t检验,不如为其他目的设计有意义的,可用于多个比较的测试。

Scipy具有一项ANOVA测试,您可以将其用于多个比较中的显着性,例如:

stats.f_oneway(df['sample_one'], df['sample_two'], df['sample_three'])

尽管这只会为您提供整体测试的F和P值。如果您想进一步细分,可能值得研究其他测试,例如statsmodels模块支持的Tukey测试。您可以找到有用的指南on carrying it out here.