蒙特卡罗p值校正,在R中实现

蒙特卡罗p值校正,在R中实现,r,permutation,montecarlo,p-value,vegan,R,Permutation,Montecarlo,P Value,Vegan,从我所读到的内容来看,蒙特卡罗校正通常用于成对PERMANOVA比较,以在样本重复数较少且可能排列数有限的情况下提高p值的准确性。这在PRIMER软件中很容易实现,但我在R中找不到可以实现这一点的现有函数 在R中的基本p.adjust()函数中,可能的方法是c(“holm”、“hochberg”、“hommel”、“bonferroni”、“BH”、“BY”、“fdr”、“none”) 所以我想知道,首先,是否有人知道一个允许蒙特卡罗p调整的现有包或函数,或者,如果没有,是否有人可以用相当简单的

从我所读到的内容来看,蒙特卡罗校正通常用于成对PERMANOVA比较,以在样本重复数较少且可能排列数有限的情况下提高p值的准确性。这在PRIMER软件中很容易实现,但我在R中找不到可以实现这一点的现有函数

在R中的基本
p.adjust()
函数中,可能的方法是
c(“holm”、“hochberg”、“hommel”、“bonferroni”、“BH”、“BY”、“fdr”、“none”)

所以我想知道,首先,是否有人知道一个允许蒙特卡罗p调整的现有包或函数,或者,如果没有,是否有人可以用相当简单的术语向我描述这个方法,以便我自己拼凑一个函数

我将包括我正在使用的成对permanova函数(此函数来自)

数据(iris)
图书馆(素食主义者)

这不是一个真正的问题,我建议你在那里问。我问了,它给了我风滚草徽章!哦,糟糕透了。。。我拿到了徽章。我仍然认为这更合适(因为它更多的是理论而不是编程本身),但是你显然没有找到任何接受者。除非你愿意与他人签订合同,否则目前提供的服务不多:-(这可以被视为一个技术性的实现问题,非常适合。但是,代码确实需要一些R风格的练习。嗨@JariOksanen,谢谢你的评论。我看到你忠实地评论了大多数标有vegan的问题。你能详细说明你所说的“代码确实需要一些R风格的练习”是什么意思吗?谢谢你这不是一个真正的问题,我建议你在那里问。我问了,它给了我风滚草徽章!哦,糟糕…我得到了那个徽章。我仍然认为它在那里更合适(因为它更多的是理论而不是编程本身),但你显然没有找到任何接受者。目前没有多少可以提供的,除非你愿意与他人签订合同,为你编写代码:-(这可以被视为一个技术性的实现问题,非常适合。但是,代码确实需要一些R风格的练习。嗨@JariOksanen,谢谢你的评论。我看到你忠实地评论了大多数标有vegan的问题。你能详细说明你所说的“代码确实需要一些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])