蒙特卡罗p值校正,在R中实现
从我所读到的内容来看,蒙特卡罗校正通常用于成对PERMANOVA比较,以在样本重复数较少且可能排列数有限的情况下提高p值的准确性。这在PRIMER软件中很容易实现,但我在R中找不到可以实现这一点的现有函数 在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调整的现有包或函数,或者,如果没有,是否有人可以用相当简单的
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])