从TukeyHSD测试中提取“p adj”值

时间:2013-09-10 18:12:22

标签: r

使用虚拟数据集:

Species      Var1     Var2   Var3
   a          1         2      3
   a          4         5      6 
   b          7         8      9
   b          10       11      12

我有多个物种和大约50个变量(Var50)。我想在每个响应变量的配对分组变量(Species)上执行单向Anova,并获得在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命令,但我不知道如何在每次迭代时改变响应变量时保持分组变量不变。

任何建议都将深表感谢。

2 个答案:

答案 0 :(得分:2)

如果您还在寻找变量,请尝试此操作:

summary(fm1 <- aov(breaks ~ wool + tension, data = warpbreaks))
kk<-TukeyHSD(fm1, "tension", ordered = TRUE)
kk$tension
result<-data.frame( kk$tension)
result["p.adj"]

            p.adj
M-H 0.447421021
L-H 0.001121788
L-M 0.033626219

答案 1 :(得分:2)

答案对我的系统无效。这是我的解决方案,从提供的代码Metrics开始。

 summary(fm1 <- aov(breaks ~ wool + tension, data = warpbreaks))
 kk<-TukeyHSD(fm1, "tension", ordered = TRUE)
 kk<-kk$tension          #strips off some headers in kk
 kk<-as.data.frame(kk)   #converts to data frame
 kk<-kk$'p adj'          #selects relevant output
 print(kk)               #to check answer