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")