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

3

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

这是我的数据框的部分内容

enter image description here

列0代表基因类型,其他列是患者样本。数据集中的样本代表患者。对于每个患者,为了将其疾病归类为以下几种情况之一:EPD、JPA、MED、MGL、RHB,测量了7070个基因的表达(值)。

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

我尝试使用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个回答

1
我会尽量避免在我的回答中过多地涉及统计数据,因为Stack Overflow的重点是技术问题,但是进行多次测试存在相当大的理论问题。简而言之,接受需要0.05的p值,这意味着如果零假设成立,发生这种情况的可能性仅为5%。如果您进行许多类似的测试,则拒绝零假设的可能性变得更加可能。

可以将其视为掷骰子以获得六个的情况-每次掷骰子只有六分之一的机会,但如果您掷100次,则几乎可以保证您的很多次掷骰子都是六(即使在单个掷骰子中这是不太可能的)。

与其优化代码以执行多个t测试,不如考虑寻找可跨多个比较工作的显着性替代测试。

Scipy具有可以用于多个比较的显着性的ANOVA测试,如下所示:

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

虽然这只会给你整体测试的F值和P值。如果你想更详细地进行分解,可能值得研究其他测试,比如Tukey测试,该测试由statsmodels模块支持。你可以在这里找到一个有用的指南关于如何执行此测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接