多重 t 检验比较
Multiple t-test comparisons
我想知道如何使用 t.test
或 pairwise.t.test
对基因组合进行多重比较。首先,我如何比较基因 1 与基因 3、基因 3 与基因 4 等的所有组合?其次,我如何才能只比较基因 1 与其他基因的组合?
我需要为此创建一个函数吗?
假设我有下面的数据集,当 "arguments are not the same length" 时,我能做什么?
谢谢。
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
我认为 @ak运行 在编程方面有很好的帮助,但由于这个问题也与统计相关,所以重要的是要提到使用多个 t 检验可能不被认为是统计上合理的分析方法,具体取决于完整数据集中的比较次数。所以请记住这一点。至少,此处建议应用 Bonferroni 修正或类似修正。所以我将其添加到@ak运行 的代码中。
在 运行 进行 t 检验之前,最好进行 运行 方差分析,看看总体上是否存在任何差异。哥伦比亚大学在 their stats page.
上对此方法有一个有用的解释
也就是说,为了回答问题的编程方面,我将向您展示如何执行这两项操作,但是对于那些查找相同问题的人,请在使用此答案之前仔细检查您的方法。
我通过 R 中的选项 (scipen=999) 显示了以下没有科学记数法的结果,以方便那些不太熟悉它的人。
t 检验前方差分析:
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 的组合。
好的,这是另一个统计建议。您可能想看看 Hotelling T-test,作为多元分布的 t 统计量的概括。
我想知道如何使用 t.test
或 pairwise.t.test
对基因组合进行多重比较。首先,我如何比较基因 1 与基因 3、基因 3 与基因 4 等的所有组合?其次,我如何才能只比较基因 1 与其他基因的组合?
我需要为此创建一个函数吗?
假设我有下面的数据集,当 "arguments are not the same length" 时,我能做什么?
谢谢。
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
我认为 @ak运行 在编程方面有很好的帮助,但由于这个问题也与统计相关,所以重要的是要提到使用多个 t 检验可能不被认为是统计上合理的分析方法,具体取决于完整数据集中的比较次数。所以请记住这一点。至少,此处建议应用 Bonferroni 修正或类似修正。所以我将其添加到@ak运行 的代码中。
在 运行 进行 t 检验之前,最好进行 运行 方差分析,看看总体上是否存在任何差异。哥伦比亚大学在 their stats page.
上对此方法有一个有用的解释也就是说,为了回答问题的编程方面,我将向您展示如何执行这两项操作,但是对于那些查找相同问题的人,请在使用此答案之前仔细检查您的方法。
我通过 R 中的选项 (scipen=999) 显示了以下没有科学记数法的结果,以方便那些不太熟悉它的人。
t 检验前方差分析:
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 的组合。
好的,这是另一个统计建议。您可能想看看 Hotelling T-test,作为多元分布的 t 统计量的概括。