/packages/archive/2010/05.2010/05.02.2010/spacodi/R/randomization.test.sp.R

http://github.com/eastman/spacodiR · R · 42 lines · 35 code · 7 blank · 0 comment · 12 complexity · b6cdf3ddbf7170e0930f975bd6cd6880 MD5 · raw file

  1. randomization.test.sp=function(obs=obs, exp=exp, iter=10000, return.all=FALSE, two.tailed=TRUE){
  2. obs=obs[is.finite(as.numeric(obs))]
  3. exp=exp[is.finite(as.numeric(exp))]
  4. O=sample(as.numeric(obs), size=iter, replace=TRUE)
  5. E=sample(as.numeric(exp), size=iter, replace=TRUE)
  6. rr=cbind((O-E), NA)
  7. rr[,2]=ifelse(rr[,1]>0, 1, ifelse(rr[,1]<0, 0, sample(c(0,1),1)))
  8. p=rr[,2]
  9. p.g=1-(sum(p)/iter)
  10. p.l=1-p.g
  11. out.d=as.numeric(rr[,1])
  12. if(!two.tailed) {
  13. out.p=list(p.g,p.l)
  14. } else {
  15. if(p.g!=p.l)out.p=min(c(p.g,p.l))*2 else out.p=1
  16. }
  17. if(return.all) {
  18. r.out=list(out.d, out.p)
  19. } else {
  20. r.out=out.p
  21. }
  22. if(length(r.out)==1) { #r.all=FALSE; two=TRUE
  23. names(r.out)="p.value"
  24. } else if(two.tailed==FALSE){
  25. if(return.all==TRUE) {
  26. names(r.out)=c("differences","p.value") #r.all=TRUE; two=FALSE
  27. names(r.out[[2]])=c("greater","lesser")
  28. } else {
  29. names(r.out)=c("greater","lesser") #r.all=FALSE; two=FALSE
  30. }
  31. } else { #r.all=TRUE; two=TRUE
  32. names(r.out)=c("differences","p.value")
  33. }
  34. return(r.out)
  35. }