function(m=5,n=5,comb.lim=50000,Nsim=50000,PDF=F){ if(PDF==T) pdf(file=paste("KSapproxm",m,"n",n,".pdf",sep=""),width=11) N=m+n cNm=choose(N,m) par(mfrow=c(1,2)) if(m==n){ # compute by Gnedenko-Korolyuk formula a=1:n pd = NULL denom=choose(2*n,n) for(ai in a){ temp=0 i=1 lower=n-ai while(lower>=0){ temp=temp-((-1)^i)*choose(2*n,lower) i=i+1 lower = n-i*ai } pd[ai]=2*temp/denom } d=c(0,a)/n pd=c(1,pd) }else{ cNm=choose(N,m) if(cNm>comb.lim){ out=NULL for(i in 1:Nsim){ x=sample(1:N,n) out[i]=ks.statistic.int(x,N) } }else{ out=combn(1:N,n,FUN=ks.statistic.int,N=N) } out.u=sort(unique(out)) pd=NULL dvec=NULL i=0 for(d in out.u){ i=i+1 dvec[i]=d pd[i]=mean(out>=d) } d=c(0,dvec) pd=c(1,pd) } d.length=length(d) pd.appr=NULL pd.appr[1]=1 for(i in 2:length(d)){ pd.appr[i]=KS.Kfun(sqrt(m*n/N)*d[i])[[1]][1] } plot.stepfun(stepfun(d,c(1,pd)),main="", ylab=expression(P(D[list(m,n)]>=d)),xlab="d") out.step=stepfun(d,c(1,pd.appr)) plot(out.step,add=T,cex=.7,col.hor="blue",col.vert="blue",pch=16) text(max(d),1,paste("m = ",m," , n =",n),adj=1) sel=(pd<=.2 & pd >=1e-6) #mpd=min(pd[sel],pd.appr[sel]) #Mpd=max(pd[sel],pd.appr[sel]) mpd=1e-6 Mpd=.2 xlabel=expression("exact "~P(D[list(m,n)]>=d)) if( m!=n & cNm>comb.lim){ xlabel=expression("simulated "~P(D[list(m,n)]>=d)) } plot(pd[sel],pd.appr[sel],log="xy",xlim=c(mpd,Mpd),ylim=c(mpd,Mpd), xlab=xlabel, ylab=expression("approximate "~P(D[list(m,n)]>=d))) if( m!=n & cNm>comb.lim){ text(Mpd,mpd,substitute(N[sim]==Nsimx,list(Nsimx=Nsim)),adj=1) } abline(0,1) if(PDF==T) dev.off() list(d=d,pd=pd,pd.appr=pd.appr) }