From 681050944a715131456dec52fc3d77f6b779f8a6 Mon Sep 17 00:00:00 2001 From: Georges Kunstler <Georges.Kunstler@gmail.com> Date: Fri, 20 Dec 2013 17:14:11 +1100 Subject: [PATCH] survival and growth model with lme4 --- R/analysis.tar.gz | Bin 0 -> 20770 bytes R/analysis/_region_.tex | 5 + R/analysis/glmer.run.R | 192 ++++++++++++++++++ R/analysis/lmer.output.figs.R | 12 +- R/analysis/lmer.run.R | 23 +-- .../model.glmer/model.glmer.LOGLIN.AD.Tf.R | 4 + .../model.glmer/model.glmer.LOGLIN.E.Tf.R | 4 + .../model.glmer/model.glmer.LOGLIN.ER.AD.Tf.R | 4 + .../model.glmer/model.glmer.LOGLIN.ER.Tf.R | 4 + .../model.glmer/model.glmer.LOGLIN.R.Tf.R | 4 + .../model.glmer.LOGLIN.nocomp.Tf.R | 4 + .../model.glmer.LOGLIN.simplecomp.Tf.R | 7 + .../model.lmer/model.lmer.LOGLIN.ER.AD.Tf.R | 5 + .../model.lmer/model.lmer.LOGLIN.ER.Tf.R | 4 +- R/analysis/run.local.R | 109 ++++------ R/process.data/test.tree.CWM.R | 26 ++- launch_all_glmer.bash | 22 ++ launch_all_lmer.bash | 16 +- 18 files changed, 344 insertions(+), 101 deletions(-) create mode 100644 R/analysis.tar.gz create mode 100644 R/analysis/_region_.tex create mode 100644 R/analysis/glmer.run.R create mode 100644 R/analysis/model.glmer/model.glmer.LOGLIN.AD.Tf.R create mode 100644 R/analysis/model.glmer/model.glmer.LOGLIN.E.Tf.R create mode 100644 R/analysis/model.glmer/model.glmer.LOGLIN.ER.AD.Tf.R create mode 100644 R/analysis/model.glmer/model.glmer.LOGLIN.ER.Tf.R create mode 100644 R/analysis/model.glmer/model.glmer.LOGLIN.R.Tf.R create mode 100644 R/analysis/model.glmer/model.glmer.LOGLIN.nocomp.Tf.R create mode 100644 R/analysis/model.glmer/model.glmer.LOGLIN.simplecomp.Tf.R create mode 100644 R/analysis/model.lmer/model.lmer.LOGLIN.ER.AD.Tf.R create mode 100644 launch_all_glmer.bash diff --git a/R/analysis.tar.gz b/R/analysis.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..77bf3dabd28d0d9ede0c9c015b591c20137d630a GIT binary patch literal 20770 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 literal 0 HcmV?d00001 diff --git a/R/analysis/_region_.tex b/R/analysis/_region_.tex new file mode 100644 index 0000000..39ec4cc --- /dev/null +++ b/R/analysis/_region_.tex @@ -0,0 +1,5 @@ +\message{ !name(lmer.output.figs.R.tex)} +\message{ !name(lmer.output.figs.R) !offset(305) } +ddply(DF,'id',.fun=function(data) data$d[which.max(data$g)]) + +\message{ !name(lmer.output.figs.R.tex) !offset(-5) } diff --git a/R/analysis/glmer.run.R b/R/analysis/glmer.run.R new file mode 100644 index 0000000..b9739f1 --- /dev/null +++ b/R/analysis/glmer.run.R @@ -0,0 +1,192 @@ +########################### +########################### +### FUNCTION TO RUN GLMER ESTIMATION +library(lme4) + + +get.ecoregions.for.set <- function(set, base.dir = "./output/processed/"){ + sub(paste(base.dir,set,"/",sep=""),"",list.dirs(paste(base.dir,set,sep="")))[-1] +} + +run.models.for.set.all.traits <- function(set,model.file,fun.model, traits = + c("SLA", "Wood.density","Max.height","Leaf.N","Seed.mass"),type.filling, ...){ + for(trait in traits) + run.multiple.model.for.set.one.trait(model.file,fun.model, trait, set, type.filling=type.filling, ...) +} + +run.multiple.model.for.set.one.trait <- function(model.files,fun.model, trait, set,type.filling, ecoregions = get.ecoregions.for.set(set), ...){ + for (m in model.files) + try(run.model.for.set.one.trait (m, fun.model,trait, set,type.filling=type.filling, ...)) +} + + +run.model.for.set.one.trait <- function(model.file,fun.model, trait, set,type.filling, ecoregions = get.ecoregions.for.set(set), ...){ + fun.model <- match.fun(fun.model) + for (e in ecoregions) + try(fun.model(model.file, trait, set, e, type.filling=type.filling,...)) +} + + +#===================================================================== +# Run glmer() (in package lme4) for one ecoregion, one trait, one model +#===================================================================== +model.files.glmer.1 <- c("R/analysis/model.glmer/model.glmer.LOGLIN.E.R", + "R/analysis/model.glmer/model.glmer.LOGLIN.R.R", + "R/analysis/model.glmer/model.glmer.LOGLIN.ER.R") +model.files.glmer.2 <- c("R/analysis/model.glmer/model.glmer.LOGLIN.nocomp.R", + "R/analysis/model.glmer/model.glmer.LOGLIN.AD.R", + "R/analysis/model.glmer/model.glmer.LOGLIN.simplecomp.R") + +model.files.glmer.Tf.1 <- c("R/analysis/model.glmer/model.glmer.LOGLIN.E.Tf.R", + "R/analysis/model.glmer/model.glmer.LOGLIN.R.Tf.R.", + "R/analysis/model.glmer/model.glmer.LOGLIN.ER.Tf.R") +model.files.glmer.Tf.2 <- c("R/analysis/model.glmer/model.glmer.LOGLIN.nocomp.Tf.R", + "R/analysis/model.glmer/model.glmer.LOGLIN.AD.Tf.R", + "R/analysis/model.glmer/model.glmer.LOGLIN.simplecomp.Tf.R") + + +fun.test.if.multi.census <- function(data){ +return("tree.id" %in% names(data)) +} + +fun.call.glmer.and.save <- function(formula,df.lmer,path.out){ + Start <- Sys.time() + glmer.output <- glmer(formula=formula,data=df.lmer,family=binomial) + end <- Sys.time() + print(end - Start) + print(summary(glmer.output)) + saveRDS(glmer.output,file=file.path(path.out, "glmer.results.rds")) +} + +run.glmer <- function (model.file, trait, set, ecoregion, + min.obs=10, sample.size=NA, + type.filling) { + require(lme4) + source(model.file, local = TRUE) + model <- load.model() + #= Path for output + path.out <- output.dir.glmer(model$name, trait, set, + ecoregion,type.filling=type.filling) + print(path.out) + dir.create(path.out, recursive=TRUE, showWarnings=FALSE) + cat("run glmer for model",model.file," for set", + set,"ecoregion",ecoregion,"trait", + trait,"\n") + df.glmer <- load.and.prepare.data.for.glmer(trait, set, ecoregion, + min.obs, sample.size, + type.filling=type.filling) # return a DF + cat("Ok data with Nobs",nrow(df.glmer),"\n") + #= Run model + fun.call.glmer.and.save(formula=model$glmer.formula,df.glmer,path.out) +} +#======================================================================== + + +output.dir.glmer <- function (model, trait, set, ecoregion,type.filling) { + file.path("output/glmer", set,ecoregion,trait,type.filling,model) +} + + +#============================================================ +# Function to prepare data for lmer +#============================================================ +load.and.prepare.data.for.glmer <- function(trait, set, ecoregion, + min.obs, sample.size, type.filling, + base.dir = "output/processed/"){ + ### load data + data.tree.tot <- read.csv(file.path(base.dir, set,ecoregion,"data.tree.tot.csv"), stringsAsFactors = FALSE) + fun.data.for.glmer(data.tree.tot,trait,type.filling=type.filling) +} + +fun.select.data.for.analysis <- function(data.tree,abs.CWM.tntf,perc.neigh,BATOT,min.obs, + min.perc.neigh=0.90,min.BA.G=-50,max.BA.G=150){ +## remove tree with NA +data.tree <- subset(data.tree,subset=(!is.na(data.tree[["dead"]])) & + (!is.na(data.tree[["D"]])) ) +## remove tree with zero +data.tree <- subset(data.tree,subset=data.tree[["D"]]>9.9) +## select species with no missing traits +data.tree <- data.tree[(!is.na(data.tree[[abs.CWM.tntf]]) & + !is.na(data.tree[[BATOT]])),] +# select species with minimum obs +data.tree <- subset(data.tree,subset=data.tree[["sp"]] %in% + names(table(factor(data.tree[["sp"]])))[table(factor(data.tree[["sp"]]))>min.obs]) +# select obs abov min perc.neigh +data.tree <- subset(data.tree,subset=data.tree[[perc.neigh]] > min.perc.neigh & !is.na(data.tree[[perc.neigh]])) +return(data.tree) +} + +fun.center.and.standardized.var <- function(x){ +return((x-mean(x))/sd(x)) +} + +### get variables for lmer +fun.get.the.variables.for.glmer.tree.id <- function(data.tree,BATOT,CWM.tn,abs.CWM.tntf,tf,min.BA.G=50){ +dead <- data.tree[["dead"]] +logD <- fun.center.and.standardized.var(log(data.tree[["D"]])) +species.id <- unclass(factor(data.tree[["sp"]])) +tree.id <- unclass(factor(data.tree[["tree.id"]])) +plot.species.id <- unclass(factor(paste(data.tree[["plot"]],data.tree[["sp"]],sep=""))) +#= multiply CWMs by BATOT +sumTnTfBn.abs <- data.tree[[abs.CWM.tntf]]*data.tree[[BATOT]] +sumTnBn <- data.tree[[CWM.tn]]*data.tree[[BATOT]] +sumTfBn <- data.tree[[tf]]*data.tree[[BATOT]] +sumTnTfBn.diff <- sumTnBn-sumTfBn +sumBn <- data.tree[[BATOT]] +return(data.frame(dead=dead, + logD=logD, + species.id=species.id, + tree.id=tree.id, + plot.species.id=plot.species.id, + sumTnTfBn.diff=sumTnTfBn.diff, + sumTnTfBn.abs=sumTnTfBn.abs, + Tf=data.tree[[tf]], + sumTnBn=sumTnBn, + sumTfBn=sumTfBn, + sumBn=sumBn)) +} + +fun.get.the.variables.for.glmer.no.tree.id <- function(data.tree,BATOT,CWM.tn,abs.CWM.tntf,tf,min.BA.G=50){ +dead <- data.tree[["dead"]] +logD <- fun.center.and.standardized.var(log(data.tree[["D"]])) +species.id <- unclass(factor(data.tree[["sp"]])) +tree.id <- unclass(factor(data.tree[["tree.id"]])) +plot.species.id <- unclass(factor(paste(data.tree[["plot"]],data.tree[["sp"]],sep=""))) +#= multiply CWMs by BATOT +sumTnTfBn.abs <- data.tree[[abs.CWM.tntf]]*data.tree[[BATOT]] +sumTnBn <- data.tree[[CWM.tn]]*data.tree[[BATOT]] +sumTfBn <- data.tree[[tf]]*data.tree[[BATOT]] +sumTnTfBn.diff <- sumTnBn-sumTfBn +sumBn <- data.tree[[BATOT]] +return(data.frame(dead=dead, + logD=logD, + species.id=species.id, + plot.species.id=plot.species.id, + sumTnTfBn.diff=sumTnTfBn.diff, + sumTnTfBn.abs=sumTnTfBn.abs, + Tf=data.tree[[tf]], + sumTnBn=sumTnBn, + sumTfBn=sumTfBn, + sumBn=sumBn)) +} + +#============================================================ +# Function to prepare data for lmer with new CWM data +# that will be used in a simple linear model +#============================================================ +fun.data.for.glmer <- function(data.tree,trait,min.obs=10,type.filling='species') { +if(! trait %in% c("SLA", "Leaf.N","Seed.mass","SLA","Wood.density","Max.height")) stop("need trait to be in SLA Leaf.N Seed.mass SLA Wood.density or Max.height ") +# get vars names +CWM.tn <- paste(trait,"CWM",'fill',"log",sep=".") +abs.CWM.tntf <- paste(trait,"abs.CWM",'fill',"log",sep=".") +tf <- paste(trait,"focal",sep=".") +BATOT <- "BATOT.log" +perc.neigh <- paste(trait,"perc",type.filling,sep=".") +data.tree <- fun.select.data.for.analysis(data.tree,abs.CWM.tntf,perc.neigh,BATOT,min.obs) +#= DATA LIST FOR JAGS +glmer.data <- fun.get.the.variables.for.glmer.no.tree.id(data.tree,BATOT,CWM.tn,abs.CWM.tntf,tf) + return(glmer.data) +} + + + diff --git a/R/analysis/lmer.output.figs.R b/R/analysis/lmer.output.figs.R index f044784..dc5591a 100644 --- a/R/analysis/lmer.output.figs.R +++ b/R/analysis/lmer.output.figs.R @@ -506,7 +506,7 @@ names(models) <- c('Absolute distance','Effect/response') pdf('figs/R2.boxplot.two.pdf',width=16,height=5) fun.plot.panel.lmer.res.boxplot.compare(models=models, traits=c('Wood.density','SLA','Leaf.N','Max.height'),DF.results, - var.y='R2c.simplecomp',ylim=c(-0.015,0.06), + var.y='R2m.ratio',ylim=c(-0.015,1.5), col=c(rgb(87, 157, 25,maxColorValue=255),rgb(255,102,51,maxColorValue=255)), cex.axis=1.7) dev.off() @@ -537,9 +537,15 @@ names(models) <- c('Effect/response','Absolute distance') pdf('figs/R2.MAP.two.pdf',width=10,height=7) fun.plot.panel.lmer.res.x.y(models=models, traits=c('Wood.density','SLA','Leaf.N','Max.height'),DF.results, - var.x='MAP',var.y='R2c.simplecomp',ylim=c(-0.015,0.065)) + var.x='MAP',var.y='R2m.ratio',ylim=c(-0.5,3)) dev.off() + +fun.plot.panel.lmer.res.x.y(models=models, + traits=c('Wood.density','SLA','Leaf.N','Max.height'),DF.results, + var.x='MAP',var.y='R2m.nocomp',ylim=c(-0.015,0.06)) + + pdf('figs/R2.boxplot.pdf',width=8,height=6) fun.plot.panel.lmer.res.boxplot(models=models, traits=c('Wood.density','SLA','Leaf.N','Max.height'),DF.results, @@ -550,7 +556,7 @@ dev.off() ### plot parameters -models <- c('lmer.LOGLIN.ER','lmer.LOGLIN.E','lmer.LOGLIN.R','lmer.LOGLIN.AD') +models <- c('lmer.LOGLIN.ER.Tf','lmer.LOGLIN.E.Tf','lmer.LOGLIN.R.Tf','lmer.LOGLIN.AD.Tf') names(models) <- c('Effect/response','Effect','Response','Absolute distance') list.params <- list(c(Response='sumTfBn',Effect='sumTnBn'), c('sumTnBn'), diff --git a/R/analysis/lmer.run.R b/R/analysis/lmer.run.R index 216a991..15d94cc 100644 --- a/R/analysis/lmer.run.R +++ b/R/analysis/lmer.run.R @@ -51,7 +51,7 @@ return("tree.id" %in% names(data)) fun.call.lmer.and.save <- function(formula,df.lmer,path.out){ Start <- Sys.time() - lmer.output <- lmer(formula=formula,data=df.lmer) + lmer.output <- lmer(formula=formula,data=df.lmer,REML = FALSE) end <- Sys.time() print(end - Start) print(summary(lmer.output)) @@ -67,6 +67,7 @@ run.lmer <- function (model.file, trait, set, ecoregion, #= Path for output path.out <- output.dir.lmer(model$name, trait, set, ecoregion,type.filling=type.filling) + print(path.out) dir.create(path.out, recursive=TRUE, showWarnings=FALSE) cat("run lmer for model",model.file," for set", set,"ecoregion",ecoregion,"trait", @@ -86,10 +87,6 @@ run.lmer <- function (model.file, trait, set, ecoregion, } #======================================================================== -output.dir <- function (model, trait, set, ecoregion) { - file.path("output/jags",set,ecoregion,trait, model) -} - output.dir.lmer <- function (model, trait, set, ecoregion,type.filling) { file.path("output/lmer", set,ecoregion,trait,type.filling,model) } @@ -106,8 +103,8 @@ load.and.prepare.data.for.lmer <- function(trait, set, ecoregion, fun.data.for.lmer(data.tree.tot,trait,type.filling=type.filling) } -fun.select.data.for.analysis <- function(data.tree,abs.CWM.tntf,perc.genus,BATOT,min.obs, - min.perc.genus=0.90,min.BA.G=-50,max.BA.G=150){ +fun.select.data.for.analysis <- function(data.tree,abs.CWM.tntf,perc.neigh,BATOT,min.obs, + min.perc.neigh=0.90,min.BA.G=-50,max.BA.G=150){ ## remove tree with NA data.tree <- subset(data.tree,subset=(!is.na(data.tree[["BA.G"]])) & (!is.na(data.tree[["D"]])) ) @@ -120,8 +117,8 @@ data.tree <- data.tree[(!is.na(data.tree[[abs.CWM.tntf]]) & # select species with minimum obs data.tree <- subset(data.tree,subset=data.tree[["sp"]] %in% names(table(factor(data.tree[["sp"]])))[table(factor(data.tree[["sp"]]))>min.obs]) -# select obs abov min perc.genus -data.tree <- subset(data.tree,subset=data.tree[[perc.genus]] > min.perc.genus & !is.na(data.tree[[perc.genus]])) +# select obs abov min perc.neigh +data.tree <- subset(data.tree,subset=data.tree[[perc.neigh]] > min.perc.neigh & !is.na(data.tree[[perc.neigh]])) return(data.tree) } @@ -186,12 +183,12 @@ return(data.frame(logG=logG, fun.data.for.lmer <- function(data.tree,trait,min.obs=10,type.filling='species') { if(! trait %in% c("SLA", "Leaf.N","Seed.mass","SLA","Wood.density","Max.height")) stop("need trait to be in SLA Leaf.N Seed.mass SLA Wood.density or Max.height ") # get vars names -CWM.tn <- paste(trait,"CWM",type.filling,"log",sep=".") -abs.CWM.tntf <- paste(trait,"abs.CWM",type.filling,"log",sep=".") +CWM.tn <- paste(trait,"CWM",'fill',"log",sep=".") +abs.CWM.tntf <- paste(trait,"abs.CWM",'fill',"log",sep=".") tf <- paste(trait,"focal",sep=".") BATOT <- "BATOT.log" -perc.genus <- paste(trait,"perc.genus",sep=".") -data.tree <- fun.select.data.for.analysis(data.tree,abs.CWM.tntf,perc.genus,BATOT,min.obs) +perc.neigh <- paste(trait,"perc",type.filling,sep=".") +data.tree <- fun.select.data.for.analysis(data.tree,abs.CWM.tntf,perc.neigh,BATOT,min.obs) #= DATA LIST FOR JAGS if (length(table(table(data.tree[["tree.id"]])))>1){ lmer.data <- fun.get.the.variables.for.lmer.tree.id(data.tree,BATOT,CWM.tn,abs.CWM.tntf,tf) diff --git a/R/analysis/model.glmer/model.glmer.LOGLIN.AD.Tf.R b/R/analysis/model.glmer/model.glmer.LOGLIN.AD.Tf.R new file mode 100644 index 0000000..42cf802 --- /dev/null +++ b/R/analysis/model.glmer/model.glmer.LOGLIN.AD.Tf.R @@ -0,0 +1,4 @@ +load.model <- function () { + list(name="glmer.LOGLIN.AD.Tf", + glmer.formula=formula("dead~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTnTfBn.abs")) +} diff --git a/R/analysis/model.glmer/model.glmer.LOGLIN.E.Tf.R b/R/analysis/model.glmer/model.glmer.LOGLIN.E.Tf.R new file mode 100644 index 0000000..efa145f --- /dev/null +++ b/R/analysis/model.glmer/model.glmer.LOGLIN.E.Tf.R @@ -0,0 +1,4 @@ +load.model <- function () { + list(name="glmer.LOGLIN.E.Tf", + glmer.formula=formula("dead~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTnBn")) +} diff --git a/R/analysis/model.glmer/model.glmer.LOGLIN.ER.AD.Tf.R b/R/analysis/model.glmer/model.glmer.LOGLIN.ER.AD.Tf.R new file mode 100644 index 0000000..4173585 --- /dev/null +++ b/R/analysis/model.glmer/model.glmer.LOGLIN.ER.AD.Tf.R @@ -0,0 +1,4 @@ +load.model <- function () { + list(name="glmer.LOGLIN.ER.AD.Tf", + glmer.formula=formula("dead~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTfBn+sumTnBn+sumTnTfBn.abs")) +} diff --git a/R/analysis/model.glmer/model.glmer.LOGLIN.ER.Tf.R b/R/analysis/model.glmer/model.glmer.LOGLIN.ER.Tf.R new file mode 100644 index 0000000..04663a4 --- /dev/null +++ b/R/analysis/model.glmer/model.glmer.LOGLIN.ER.Tf.R @@ -0,0 +1,4 @@ +load.model <- function () { + list(name="glmer.LOGLIN.ER.Tf", + glmer.formula=formula("dead~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTfBn+sumTnBn")) +} diff --git a/R/analysis/model.glmer/model.glmer.LOGLIN.R.Tf.R b/R/analysis/model.glmer/model.glmer.LOGLIN.R.Tf.R new file mode 100644 index 0000000..f6429cb --- /dev/null +++ b/R/analysis/model.glmer/model.glmer.LOGLIN.R.Tf.R @@ -0,0 +1,4 @@ +load.model <- function () { + list(name="glmer.LOGLIN.R.Tf", + glmer.formula=formula("dead~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTfBn")) +} diff --git a/R/analysis/model.glmer/model.glmer.LOGLIN.nocomp.Tf.R b/R/analysis/model.glmer/model.glmer.LOGLIN.nocomp.Tf.R new file mode 100644 index 0000000..e1a7144 --- /dev/null +++ b/R/analysis/model.glmer/model.glmer.LOGLIN.nocomp.Tf.R @@ -0,0 +1,4 @@ +load.model <- function () { + list(name="glmer.LOGLIN.simplecomp.Tf", + glmer.formula=formula("dead~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)")) +} diff --git a/R/analysis/model.glmer/model.glmer.LOGLIN.simplecomp.Tf.R b/R/analysis/model.glmer/model.glmer.LOGLIN.simplecomp.Tf.R new file mode 100644 index 0000000..7a12a81 --- /dev/null +++ b/R/analysis/model.glmer/model.glmer.LOGLIN.simplecomp.Tf.R @@ -0,0 +1,7 @@ +load.model <- function () { + list(name="glmer.LOGLIN.simplecomp.Tf", + glmer.formula=formula("dead~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn")) +} + + + diff --git a/R/analysis/model.lmer/model.lmer.LOGLIN.ER.AD.Tf.R b/R/analysis/model.lmer/model.lmer.LOGLIN.ER.AD.Tf.R new file mode 100644 index 0000000..ca20de2 --- /dev/null +++ b/R/analysis/model.lmer/model.lmer.LOGLIN.ER.AD.Tf.R @@ -0,0 +1,5 @@ +load.model <- function () { + list(name="lmer.LOGLIN.ER.AD.Tf", + lmer.formula=formula("logG~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTfBn+sumTnBn+sumTnTfBn.abs"), + lmer.formula.tree.id=formula("logG~1+Tf+logD+(1+logD|species.id)+(1|tree.id)+(1|plot.species.id)+sumTfBn+sumBn+sumTnBn+sumTnTfBn.abs")) +} diff --git a/R/analysis/model.lmer/model.lmer.LOGLIN.ER.Tf.R b/R/analysis/model.lmer/model.lmer.LOGLIN.ER.Tf.R index 29e481a..040d4bc 100644 --- a/R/analysis/model.lmer/model.lmer.LOGLIN.ER.Tf.R +++ b/R/analysis/model.lmer/model.lmer.LOGLIN.ER.Tf.R @@ -1,7 +1,7 @@ load.model <- function () { list(name="lmer.LOGLIN.ER.Tf", - lmer.formula=formula("logG~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTnBn+sumTfBn"), - lmer.formula.tree.id=formula("logG~1+Tf+logD+(1+logD|species.id)+(1|tree.id)+(1|plot.species.id)+sumBn+sumTnBn+sumTfBn")) + lmer.formula=formula("logG~1+Tf+logD+(1+logD|species.id)+(1|plot.species.id)+sumBn+sumTfBn+sumTnBn"), + lmer.formula.tree.id=formula("logG~1+Tf+logD+(1+logD|species.id)+(1|tree.id)+(1|plot.species.id)+sumTfBn+sumBn+sumTnBn")) } diff --git a/R/analysis/run.local.R b/R/analysis/run.local.R index 2d541f5..f17aefb 100644 --- a/R/analysis/run.local.R +++ b/R/analysis/run.local.R @@ -1,88 +1,65 @@ -##### +##### SCRIPT TO TEST BEFORE TO SEDN ON CLUSTER source("R/analysis/lmer.run.R") -sets.inv <- c("NVS","US","Sweden","France","NSW","Canada","Spain","Swiss") # -sets.trop <- c("BCI","Fushan","Paracou","Mbaiki","Luquillo") -#========== -# Test lmer -model.files <- c("R/analysis/model.lmer/model.lmer.LOGLIN.ER.R", - "R/analysis/model.lmer/model.lmer.LOGLIN.nocomp.R", - "R/analysis/model.lmer/model.lmer.LOGLIN.simplecomp.R", - "R/analysis/model.lmer/model.lmer.LOGLIN.R.R", - "R/analysis/model.lmer/model.lmer.LOGLIN.E.R", - "R/analysis/model.lmer/model.lmer.LOGLIN.AD.R", - "R/analysis/model.lmer/model.lmer.LOGLIN.HD.R") -library(multicore) -options(cores = 5) - -run.models.for.set.all.traits('France',model.files,run.lmer,type.filling="species") - #### TODO START TO WORK ON A WAY TO CHECK PREDICTION AGAINST OBSERVED TO SEE TRAIT EFFECT -run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.ER.R",trait='SLA',set='France',ecoregion='AB',type.filling='fill') -run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.simplecomp.R",trait='SLA',set='France',ecoregion='AB',type.filling='fill') -run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.nocomp.R",trait='SLA',set='France',ecoregion='AB',type.filling='fill') - -df.lmer <- load.and.prepare.data.for.lmer(trait='SLA',set='France',ecoregion='AB', +## run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.ER.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +## run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.ER.R",trait='SLA',set='France',ecoregion='HI',type.filling='genus') +## run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.AD.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +## run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.simplecomp.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +## run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.nocomp.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +## run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.HD.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.ER.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.AD.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.simplecomp.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.nocomp.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.lmer("R/analysis/model.lmer/model.lmer.LOGLIN.ER.AD.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') + +df.lmer <- load.and.prepare.data.for.lmer(trait='SLA',set='France',ecoregion='HI', min.obs=10, sample.size=NA, - type.filling='fill') # return a DF + type.filling='species') # return a DF -simple <- readRDS("output/lmer/lmer.LOGLIN.simplecomp/SLA/France/AB/fill/results.rds") -nocomp <- readRDS("output/lmer/lmer.LOGLIN.nocomp/SLA/France/AB/fill/results.rds") -ERcomp <- readRDS("output/lmer/lmer.LOGLIN.ER/SLA/France/AB/fill/results.rds") +## simple <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.simplecomp/results.rds") +## nocomp <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.nocomp/results.rds") +## ERcomp <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.ER/results.rds") +## ADcomp <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.AD/results.rds") +simple.Tf <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.simplecomp.Tf/results.rds") +nocomp.Tf <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.nocomp.Tf/results.rds") +ERcomp.Tf <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.ER.Tf/results.rds") +ADcomp.Tf <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.AD.Tf/results.rds") +ERADcomp.Tf <- readRDS("output/lmer/France/HI/SLA/fill/lmer.LOGLIN.ER.AD.Tf/results.rds") + + +anova(simple,nocomp,ERcomp,ADcomp,simple.Tf,nocomp.Tf,ERcomp.Tf,ADcomp.Tf,ERADcomp.Tf) res.fix.simple <- fitted(simple)+resid(simple) -simple@pp$X %*% fixef(simple) res.fix.no <- fitted(nocomp)+resid(nocomp) -nocomp@pp$X %*% fixef(nocomp) res.fix.ER <- fitted(ERcomp)+resid(ERcomp) -ERcomp@pp$X %*% fixef(ERcomp) - plot(df.lmer$sumBn,res.fix.no) +par(mfrow=c(2,2)) + plot(df.lmer$sumBn,res.fix.no,cex=0.1) lines(0:15,0:15*fixef(simple)['sumBn'],col='red') - plot(df.lmer$sumTnBn,res.fix.simple) + plot(df.lmer$sumTnBn,res.fix.simple,cex=0.1) lines((-10):10,(-10):10*fixef(ERcomp)['sumTnBn'],col='red') - plot(df.lmer$sumTfBn,res.fix.simple) + plot(df.lmer$sumTfBn,res.fix.simple,cex=0.1) lines((-10):10,(-10):10*fixef(ERcomp)['sumTfBn'],col='red') - -lapply(c(sets.inv),run.models.for.set.all.traits,model.files,run.lmer,type.filling="species") + plot(df.lmer$sumTnTfBn.abs,res.fix.simple,cex=0.1) +lines((-10):10,(-10):10*fixef(ADcomp)['sumTnTfBn.abs'],col='red') -mclapply(c(sets.inv,sets.trop),run.models.for.set.all.traits,model.files,run.lmer,type.filling="species") -mclapply(c(sets.inv,sets.trop),run.models.for.set.all.traits,model.files,run.lmer,type.filling="genus") -mclapply(c(sets.inv,sets.trop),run.models.for.set.all.traits,model.files,run.lmer,type.filling="fill") + plot(df.lmer$Tf,res.fix.ER,cex=0.1) +lines((-10):10,(-10):10*fixef(ERcomp.Tf)['Tf'],col='red') - -## # load results -## mod.AD <- readRDS("output/lmer/lmer.LOGLIN.AD/SLA/France/AB/results.rds") -## mod.HD <- readRDS("output/lmer/lmer.LOGLIN.HD/SLA/France/AB/results.rds") -## mod.nocomp <- readRDS("output/lmer/lmer.LOGLIN.nocomp/SLA/France/AB/results.rds") -## mod.simplecomp <- readRDS("output/lmer/lmer.LOGLIN.simplecomp/SLA/France/AB/results.rds") -## # summary -## summary(mod.AD) -## summary(mod.HD) -## summary(mod.nocomp) -## summary(mod.simplecomp) -## # predictions (back-transforming the log) -## pred.AD <- exp(fitted(mod.AD)+var(residuals(mod.AD))/2) -## pred.HD <- exp(fitted(mod.HD)+var(residuals(mod.HD))/2) -## pred.nocomp <- exp(fitted(mod.nocomp)+var(residuals(mod.nocomp))/2) -## pred.simplecomp <- exp(fitted(mod.simplecomp)+var(residuals(mod.simplecomp))/2) +### GLMR -## # observations -## str(mod.AD) -## obs <- exp(mod.AD@frame$logG) +source("R/analysis/glmer.run.R") -## #= R2 function -## r2.calc <- function (obs,pred) { -## SCR <- sum((obs-pred)^2,na.rm=TRUE) -## SCT <- sum((obs-mean(obs))^2,na.rm=TRUE) -## R.square <- 1-SCR/SCT -## return(R.square) -## } - -## # r2 -## r2.nocomp <- r2.calc(obs,pred.nocomp) # -0.48, Very bad model due to log and absence of competition -## r2.AD <- r2.calc(obs,pred.AD) # 0.60 ! -## r2.HD <- r2.calc(obs,pred.HD) # -0.52 -## r2.simplecomp <- r2.calc(obs,pred.simplecomp) # -0.52 +#### TODO START TO WORK ON A WAY TO CHECK PREDICTION AGAINST OBSERVED TO SEE TRAIT EFFECT +run.glmer("R/analysis/model.glmer/model.glmer.LOGLIN.ER.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.glmer("R/analysis/model.glmer/model.glmer.LOGLIN.AD.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.glmer("R/analysis/model.glmer/model.glmer.LOGLIN.simplecomp.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.glmer("R/analysis/model.glmer/model.glmer.LOGLIN.nocomp.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') +run.glmer("R/analysis/model.glmer/model.glmer.LOGLIN.ER.AD.Tf.R",trait='SLA',set='France',ecoregion='HI',type.filling='species') diff --git a/R/process.data/test.tree.CWM.R b/R/process.data/test.tree.CWM.R index e6b3509..650ce4d 100644 --- a/R/process.data/test.tree.CWM.R +++ b/R/process.data/test.tree.CWM.R @@ -280,8 +280,10 @@ var.name.fill <- paste(traits.name,"abs.CWM.fill",sep=".") var.name.perc.genus <- paste(traits.name,"perc.genus",sep=".") var.name.perc.species <- paste(traits.name,"perc.species",sep=".") perc.non.missing.sp <- lapply(1:length(var.name.sp),fun.perc.non.missing,var.name.sp,var.name.perc.species,data) -num.non.missing.sp <- lapply(1:length(var.name.fill),fun.num.sup.0.9.sp,var.name.fill,var.name.perc.species,data) -num.non.missing.genus <- lapply(1:length(var.name.fill),fun.num.sup.0.9.sp,var.name.fill,var.name.perc.genus,data) +num.non.missing.sp <- lapply(1:length(var.name.fill),fun.num.sup.0.9.sp,var.name.fill, + var.name.perc.species,data) +num.non.missing.genus <- lapply(1:length(var.name.fill),fun.num.sup.0.9.sp,var.name.fill, + var.name.perc.genus,data) perc.non.missing.genus <- lapply(1:length(var.name.sp),fun.perc.non.missing,var.name.genus,var.name.perc.genus,data) perc.genus <- lapply(var.name.perc.genus,function(i,data) mean(data[[i]],na.rm=TRUE),data) perc.species <- lapply(var.name.perc.species,function(i,data) mean(data[[i]],na.rm=TRUE),data) @@ -366,15 +368,21 @@ mat.perc <- data.frame(lapply(mat.perc, function(x) (unlist(x)))) write.csv(mat.perc,file=file.path(filedir, "all.sites.perc.traits.csv"), row.names=FALSE) mat.perc <- read.csv(file=file.path(filedir, "all.sites.perc.traits.csv")) -mat.num <- mat.perc[,c(1:3,9:13)] -mat.num[,4:8] <- mat.perc[,4:8]/mat.perc[,3] +mat.num.g <- mat.perc[,c(1:3,9:13)] +mat.num.g[,4:8] <- mat.perc[,9:13]/mat.perc[,3] -names(mat.num) <- c('set','ecoregion','P obs total','P Leaf N','P Seed mass','P SLA','P Wood density','P Max height') +names(mat.num.g) <- c('set','ecoregion','P obs total','P Leaf N','P Seed mass','P SLA','P Wood density','P Max height') library('pander') -pandoc.table(mat.num,caption="Number of tree radila growth observation per data sets and ecoregion.",split.tables='Inf') +pandoc.table(mat.num.g,caption="Number of tree radial growth observation per data sets and ecoregion.",split.tables='Inf') mat.perc <- read.csv(file=file.path(filedir, "all.sites.perc.traits.csv")) -mat.num <- mat.perc[,c(1:8)] -mat.num[,4:8] <- mat.perc[,4:8]/mat.perc[,3] -pandoc.table(mat.num,caption="Number of tree radila growth observation per data sets and ecoregion.",split.tables='Inf') +mat.num.sp <- mat.perc[,c(1:8)] +mat.num.sp[,4:8] <- mat.perc[,4:8]/mat.perc[,3] +pandoc.table(mat.num.sp,caption="Number of tree radila growth observation per data sets and ecoregion.",split.tables='Inf') + +par(mfrow=c(2,2)) +plot(mat.num.sp[,4],mat.num.g[,4]) +plot(mat.num.sp[,5],mat.num.g[,5]) +plot(mat.num.sp[,6],mat.num.g[,6]) +plot(mat.num.sp[,7],mat.num.g[,7]) diff --git a/launch_all_glmer.bash b/launch_all_glmer.bash new file mode 100644 index 0000000..10ffefc --- /dev/null +++ b/launch_all_glmer.bash @@ -0,0 +1,22 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=/usr/lib64/R/library + +mkdir -p trait.workshop + +for site in "'BCI'" "'Canada'" "'France'" "'Fushan'" "'NVS'" "'Paracou'" "'Spain'" "'US'" "'Swiss'" "'Sweden'" "'NSW'" "'Mbaiki'" "'Luquillo'" "'Japan'"; do + + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/glmer.run.R');run.models.for.set.all.traits($site,model.files.glmer.Tf.1, run.glmer,type.filling='species');\n\"" > trait.workshop/glmerspecies1$site.sh + qsub trait.workshop/glmerspecies1$site.sh -l nodes=1:ppn=1 -N "glmerspecies1$site" -q opt32G -j oe + + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/glmer.run.R');run.models.for.set.all.traits($site,model.files.glmer.Tf.2, run.glmer,type.filling='species');\n\"" > trait.workshop/glmerspecies2$site.sh + qsub trait.workshop/glmerspecies2$site.sh -l nodes=1:ppn=1 -N "glmerspecies2$site" -q opt32G -j oe + + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/glmer.run.R');run.models.for.set.all.traits($site,model.files.glmer.Tf.1, run.glmer,type.filling='genus');\n\"" > trait.workshop/glmergenus1$site.sh + qsub trait.workshop/glmergenus1$site.sh -l nodes=1:ppn=1 -N "glmergenus1$site" -q opt32G -j oe + + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/glmer.run.R');run.models.for.set.all.traits($site,model.files.glmer.Tf.2, run.glmer,type.filling='genus');\n\"" > trait.workshop/glmergenus2$site.sh + qsub trait.workshop/glmergenus2$site.sh -l nodes=1:ppn=1 -N "glmergenus2$site" -q opt32G -j oe + +done + diff --git a/launch_all_lmer.bash b/launch_all_lmer.bash index c809594..adbe387 100644 --- a/launch_all_lmer.bash +++ b/launch_all_lmer.bash @@ -6,17 +6,17 @@ mkdir -p trait.workshop for site in "'BCI'" "'Canada'" "'France'" "'Fushan'" "'NVS'" "'Paracou'" "'Spain'" "'US'" "'Swiss'" "'Sweden'" "'NSW'" "'Mbaiki'" "'Luquillo'" "'Japan'"; do - echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');sessionInfo();run.models.for.set.all.traits($site,model.files.lmer.1, run.lmer,type.filling='fill');\n\"" > trait.workshop/fill1$site.sh - qsub trait.workshop/fill1$site.sh -l nodes=1:ppn=1 -N "$site-1" -q opt32G -j oe + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');run.models.for.set.all.traits($site,model.files.lmer.Tf.1, run.lmer,type.filling='species');\n\"" > trait.workshop/species1$site.sh + qsub trait.workshop/species1$site.sh -l nodes=1:ppn=1 -N "lmerspecies1$site" -q opt32G -j oe - echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');run.models.for.set.all.traits($site,model.files.lmer.2, run.lmer,type.filling='fill');\n\"" > trait.workshop/fill2$site.sh - qsub trait.workshop/fill2$site.sh -l nodes=1:ppn=1 -N "$site-2" -q opt32G -j oe + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');run.models.for.set.all.traits($site,model.files.lmer.Tf.2, run.lmer,type.filling='species');\n\"" > trait.workshop/species2$site.sh + qsub trait.workshop/species2$site.sh -l nodes=1:ppn=1 -N "lmerspecies2$site" -q opt32G -j oe - echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');run.models.for.set.all.traits($site,model.files.lmer.Tf.1, run.lmer,type.filling='fill');\n\"" > trait.workshop/fill3$site.sh - qsub trait.workshop/fill3$site.sh -l nodes=1:ppn=1 -N "$site-3" -q opt32G -j oe + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');run.models.for.set.all.traits($site,model.files.lmer.Tf.1, run.lmer,type.filling='genus');\n\"" > trait.workshop/genus1$site.sh + qsub trait.workshop/genus1$site.sh -l nodes=1:ppn=1 -N "lmergenus1$site" -q opt32G -j oe - echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');run.models.for.set.all.traits($site,model.files.lmer.Tf.2, run.lmer,type.filling='fill');\n\"" > trait.workshop/fill4$site.sh - qsub trait.workshop/fill4$site.sh -l nodes=1:ppn=1 -N "$site-4" -q opt32G -j oe + echo "/usr/local/R/R-3.0.1/bin/Rscript -e \"source('R/analysis/lmer.run.R');run.models.for.set.all.traits($site,model.files.lmer.Tf.2, run.lmer,type.filling='genus');\n\"" > trait.workshop/genus2$site.sh + qsub trait.workshop/genus2$site.sh -l nodes=1:ppn=1 -N "lmergenus2$site" -q opt32G -j oe done -- GitLab