如何在 r 中循环进行 t-student 测试?

how to make t-student test in loop in r?

我是 R 的新手,我想做的事情很简单,但我需要帮助。

我有一个类似于上面的数据库;其中蛋白质的点数 = "name",grupo = I 组和 II 组,APF = 荧光读数。 我想通过比较第一组和第二组来对每种蛋白质进行 tstudent 测试,但要循环进行。

在上面的数据库中只有 1 种蛋白质 (147) 但我的真实数据库中有 444 种蛋白质。

您可以使用 dplyr and my broom 包在每个组中执行 t.test。如果您的数据存储在名为 dat 的数据框中,您将执行:

library(dplyr)
library(broom)

results <- dat %>%
    group_by(Spot.number) %>%
    do(tidy(t.test(APF ~ grupo, .)))

这通过对 Spot.number 定义的每个组执行 t.test(APF ~ grupo, .) 来实现。然后 broom 的 tidy 函数将其转换为单行数据框,以便可以重新组合。 results 数据框将包含每个蛋白质一行 (Spot.number),列包括 estimatestatisticp.value.

有关 dplyr 和 broom 组合的更多信息,请参阅 this vignette

从一些假数据开始:

set.seed(0)
Spot.number <- rep(147:149, each=10)
grupo <- rep(rep(1:2, each=5), 3)
APF <- rnorm(30)
gel <- data.frame(Spot.number, grupo, APF)

> head(gel)
  Spot.number grupo        APF
1         147     1  2.1780699
2         147     1 -0.2609347
3         147     1 -1.6125236
4         147     1  1.7863384
5         147     1  2.0325473
6         147     2  0.6261739

您可以使用 lapply 遍历 gel 的子集,由 Spot.number:

分割
tests <- lapply(split(gel, gel$Spot.number), function(spot) t.test(APF ~ grupo, spot))

或者只是

tests <- by(gel, gel$Spot.number, function(spot) t.test(APF ~ grupo, spot))

然后您可以继续,例如只取 p 值:

sapply(tests, "[[", "p.value")

#      147       148       149 
#0.2941609 0.9723856 0.5726007 

或置信区间

sapply(tests, "[[", "conf.int")
#           147       148        149
# [1,] -0.985218 -1.033815 -0.8748502
# [2,]  2.712395  1.066340  1.4240488

并且生成的向量或矩阵已经具有 Spot.number 作为名称,这可能非常有用。