使用虚拟数据集:
Species Var1 Var2 Var3
a 1 2 3
a 4 5 6
b 7 8 9
b 10 11 12
我有多个物种和大约50个变量(Var50)。 我想对每个响应变量的配对分组变量(物种)执行单向方差分析,并获取在95% CI下具有统计显着性的频率输出。例如,我开始编写以下函数来执行此操作:
data<-read.table("example.txt", header=T, sep="\t")
function(y){
for(y in 2:50)
anova.r<-aov(y~Species, data = data)
result<-TukeyHSD(anova.r, conf.level = 0.95)
f.result ## I cannot figure out how to extract the "p adj" from the results
f.result<-sum(prob.result>=0.05)
write.table(f.result, file = "anova95.csv", sep = ",",
col.names = FALSE, append=TRUE)
}
最终,我希望最终的表格(虚拟答案)看起来像这样:
Var1 Var2 Var3......Var50
Frequency at 95% CI 106 200 45 246
我知道可以使用
[[]]
来访问 Tukey 检验结果中的数据。我已经尝试了 tukey.results[[1]][,1]
到 tukey.results[[1]][,3]
,但都不起作用。 tukey.results[[1]]
返回了 Tukey 检验的所有列。此外,我认为我可能需要在函数中使用
cbind
将数据放入各自的列中。或者我想可能可以使用apply
命令,但是我不知道如何在每次迭代时保持分组变量不变而改变响应变量。任何建议将不胜感激。
result$Species[4]
将会给你 "p adj"。 - eddiresult$Species
的内容,您应该能够在那里找到所需的内容;如果没有找到,那么我猜测您的示例并不代表您真正遇到的问题。 - eddiresult$Species
给出了所有预期值。前几行是diff lwr upr p adj A oil palm2-A oil palm1 -0.021441963 -0.06055280 0.01766887 0.8704602 AfricanOilPalm_1-A oil palm1 -0.001384416 -0.04049525 0.03772642 1.0000000 AfricanOilPalm_2-A oil palm1 -0.017210672 -0.05632151 0.02190016 0.9776883
。问题可能是result
的结构吗?我拥有的结构是str(result$Species)
num [1:120, 1:4]
。 - user2507608result$Species[,'p.adj']
或result$Species[, 4]
。 - eddiresult$Species[, 4]
有点用,但为了获得一列中成对比较的列表和另一列中相应的“p adj”值,我不得不使用来自reshape
包的melt(result$Species[, 4])
. 不过还是非常感谢。现在我必须继续使用该函数,尝试获得我的最终结果。再次感谢。 - user2507608