多行成对 t 检验的好方法? (右)
A good way for pairwise t-test for many rows? (R)
我正在编写一个代码,根据 table 原始数据(微生物组 QIIME 分析的输出),为所有行的每组生成一个 t 检验。每行都有一个细菌和每个样本对应的值。 table 可以很大,比如每 400 行 80 列。
Group_phylum_data:
label_Group Bacteria_Firmicutes Archaea_Other Archaea_Euryarchaeota Bacteria_Other
HC 6.771703e-05 0 0.000000000 9.480385e-04
HC 3.362588e-05 0 0.016835356 5.604313e-05
HC 0.000000e+00 0 0.000000000 2.209945e-04
EPI 0.000000e+00 0 0.001121252 2.466755e-04
EPI 0.000000e+00 0 0.000000000 3.335038e-04
所以现在这些只是 2 个组(HC 和 EPI)的第一行。我想 运行 对组中列中的每个细菌进行 t 检验。
我从 rstatix 包中找到了这个 pairwise_t_test,它完全符合我的要求,还返回调整后的 p 值。由于组可以超过 2 个,我选择这个 pairwise_t_test 因为它可以处理它们并为每个组合执行统计数据。
pwc1 <- Group_phylum_data %>%
pairwise_t_test(Bacteria_Firmicutes ~ label_Group, p.adjust.method = "bonferroni")
pwc1
问题是我找不到一种方法让它成为一个循环来输入每个细菌名称并获得一个完整的 table 每行一个细菌和相应列中的统计数据,比如
.y. group1 group2 n1 n2 p p.signif p.adj p.adj.signif
<chr> <chr> <chr> <int> <int> <dbl> <chr> <dbl> <chr>
1 Bacteria_Firmicutes EPI HC 46 28 0.82 ns 0.82 ns
2 Archaea_Other EPI HC 46 28 0.453 ns 0.453 ns
这是我通过手动执行插入细菌名称的分析获得的。
我试图将名称保存在一个数组中,并将单个名称(在示例中为“Bacteria_Firmicutes”)替换为名称 [i] 之类的名称,但它不起作用。也许这是这个脚本的限制,它只适用于特定的名称......或者我做错了什么?或者,对于这个长数据集,是否有另一种可能更好的方法来获得我想要的输出?
谢谢!
您可以试试这个(Archaea_Other
为零,因此不会产生任何输出)。希望对您有所帮助。
library(reshape2)
library(rstatix)
#Melt
Melted <- reshape2::melt(data,id.vars = 'label_Group')
#Stat test
pwc1 <- Melted %>% group_by(variable) %>%
pairwise_t_test(value ~ label_Group, p.adjust.method = "bonferroni")
# A tibble: 3 x 10
variable .y. group1 group2 n1 n2 p p.signif p.adj p.adj.signif
* <fct> <chr> <chr> <chr> <int> <int> <dbl> <chr> <dbl> <chr>
1 Bacteria_Firmicutes value EPI HC 2 3 0.273 ns 0.273 ns
2 Archaea_Euryarchaeota value EPI HC 2 3 0.536 ns 0.536 ns
3 Bacteria_Other value EPI HC 2 3 0.761 ns 0.761 ns
数据
data <- structure(list(label_Group = c("HC", "HC", "HC", "EPI", "EPI"
), Bacteria_Firmicutes = c(6.771703e-05, 3.362588e-05, 0, 0,
0), Archaea_Other = c(0L, 0L, 0L, 0L, 0L), Archaea_Euryarchaeota = c(0,
0.016835356, 0, 0.001121252, 0), Bacteria_Other = c(0.0009480385,
5.604313e-05, 0.0002209945, 0.0002466755, 0.0003335038)), class = "data.frame", row.names = c(NA,
-5L))
我正在编写一个代码,根据 table 原始数据(微生物组 QIIME 分析的输出),为所有行的每组生成一个 t 检验。每行都有一个细菌和每个样本对应的值。 table 可以很大,比如每 400 行 80 列。
Group_phylum_data:
label_Group Bacteria_Firmicutes Archaea_Other Archaea_Euryarchaeota Bacteria_Other
HC 6.771703e-05 0 0.000000000 9.480385e-04
HC 3.362588e-05 0 0.016835356 5.604313e-05
HC 0.000000e+00 0 0.000000000 2.209945e-04
EPI 0.000000e+00 0 0.001121252 2.466755e-04
EPI 0.000000e+00 0 0.000000000 3.335038e-04
所以现在这些只是 2 个组(HC 和 EPI)的第一行。我想 运行 对组中列中的每个细菌进行 t 检验。 我从 rstatix 包中找到了这个 pairwise_t_test,它完全符合我的要求,还返回调整后的 p 值。由于组可以超过 2 个,我选择这个 pairwise_t_test 因为它可以处理它们并为每个组合执行统计数据。
pwc1 <- Group_phylum_data %>%
pairwise_t_test(Bacteria_Firmicutes ~ label_Group, p.adjust.method = "bonferroni")
pwc1
问题是我找不到一种方法让它成为一个循环来输入每个细菌名称并获得一个完整的 table 每行一个细菌和相应列中的统计数据,比如
.y. group1 group2 n1 n2 p p.signif p.adj p.adj.signif
<chr> <chr> <chr> <int> <int> <dbl> <chr> <dbl> <chr>
1 Bacteria_Firmicutes EPI HC 46 28 0.82 ns 0.82 ns
2 Archaea_Other EPI HC 46 28 0.453 ns 0.453 ns
这是我通过手动执行插入细菌名称的分析获得的。 我试图将名称保存在一个数组中,并将单个名称(在示例中为“Bacteria_Firmicutes”)替换为名称 [i] 之类的名称,但它不起作用。也许这是这个脚本的限制,它只适用于特定的名称......或者我做错了什么?或者,对于这个长数据集,是否有另一种可能更好的方法来获得我想要的输出? 谢谢!
您可以试试这个(Archaea_Other
为零,因此不会产生任何输出)。希望对您有所帮助。
library(reshape2)
library(rstatix)
#Melt
Melted <- reshape2::melt(data,id.vars = 'label_Group')
#Stat test
pwc1 <- Melted %>% group_by(variable) %>%
pairwise_t_test(value ~ label_Group, p.adjust.method = "bonferroni")
# A tibble: 3 x 10
variable .y. group1 group2 n1 n2 p p.signif p.adj p.adj.signif
* <fct> <chr> <chr> <chr> <int> <int> <dbl> <chr> <dbl> <chr>
1 Bacteria_Firmicutes value EPI HC 2 3 0.273 ns 0.273 ns
2 Archaea_Euryarchaeota value EPI HC 2 3 0.536 ns 0.536 ns
3 Bacteria_Other value EPI HC 2 3 0.761 ns 0.761 ns
数据
data <- structure(list(label_Group = c("HC", "HC", "HC", "EPI", "EPI"
), Bacteria_Firmicutes = c(6.771703e-05, 3.362588e-05, 0, 0,
0), Archaea_Other = c(0L, 0L, 0L, 0L, 0L), Archaea_Euryarchaeota = c(0,
0.016835356, 0, 0.001121252, 0), Bacteria_Other = c(0.0009480385,
5.604313e-05, 0.0002209945, 0.0002466755, 0.0003335038)), class = "data.frame", row.names = c(NA,
-5L))