focalsp<-read.csv("x1.csv",header=T,fileEncoding="GBK")
pdmatrix<-read.csv("juzhen.csv",header=T,fileEncoding="GBK")
sample<-read.csv("x11.csv",header=T,fileEncoding="GBK")
APdobs_NTPD.fn =function(focalsp,pdmatrix,sample)
{
pdtofocal.min =numeric()
for(i in 1:length(focalsp))
{
spinsample=rownames(sample)[sample[,i]!=0]
spinsample.abund=sample[,i][sample[,i]!=0]
focalsp.pos=which(rownames(pdmatrix)==focalsp[i])
spinsample.pos=match(spinsample,colnames(pdmatrix))
pdtofocal=numeric()
for(j in 1:length(spinsample.pos))
{
pdtofocal[j]=pdmatrix[focalsp.pos,spinsample.pos[j]]
}
pdtofocal.min[i]=min(pdtofocal)
}
return(pdtofocal.min)
}
#
#write.csv(APdobs_NTPD.fn,'y1.csv')
##APdobs.fn函数:计算null model 平均值
{
pdtofocal.mean.all=numeric()
for(i in 1:length(focalsp))
{
spinsample=rownames(sample)[sample[,i]!=0]
spinsample.abund=sample[,i][sample[,i]!=0]
focalsp.pos=which(rownames(pdmatrix)==focalsp[i])
spinsample.pos=match(spinsample,colnames(pdmatrix))
pdtofocal=numeric()
for(j in 1:length(spinsample.pos))
{
pdtofocal[j]=pdmatrix[focalsp.pos,spinsample.pos[j]]*spinsample.abund[j]
}
h<-which(names(spinsample.abund)==focalsp[i])
if (length(h)>0){
focal.abund=spinsample.abund[h]
pdtofocal.mean=sum(pdtofocal)/(sum(spinsample.abund)-focal.abund) }
if(length(h)==0){
pdtofocal.mean=sum(pdtofocal)/sum(spinsample.abund) }
pdtofocal.mean.all[i]=pdtofocal.mean
}
return(pdtofocal.mean.all)
}
APdnull.fun=function(focalsp,sample,nsim,phylo)#phylo为系统发育树
{
require(picante)
pdtofocal.mean.all.null=matrix(nrow=length(focalsp),ncol=nsim)
for(j in 1:nsim)
{
phylo.tem <- tipShuffle(phylo)
pdmatrix.tem=cophenetic(phylo.tem)
pdmatrix.tem=pdmatrix.tem/(-max(pdmatrix.tem))+1
pdtofocal.mean.all=APdobs.fun(focalsp=focalsp,pdmatrix=pdmatrix.tem,sample=sample)
pdtofocal.mean.all.null[,j]=pdtofocal.mean.all
}
return(pdtofocal.mean.all.null)
}
APd.allfocalsp.fun=function(focalsp=focalsp,pdmatrix=pdmatrix,sample,nsim=999,phylo=phylo.xtbg)
{
pdtofocal.min.all= APdobs_NTPD.fn (focalsp=focalsp,pdmatrix=pdmatrix, sample=sample)
pdtofocal.mean.null.all=APdnull.fun(focalsp=focalsp,sample=sample,nsim=nsim,phylo=phylo)
NTPD =numeric()
for(i in 1:length(focalsp))
{
APdnull.mean=mean(pdtofocal.mean.null.all[i,])
APdnull.sd=sd(pdtofocal.mean.null.all[i,])
NTPD[i]=(pdtofocal.min.all[i]-APdnull.mean)/APdnull.sd
}
return(NTPD)
}
###############################################
##THESE TOP TWO FUNCTIONS ARE NEEDED TO MAKE ##
######THE CIRCLE SAMPLE FILES FOR APd calculation ####
####COPY AND PASTE THESE TWO FUNCTIONS INTO R##


雷达卡


京公网安备 11010802022788号







