因此,我试图在多个浓度下对多种干预措施(与对照组相比(进行多个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检验。有更好的方法来处理这个问题吗?我应该只做一个三元方差分析,忽略我不需要的东西吗?
名称 | <浓度>浓度> | 输出|||
---|---|---|---|---|
样本A | 对照 | 2 | 0.123 | |
样本A | 对照 | 4 | 0.567 | |
样本A | 对照 | 16 | 1.075 | |
样本B | 测试 | 2 | 0.956 | |
样本B | 测试 | 16 | 20.157||
样本C | 测试 | 2 | 0.354 | |
样本C | 测试 | 4 | 2.156 | |
样本C | 测试 | 16 | 2.569 | |
样本D | 测试 | 2 | 0.001 | |
样本D | 测试 | 0.231 | ||
样本D | 测试 | 16 | 0.451 |
在这里回答我自己的问题。事实上,我发现,在我的实验中,不同浓度组之间的差异并不相等。我最终将它们分解为单独的数据帧,然后分别对每个数据帧进行方差分析,用Tukey得到一个p值列表,然后重新组合该列表。不可避免的是,我遇到了一个多重比较问题,但它不会单独起作用,之后我总是可以单独进行事后更正。代码看起来有点像下面。我本可以在ANOVA步骤后使用循环,但我没有太多浓度,所以我没有为此烦恼。它通过每个浓度的所有排列进行ANOVA,但我在转换步骤中选择[1:4,],它只显示包含样本A的排列的p值。
##Using melt tutorial from here: https://stackoverflow.com/questions/2185252/reshaping-data-frame-from-wide-to-long-format
##Using ANOVA tutorial from here: http://www.sthda.com/english/wiki/two-way-anova-test-in-r
setwd("c:/R/STACKOVERFLOW")
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")