根据我的阅读,蒙特卡洛校正通常用于成对的PERMANOVA比较,以在给定少量样品重复和有限数量的可能排列时提高p值的准确性。这很容易在PRIMER软件中实现,但我无法在R中找到现有的功能。
在R的基本p.adjust()
函数中,可能的方法是c("holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr", "none")
所以,我想知道,首先,是否有人知道现有的包或功能允许进行蒙特卡罗调整,或者,如果有人能够以相当简单的方式向我描述方法,那么我可以自己拼凑一个功能吗?
我将包含我正在使用的成对permanova函数(此函数来自https://www.researchgate.net/post/How_can_I_do_PerMANOVA_pairwise_contrasts_in_R)
data(iris)
library(vegan)
pairwise.adonis <- function(x,factors, sim.function = 'vegdist', sim.method = 'bray', p.adjust.m ='bonferroni')
{
library(vegan)
co = combn(unique(as.character(factors)),2)
pairs = c()
F.Model =c()
R2 = c()
p.value = c()
for(elem in 1:ncol(co)){
if(sim.function == 'daisy'){
library(cluster); x1 = daisy(x[factors %in% c(co[1,elem],co[2,elem]),],metric=sim.method)
} else{x1 = vegdist(x[factors %in% c(co[1,elem],co[2,elem]),],method=sim.method)}
ad = adonis(x1 ~ factors[factors %in% c(co[1,elem],co[2,elem])] );
pairs = c(pairs,paste(co[1,elem],'vs',co[2,elem]));
F.Model =c(F.Model,ad$aov.tab[1,4]);
R2 = c(R2,ad$aov.tab[1,5]);
p.value = c(p.value,ad$aov.tab[1,6])
}
p.adjusted = p.adjust(p.value,method=p.adjust.m)
sig = c(rep('',length(p.adjusted)))
sig[p.adjusted <= 0.05] <-'.'
sig[p.adjusted <= 0.01] <-'*'
sig[p.adjusted <= 0.001] <-'**'
sig[p.adjusted <= 0.0001] <-'***'
pairw.res = data.frame(pairs,F.Model,R2,p.value,p.adjusted,sig)
print("Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1")
return(pairw.res)
}
pairwise.adonis(iris[,1:4],iris[,5])