首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的多重T检验

R中的多重T检验
EN

Stack Overflow用户
提问于 2015-06-30 13:38:25
回答 1查看 16K关注 0票数 5

我在矩阵中有94个变量(sample+proteins+group)和172个观察值,如下所示:

代码语言:javascript
运行
复制
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值,如下所示:

代码语言:javascript
运行
复制
Protein  p-value
Protein1   0.00563
Protein2   0.0640
.
.
Protein92  0.610

或者类似的东西,这样我就可以找到那些p值低于0.05/92的。

编辑:

开始以长格式工作,这件事不再是个问题了:

代码语言:javascript
运行
复制
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"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 13:46:45

试一试如下:

代码语言:javascript
运行
复制
sapply(df[,2:93], function(i) t.test(i ~ df$Group)$p.value)

将返回一个p.value数组。

您可以将其存储为data.frame,并通过以下操作查找低p值:

代码语言:javascript
运行
复制
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值。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31139838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档