如何在 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
),列包括 estimate
、statistic
和 p.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
作为名称,这可能非常有用。
我是 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
),列包括 estimate
、statistic
和 p.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
作为名称,这可能非常有用。