From dc436044826cc89471aacb11efea76085ed60571 Mon Sep 17 00:00:00 2001
From: Francesco Sabatini <francesco.sabatini@idiv.de>
Date: Fri, 20 Mar 2020 14:56:11 +0100
Subject: [PATCH] Implemented alternative strategy - bootstrap + paired trait
 permutation

---
 01b_MesobromionCluster.R | 50 ++++++++++++++++++++++------------------
 session.R                |  4 ++--
 2 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/01b_MesobromionCluster.R b/01b_MesobromionCluster.R
index 375929f..3b60cdb 100644
--- a/01b_MesobromionCluster.R
+++ b/01b_MesobromionCluster.R
@@ -170,7 +170,9 @@ Mesobromion <- function(species.path, traits.path, output, myfunction="get.corXY
   
   traits <- traits %>% 
     column_to_rownames("species0") %>% 
-    rename_all(.funs=~gsub(pattern=".mean$", replacement="", x=.))
+    rename_all(.funs=~gsub(pattern=".mean$", replacement="", x=.))  %>% 
+#temporary    ### Use only a subset of traits
+    dplyr::select(LeafArea:Disp.unit.leng)
   
   ## create list of indices for each combination of traits up to a max number of interactions
   n.traits <- ncol(traits)
@@ -190,34 +192,36 @@ Mesobromion <- function(species.path, traits.path, output, myfunction="get.corXY
   print(paste("Running on", length(allcomb.t),"out of", nall, "combinations"))
   names.t <- unlist(lapply(allcomb.t, paste, collapse="_"))
   
-  print("Run on observed data")
-  cor.obs <- NULL
+  print("Start main loop")
+  cor.obs <- NA
+  cor.bootstr <- matrix(NA, nrow=length(allcomb.t), ncol=nperm, 
+                        dimnames = list(paste("t", names.t, sep=""), paste("p",1:nperm, sep="")))
+  cor.perm <- matrix(NA, nrow=length(allcomb.t), ncol=nperm, 
+                     dimnames = list(paste("t", names.t, sep=""), paste("p",1:nperm, sep="")))
+                                                                             
+  speciesb <- species
+  traitsb <- traits
   for(i in 1:length(allcomb.t)) {
     tt <- unlist(allcomb.t[i])
-    cor.obs <- rbind(cor.obs,
-	myfunction(comm=species, trait=traits, trait.sel=tt, stat="RV"))
-    print(i)
-  }
-  
-  print("Permute traits data")
-  set.seed(1984)
-  traits.perm <- lapply(1:nperm, FUN=function(x){
-    tmp <- traits[sample(1:nrow(traits)),]
-    rownames(tmp) <- rownames(traits)
-    return(tmp)}
-  )
-  
-  print("Run on permuted data")
-  cor.perm <- matrix(NA, nrow=length(allcomb.t), ncol=nperm, dimnames = list(paste("t", names.t, sep=""), 
-                                                                               paste("p",1:nperm, sep="")))
-  for(j in 1:length(allcomb.t)){
-    tt <- unlist(allcomb.t[j])
+    #bootstrap species matrix 
+#    set.seed(1984)
     for(b in 1:nperm){
-      cor.perm[j,b] <- myfunction(comm=species, trait=traits.perm[[b]], trait.sel=tt, stat="RV")$Coef
+      if(b>1){
+        speciesb <- species[sample(1:nrow(species), replace=T),] #resample plots
+        speciesb <- speciesb[,-which(colSums(speciesb)==0)] # delete empty species
+        traitsb <- traits[which(rownames(traits) %in%  colnames(speciesb)),] #subset traits
+      }
+      traitsb.perm <- traitsb[sample(1:nrow(traitsb)),] #permute traits
+      tmp <- myfunction(comm=speciesb, trait=traitsb, trait.sel=tt, stat="RV")
+      if(b==1) {cor.obs <- rbind(cor.obs, tmp)}
+      cor.bootstr[i,b] <- tmp$Coef
+      cor.perm[i,b] <- myfunction(comm=speciesb, trait=traitsb.perm, trait.sel=tt, stat="RV")$Coef
       print(paste("trait", tt, "perm", b))
     }
+  print(i)
   }
   
+  
   #save(corXY, file="_data/Mesobromion/corXY/corXY.RData")
-  save(cor.obs, cor.perm, file = paste(output, "_", chunk.i, ".RData", sep=""))
+  save(cor.obs, cor.bootstr, cor.perm, file = paste(output, "_", chunk.i, ".RData", sep=""))
 }
diff --git a/session.R b/session.R
index 16ae1cb..a12c291 100644
--- a/session.R
+++ b/session.R
@@ -4,9 +4,9 @@ species.path <- "_data/Mesobromion/species.out.10perc.txt"
 traits.path  <- "_data/Mesobromion/traits.out.10perc.txt"
 output  <- "test"
 myfunction <- "get.corXY"
-max.inter.t <- 1
+max.inter.t <- 2
 chunkn <- 40
 chunk.i <- 1
-nperm <- 99
+nperm <- 3
 
 Mesobromion(species.path, traits.path, output, myfunction, max.inter.t, chunkn, chunk.i, nperm)
-- 
GitLab