R 运行费希尔&x2019;s对存在/不存在数据帧的所有列进行精确测试
我有一个数据框,其中包含每个样本中是否存在蛋白质序列,每一行是不同的样本,每一列是蛋白质序列,除了最后一列有每个样本的组分配 如下所示:R 运行费希尔&x2019;s对存在/不存在数据帧的所有列进行精确测试,r,R,我有一个数据框,其中包含每个样本中是否存在蛋白质序列,每一行是不同的样本,每一列是蛋白质序列,除了最后一列有每个样本的组分配 如下所示: df <- data.frame(c(0,1,1,1,0,0), c(0,1,0,1,0,1), c(1,0,1,0,0,0), c(0, 0,0,1,1,1) rownames(df) <- c(“AA”, “AB”, “AC”, “STATUS”) dflappy迭代数据帧的列,因此您可以执行以下操作: l1 <- lapply(df,
df <- data.frame(c(0,1,1,1,0,0), c(0,1,0,1,0,1), c(1,0,1,0,0,0), c(0, 0,0,1,1,1)
rownames(df) <- c(“AA”, “AB”, “AC”, “STATUS”)
dflappy
迭代数据帧的列,因此您可以执行以下操作:
l1 <- lapply(df, fisher.test, y = df$STATUS)
l1
要仅获取p值,请再次使用lappy
:
lapply(l1, function(x) x$p.value)
要以可用的形式获得它,您可以取消列出它:
unlist(lapply(l1, function(x) x$p.value))
很明显,您想要舍弃STATUS值,因为这没有多大意义
“整洁”的方法是使用purrr
和broom
:
purrr::map(df, ~fisher.text(.x, df$STATUS)) %>%
purrr::map_dfr(broom::tidy, .id = "sequence")
但是我不知道哪种方法对那么多的列来说更快
此外,您可能还应该关注这么多测试的错误率。您是否计划通过某种方法(例如Bonferroni)调整p值?我想将其用作特征选择方法,以识别在基于p值的分类中最有用的变量。我对统计数据不太熟悉,所以你会建议对此进行p值修正吗?如果你能用这种方法解释高(?)错误率的原因,我将不胜感激。@JackArnestad,这是一个问题,因为人们可能更熟悉你的领域。你可能可以将这些测试用作筛选而不是假设测试,但请确保你正为你的目标适当地使用它。您可以在上找到关于这个确切主题的良好讨论,如@Brian所建议的,请参阅关于输入。R具有p.adjust
功能。
unlist(lapply(l1, function(x) x$p.value))
AA AB AC STATUS
1.0 1.0 0.4 0.1
purrr::map(df, ~fisher.text(.x, df$STATUS)) %>%
purrr::map_dfr(broom::tidy, .id = "sequence")
sequence estimate p.value conf.low conf.high method alternative
1 AA 0.3219834 1.0 0.002852567 14.836129 Fisher's Exact Test for Count Data two.sided
2 AB 3.1057504 1.0 0.067403027 350.561487 Fisher's Exact Test for Count Data two.sided
3 AC 0.0000000 0.4 0.000000000 4.922984 Fisher's Exact Test for Count Data two.sided
4 STATUS Inf 0.1 0.647974586 Inf Fisher's Exact Test for Count Data two.sided