R 中的多重 T 检验
Multiple T-test in R
我在一个矩阵中有 94 个变量(样本+蛋白质+组)和 172 个观察值:
Sample Protein1 Protein2 ... Protein92 Group
1 1.53 3.325 ... 5.63 0
2 2.32 3.451 ... 6.32 0
.
.
.
103 3.24 4.21 ... 3.53 0
104 3.44 5.22 ... 6.78 1
.
.
.
192 6.75 4.34 ... 6.15 1
一些样本在第 0 组,一些在第 1 组。我想使用 t 检验来测试第 0 组和第 1 组之间是否存在差异,并且我想对所有蛋白质进行测试。我正在考虑使用应用程序,但我不确定如何使用它。
此外,名称不是 Protein1、protein2...,它要长得多,所以我不想把它们都写下来。
我也只想要矩阵中每个蛋白质的 p 值,如下所示:
Protein p-value
Protein1 0.00563
Protein2 0.0640
.
.
Protein92 0.610
或类似的东西,以便我之后可以找到 p 值低于 0.05/92 的那些。
编辑:
开始以长格式工作这件事不再是问题了:
library(tidyverse)
df %>%
gather(Protein, Value,-Sample,-Group)) %>%
group_by(Protein) %>%
do(broom::tidy(t.test(Value ~ Group, data = .))) %>%
ungroup() %>%
mutate(Adjusted_pval = p.adjust(p.value, method = "fdr"))
试试这样的东西:
sapply(df[,2:93], function(i) t.test(i ~ df$Group)$p.value)
将return一个p.value的数组。
您可以将其存储为 data.frame
并通过这样做寻找低 p 值:
x <- data.frame(p.value= sapply(df[,2:93], function(i) t.test(i ~ df$Group)$p.value))
x$protein_name <- rownames(x) # edit: new column for protein_name
rownames(x) <- NULL # edit: new column for protein_name
x[x$p.value < 0.05/92,]
请注意,数组元素的名称和数据框的行名称保留 Protein1、Protein2 等。编辑:我为每个 OP 意图添加了一个蛋白质名称列,并将其从行名称中删除所以它不会在 print()
出现两次
P.S。很高兴看到您正在为多重比较调整 p 值。
我在一个矩阵中有 94 个变量(样本+蛋白质+组)和 172 个观察值:
Sample Protein1 Protein2 ... Protein92 Group
1 1.53 3.325 ... 5.63 0
2 2.32 3.451 ... 6.32 0
.
.
.
103 3.24 4.21 ... 3.53 0
104 3.44 5.22 ... 6.78 1
.
.
.
192 6.75 4.34 ... 6.15 1
一些样本在第 0 组,一些在第 1 组。我想使用 t 检验来测试第 0 组和第 1 组之间是否存在差异,并且我想对所有蛋白质进行测试。我正在考虑使用应用程序,但我不确定如何使用它。 此外,名称不是 Protein1、protein2...,它要长得多,所以我不想把它们都写下来。
我也只想要矩阵中每个蛋白质的 p 值,如下所示:
Protein p-value
Protein1 0.00563
Protein2 0.0640
.
.
Protein92 0.610
或类似的东西,以便我之后可以找到 p 值低于 0.05/92 的那些。
编辑:
开始以长格式工作这件事不再是问题了:
library(tidyverse)
df %>%
gather(Protein, Value,-Sample,-Group)) %>%
group_by(Protein) %>%
do(broom::tidy(t.test(Value ~ Group, data = .))) %>%
ungroup() %>%
mutate(Adjusted_pval = p.adjust(p.value, method = "fdr"))
试试这样的东西:
sapply(df[,2:93], function(i) t.test(i ~ df$Group)$p.value)
将return一个p.value的数组。
您可以将其存储为 data.frame
并通过这样做寻找低 p 值:
x <- data.frame(p.value= sapply(df[,2:93], function(i) t.test(i ~ df$Group)$p.value))
x$protein_name <- rownames(x) # edit: new column for protein_name
rownames(x) <- NULL # edit: new column for protein_name
x[x$p.value < 0.05/92,]
请注意,数组元素的名称和数据框的行名称保留 Protein1、Protein2 等。编辑:我为每个 OP 意图添加了一个蛋白质名称列,并将其从行名称中删除所以它不会在 print()
P.S。很高兴看到您正在为多重比较调整 p 值。