r - 多重 t 检验比较

标签 r statistics anova t-test

我想知道如何使用 t.testpairwise.t.test 对基因组合进行多重比较。首先,我如何比较基因 1 与基因 3、基因 3 与基因 4 等的所有组合?其次,我如何才能只比较基因 1 与其他基因的组合?

我需要为此创建一个函数吗?

假设我有下面的数据集,当“参数长度不同”时,我该怎么办?

谢谢。

Gene   S1      S2      S3      S4      S5      S6     S7
1   20000   12032   23948    2794    5870     782    699
3   15051   17543   18590   21005   22996   26448
4   35023   43092   41858   39637   40933   38865

最佳答案

我认为@akrun 在编程方面提供了很好的答案,但由于这个问题也与统计相关,因此有必要提及使用多个 t 检验可能不被认为是统计上合理的方法分析的数量,具体取决于完整数据集中的比较次数。所以请记住这一点。至少,此处建议应用 Bonferroni 修正或类似修正。所以我将其添加到@akrun 的代码中。

在运行 t 检验之前,最好运行方差分析以查看总体上是否存在任何差异。哥伦比亚大学在 their stats page 上对这种方法进行了有用的解释。 .

也就是说,为了回答问题的编程方面,我将向您展示如何执行这两项操作,但对于那些查找相同问题的人,请在使用此答案之前仔细检查您的方法。

为了不熟悉它的人的利益,我通过 R 中的选项 (scipen=999) 显示了以下没有科学记数法的结果。

预测试方差分析:

summary(aov(val ~ as.factor(Gene), data=gather(df, key, val, -Gene)))

                Df     Sum Sq    Mean Sq F value     Pr(>F)    
as.factor(Gene)  2 2627772989 1313886494   34.49 0.00000245 ***
Residuals       15  571374752   38091650                       
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

T 检验:

library(broom)
library(dplyr)
library(tidyr)

gather(df, key, val, -Gene) %>% 
  do(data.frame(tidy(pairwise.t.test(.$val, .$Gene, p.adjust="bonferroni"))))

  group1 group2       p.value
1      3      1 0.05691493022
2      4      1 0.00000209244
4      4      3 0.00018020669

编辑:

对于这些测试,观察的长度是否不完全相同并不特别重要。我上面概述的代码仍将运行。但是,在 R 中,使空值或空值等于 NA 通常是一种很好的做法。看这个SO answer寻找一种将值更改为 NA 的方法。

如果您想将 t 检验限制为仅进行少数基因比较,例如,基因 1 与基因 3 和基因 1 与基因 4,而不是基因 3 与基因 4,最简单的方法是仍然使用上面的代码。但是,不要在 pairwise.t.test 函数内应用 p 值校正,而只需将其仅应用于您要评估的 p 值。试试这个:

res <- gather(df, key, val, -Gene) %>% 
  do(data.frame(tidy(pairwise.t.test(.$val, .$Gene))))

res <- res[res$group1==1 | res$group2 ==1,]

res$p.value <-  p.adjust(res$p.value, method = "bonferroni")

print(res)

  group1 group2        p.value
1      3      1 0.015989134399
2      4      1 0.000001458475

请注意,以上仅对我们已经子集化并想要评估的测试应用 p 值校正,在本例中是涉及基因 1 的任何组合,不包括不涉及基因 1 的组合。

关于r - 多重 t 检验比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46305742/

相关文章:

python - 是否可以在 Scipy 的 Mann-Whitney U 检验中指定替代假设?

python - 如何使用核密度估计绘制样本

r - 使用data.table根据另一列中的类别计算出现的百分比

r - 用前一行值填充数据框

php - 使用 PHP 和网站跟踪 iPhone 应用程序的使用情况

r - Anova 表比较组,在 R 中,导出到 latex ?

r - 具有加权因变量的双向方差分析

r - 如何在宽格式的data.frame上运行ANOVA?

r - 在没有当前行的情况下使用 rollaply

r - 在 R 中一次对齐多个动物园对象