R - 多个 t 测试,针对不同控件的多个组
R - Multiple t-tests, multiple groups against different controls
所以我正在尝试针对多个浓度的多个干预(与控制相比)执行多个 t 检验(或方差分析,如果这也有效)。
下面是我的长格式数据模型(但每个样本和浓度都有多行)。理想情况下,它将 运行 多个 t 检验将每个浓度的每个测试样本与其各自的对照浓度进行比较。即样品 A-2-样品 B-2 = 0.001,样品 A-4-样品 B-4 = 0.005,样品 A-16-样品 B-16, 0.01,样品 A-2-样品 C-2 = 0.967,等等. 两个测试组(例如样本 B-样本 C 或样本 B-2-样本 B-4)之间的比较是无关紧要的。
我有很多数据集要执行此操作,所以我不想手动拆分它们。我见过很多用 2 个变量而不是 3 个变量创建 t 检验的例子。有没有更好的方法来处理这个问题?我是否应该只进行三向方差分析并忽略我不需要的内容?
Name
Control(y/n)
Concentration
Output
Sample A
Control
2
0.123
Sample A
Control
4
0.567
Sample A
Control
16
1.075
Sample B
Test
2
0.956
Sample B
Test
4
5.435
Sample B
Test
16
20.157
Sample C
Test
2
0.354
Sample C
Test
4
2.156
Sample C
Test
16
2.569
Sample D
Test
2
0.001
Sample D
Test
4
0.231
Sample D
Test
16
0.451
在这里回答我自己的问题。我实际上发现,在我的实验中,不同浓度组之间的差异并不相等。我最终将它们拆分成单独的数据帧,然后分别对每个数据帧进行 运行ning 方差分析,得到一个 p-values 的列表,然后使用 Tukey's 重新组合该列表。不可避免地,我 运行 遇到了一个多重比较问题,但它不会单独工作,我总是可以在之后应用单独的 post-hoc 更正。代码看起来有点像下面这样。我本可以在方差分析步骤之后使用 for 循环,但我没有太多的注意力,所以我只是没有理会它。它通过针对每个浓度的所有排列执行方差分析,但我通过在转换步骤中选择 [1:4,],它仅显示包含样本 A.
的排列的 p-values
##Using melt tutorial from here:
##Using ANOVA tutorial from here: http://www.sthda.com/english/wiki/two-way-anova-test-in-r
setwd("c:/R/Whosebug")
library(data.table)
library(ggpubr)
sample <- read.csv("DATA.csv", check.names = FALSE, fileEncoding = 'UTF-8-BOM')
View(sample)
longo <- melt(setDT(sample), id.vars = c("Concentration"), variable.name = "Name")
View(longo)
ggboxplot(longo, x = "Concentration", y = "Output", color = "Name")
ggline(longo, x = "Concentration", y = "Output", color = "Name",
add = c("mean_se", "dotplot"))
##Split these out so ANOVA can be performed on individual concentrations
ConSplit <- split(longo, f = longo$Concentration, drop = TRUE)
list2env(ConSplit,envir=.GlobalEnv)
#16
D16 <- as.data.frame(`16`)
A16<-aov(Output ~ Name, data = D16)
summary(A16)
T16 <- TukeyHSD(A16)
##Whatever, let's just make all of em
#4
D4 <- as.data.frame(`4`)
A4<-aov(Output ~ Name, data = D4)
summary(A4)
T4 <- TukeyHSD(A4)
#2
D2 <- as.data.frame(`2`)
A2<-aov(Output ~ Name, data = D2)
summary(A2)
T2 <- TukeyHSD(A2)
### LET'S OUTPUT THIS IN A USEABLE MANNER
data16 <- as.data.frame(T16[1])
data4 <- as.data.frame(T4[1])
data2 <- as.data.frame(T2[1])
#make dataframes for merge
M16 <- data.frame(Concentration = c(16))
M4 <- data.frame(Concentration = c(4))
M2 <- data.frame(Concentration = c(2))
#merge em
B16 <- transform(merge(data16[1:4,],M16,by=0,all=TRUE), row.names=Row.names, Row.names=NULL)
B4 <- transform(merge(data4[1:4,],M4,by=0,all=TRUE), row.names=Row.names, Row.names=NULL)
B2 <- transform(merge(data2[1:4,],M2,by=0,all=TRUE), row.names=Row.names, Row.names=NULL)
#Stack em
AllTogetherNow <- rbind(B16,B4,B2)
#See em
View(AllTogetherNow)
#Write em
write.csv(AllTogetherNow, "COMBINEDPVALS.csv")
所以我正在尝试针对多个浓度的多个干预(与控制相比)执行多个 t 检验(或方差分析,如果这也有效)。
下面是我的长格式数据模型(但每个样本和浓度都有多行)。理想情况下,它将 运行 多个 t 检验将每个浓度的每个测试样本与其各自的对照浓度进行比较。即样品 A-2-样品 B-2 = 0.001,样品 A-4-样品 B-4 = 0.005,样品 A-16-样品 B-16, 0.01,样品 A-2-样品 C-2 = 0.967,等等. 两个测试组(例如样本 B-样本 C 或样本 B-2-样本 B-4)之间的比较是无关紧要的。
我有很多数据集要执行此操作,所以我不想手动拆分它们。我见过很多用 2 个变量而不是 3 个变量创建 t 检验的例子。有没有更好的方法来处理这个问题?我是否应该只进行三向方差分析并忽略我不需要的内容?
Name | Control(y/n) | Concentration | Output |
---|---|---|---|
Sample A | Control | 2 | 0.123 |
Sample A | Control | 4 | 0.567 |
Sample A | Control | 16 | 1.075 |
Sample B | Test | 2 | 0.956 |
Sample B | Test | 4 | 5.435 |
Sample B | Test | 16 | 20.157 |
Sample C | Test | 2 | 0.354 |
Sample C | Test | 4 | 2.156 |
Sample C | Test | 16 | 2.569 |
Sample D | Test | 2 | 0.001 |
Sample D | Test | 4 | 0.231 |
Sample D | Test | 16 | 0.451 |
在这里回答我自己的问题。我实际上发现,在我的实验中,不同浓度组之间的差异并不相等。我最终将它们拆分成单独的数据帧,然后分别对每个数据帧进行 运行ning 方差分析,得到一个 p-values 的列表,然后使用 Tukey's 重新组合该列表。不可避免地,我 运行 遇到了一个多重比较问题,但它不会单独工作,我总是可以在之后应用单独的 post-hoc 更正。代码看起来有点像下面这样。我本可以在方差分析步骤之后使用 for 循环,但我没有太多的注意力,所以我只是没有理会它。它通过针对每个浓度的所有排列执行方差分析,但我通过在转换步骤中选择 [1:4,],它仅显示包含样本 A.
的排列的 p-values
##Using melt tutorial from here:
##Using ANOVA tutorial from here: http://www.sthda.com/english/wiki/two-way-anova-test-in-r
setwd("c:/R/Whosebug")
library(data.table)
library(ggpubr)
sample <- read.csv("DATA.csv", check.names = FALSE, fileEncoding = 'UTF-8-BOM')
View(sample)
longo <- melt(setDT(sample), id.vars = c("Concentration"), variable.name = "Name")
View(longo)
ggboxplot(longo, x = "Concentration", y = "Output", color = "Name")
ggline(longo, x = "Concentration", y = "Output", color = "Name",
add = c("mean_se", "dotplot"))
##Split these out so ANOVA can be performed on individual concentrations
ConSplit <- split(longo, f = longo$Concentration, drop = TRUE)
list2env(ConSplit,envir=.GlobalEnv)
#16
D16 <- as.data.frame(`16`)
A16<-aov(Output ~ Name, data = D16)
summary(A16)
T16 <- TukeyHSD(A16)
##Whatever, let's just make all of em
#4
D4 <- as.data.frame(`4`)
A4<-aov(Output ~ Name, data = D4)
summary(A4)
T4 <- TukeyHSD(A4)
#2
D2 <- as.data.frame(`2`)
A2<-aov(Output ~ Name, data = D2)
summary(A2)
T2 <- TukeyHSD(A2)
### LET'S OUTPUT THIS IN A USEABLE MANNER
data16 <- as.data.frame(T16[1])
data4 <- as.data.frame(T4[1])
data2 <- as.data.frame(T2[1])
#make dataframes for merge
M16 <- data.frame(Concentration = c(16))
M4 <- data.frame(Concentration = c(4))
M2 <- data.frame(Concentration = c(2))
#merge em
B16 <- transform(merge(data16[1:4,],M16,by=0,all=TRUE), row.names=Row.names, Row.names=NULL)
B4 <- transform(merge(data4[1:4,],M4,by=0,all=TRUE), row.names=Row.names, Row.names=NULL)
B2 <- transform(merge(data2[1:4,],M2,by=0,all=TRUE), row.names=Row.names, Row.names=NULL)
#Stack em
AllTogetherNow <- rbind(B16,B4,B2)
#See em
View(AllTogetherNow)
#Write em
write.csv(AllTogetherNow, "COMBINEDPVALS.csv")