蒙特卡洛p值校正,在R

时间:2017-09-29 22:22:18

标签: r permutation montecarlo p-value vegan

根据我的阅读,蒙特卡洛校正通常用于成对的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])

0 个答案:

没有答案