diff --git a/code/Trait-Environment-Relationships2.R b/code/Trait-Environment-Relationships2.R deleted file mode 100644 index 6ad4f3259eda6931784cb2d8665e33a0586580c8..0000000000000000000000000000000000000000 --- a/code/Trait-Environment-Relationships2.R +++ /dev/null @@ -1,2008 +0,0 @@ -getwd() -###### Traits ##### -# TRY 2.0 -load("data/TRY.all.mean.sd.2.Rdata") -str(TRY.all.mean.sd.2) -dim(TRY.all.mean.sd.2) -# 40791 obs. of 38 variables -# tests -any(is.na(TRY.all.mean.sd.2$SLA.sd)) #T - -# TRY 3.0 -TRY3.0 <- read.csv("data/Export_sPlot_2016_09_12.csv") -str(TRY3.0) -levels(TRY3.0$Species)[100] # "Abronia villosa", just an example -which(TRY3.0$Species==levels(TRY3.0$Species)[100]) # an example of one species with several (7) observations -TRY3.0[which(TRY3.0$Species==levels(TRY3.0$Species)[100]),c(1:19)] # trait values differ between observations -any(is.na(TRY3.0[,c(2:19)])) #F -any(TRY3.0[,c(2:19)]==0) #F - -for (i in 2:19){ - TRY3.0[,i] <- log(TRY3.0[,i]) -} -any(is.na(TRY3.0[,c(2:19)])) #F - -TRY.all.n.3 <- aggregate(TRY3.0[,1], by=list(TRY3.0$Species), FUN=length) -head(TRY.all.n.3) -str(TRY.all.n.3) #59319 obs. of 2 variables: -names(TRY.all.n.3) -names(TRY.all.n.3) <- c("StandSpeciesName","n") - -TRY.all.mean.3 <- aggregate(TRY3.0[,c(2:19)], by=list(TRY3.0$Species), FUN=mean) -str(TRY.all.mean.3) #59319 obs. of 19 variables: -names(TRY.all.mean.3) -' [1] "Group.1" "X1" "X4" "X11" "X13" "X14" "X15" "X18" "X26" "X27" "X47" -[12] "X50" "X56" "X78" "X138" "X163" "X169" "X237" "X282" ' -names(TRY.all.mean.3) <- c("StandSpeciesName","LeafArea.mean", "StemDens.mean", "SLA.mean", "LeafC.perdrymass.mean", - "LeafN.mean","LeafP.mean", "PlantHeight.mean", "SeedMass.mean", "Seed.length.mean", - "LDMC.mean","LeafNperArea.mean", "LeafNPratio.mean", "Leaf.delta.15N.mean", - "Seed.num.rep.unit.mean", "Leaffreshmass.mean", "Stem.cond.dens.mean", - "Disp.unit.leng.mean", "Wood.vessel.length.mean") -any(is.na(TRY.all.mean.3$SLA.mean)) #F - -TRY.all.sd.3 <- aggregate(TRY3.0[,c(2:19)], by=list(TRY3.0$Species), FUN=sd) -str(TRY.all.sd.3) #59319 obs. of 19 variables: -names(TRY.all.sd.3) -names(TRY.all.sd.3) <- c("StandSpeciesName","LeafArea.sd", "StemDens.sd", "SLA.sd", "LeafC.perdrymass.sd", - "LeafN.sd","LeafP.sd", "PlantHeight.sd", "SeedMass.sd", "Seed.length.sd", - "LDMC.sd","LeafNperArea.sd", "LeafNPratio.sd", "Leaf.delta.15N.sd", - "Seed.num.rep.unit.sd", "Leaffreshmass.sd", "Stem.cond.dens.sd", - "Disp.unit.leng.sd", "Wood.vessel.length.sd") -any(is.na(TRY.all.sd.3$SLA.sd)) #T -TRY.all.mean.sd.3 <- data.frame(TRY.all.n.3,TRY.all.mean.3[,c(2:19)],TRY.all.sd.3[,c(2:19)]) -str(TRY.all.mean.sd.3) #59319 obs. of 38 variables -'data.frame: 59319 obs. of 38 variables: -$ StandSpeciesName : Factor w/ 59319 levels "Aa sp","Abarema adenophora",..: 1 2 3 4 5 6 7 8 9 10 ... -$ n : int 1 4 1 1 38 4 86 7 5 95 ... -$ LeafArea.mean : num 6.61 6.96 7.04 7.11 6.75 ... -$ StemDens.mean : num -0.822 -0.427 -0.57 -0.619 -0.543 ... -$ SLA.mean : num 2.24 2.38 2.41 2.56 2.65 ... -$ LeafC.perdrymass.mean : num 6.17 6.26 6.19 6.17 6.18 ... -$ LeafN.mean : num 2.92 3.19 3.25 3.41 3.23 ... -$ LeafP.mean : num -0.0143 0.3403 -0.1557 -0.0999 -0.217 ... -$ PlantHeight.mean : num -0.498 2.874 2.544 2.293 2.394 ... -$ SeedMass.mean : num -4.08 4.49 4.27 4.23 4.13 ... -$ Seed.length.mean : num -0.317 2.021 1.88 1.92 1.912 ... -$ LDMC.mean : num -1.471 -0.798 -0.938 -1.087 -1.111 ... -$ LeafNperArea.mean : num 0.896 0.834 0.838 0.804 0.617 ... -$ LeafNPratio.mean : num 2.54 3.26 3.49 3.55 3.57 ... -$ Leaf.delta.15N.mean : num 0.38 1.258 0.925 -0.169 0.719 ... -$ Seed.num.rep.unit.mean : num 9.56 1.64 1.39 1.18 1.32 ... -$ Leaffreshmass.mean : num -1.3303 -0.2516 -0.0799 -0.0889 -0.4985 ... -$ Stem.cond.dens.mean : num 3.67 2.14 1.94 2.08 2.06 ... -$ Disp.unit.leng.mean : num -0.555 2.916 2.676 2.689 2.842 ... -$ Wood.vessel.length.mean: num 6.13 5.73 6 6.06 6.21 ... -$ LeafArea.sd : num NA 0.0303 NA NA 0.0556 ... -$ StemDens.sd : num NA 0.1101 NA NA 0.0123 ... -$ SLA.sd : num NA 0.1063 NA NA 0.0695 ... -$ LeafC.perdrymass.sd : num NA 0.0086 NA NA 0.00511 ... -$ LeafN.sd : num NA 0.0638 NA NA 0.0113 ... -$ LeafP.sd : num NA 0.3936 NA NA 0.0232 ... -$ PlantHeight.sd : num NA 0.0626 NA NA 0.1806 ... -$ SeedMass.sd : num NA 0.0315 NA NA 0.0787 ... -$ Seed.length.sd : num NA 0.0457 NA NA 0.0193 ... -$ LDMC.sd : num NA 0.0553 NA NA 0.0573 ... -$ LeafNperArea.sd : num NA 0.098 NA NA 0.068 ... -$ LeafNPratio.sd : num NA 0.291 NA NA 0.0304 ... -$ Leaf.delta.15N.sd : num NA 0.1651 NA NA 0.0398 ... -$ Seed.num.rep.unit.sd : num NA 0.211 NA NA 0.259 ... -$ Leaffreshmass.sd : num NA 0.0748 NA NA 0.0571 ... -$ Stem.cond.dens.sd : num NA 0.1389 NA NA 0.0349 ... -$ Disp.unit.leng.sd : num NA 0.0927 NA NA 0.0293 ... -$ Wood.vessel.length.sd : num NA 0.1466 NA NA 0.0271 ...' - -plot(SLA.mean~LDMC.mean, data=TRY.all.mean.sd.3) -#summary(lm(SLA.mean~LDMC.mean, data=TRY.all.mean.sd.2)) -#abline(lm(SLA.mean~LDMC.mean, data=TRY.all.mean.sd.2),col="blue", lwd=2) -#sqrt(0.3415) - -#TRY.all.mean.sd.3 <- TRY.all.mean.sd.3[,-39] -save(TRY.all.mean.sd.3, file="TRY.all.mean.sd.3.Rdata") - -###### Backbone ##### -load("data/backbone.v.2.splot.try3.Rdata") -# alternatively: -#sPlot3 <- read.csv(paste("data/", "backbone.v.2.splot.try3.csv", -# sep = ""), sep=",", quote = "\"'") -str(backbone.splot.try3) -# data.frame': 122901 obs. of 33 variables: - -###### Harmonized plot data ###### -DT <- read.csv("data/plots_without_unified_cover_scales_20160120a.csv") -DT <- read.csv("data/plots_without_unified_cover_scales_20160120a.csv") -library(data.table) -DT <- data.table(DT) -colnames(DT) -colnames(DT)[9] <- "Cover" -setkey(DT,PlotObservationID) - -###### Header data ####### -splot.header <- read.csv("data/sPlot_14_04_2015_coord.csv") -str(splot.header) -'data.frame: 1117940 obs. of 3 variables: -$ PlotObservationID: int 1 2 3 4 5 6 7 8 9 10 ... -$ Longitude : num -154 -154 -154 -154 -154 ... -$ Latitude : num 62.4 62.4 62.4 62.4 62.4 ...' - -##### Bioclim data #### -splot.bioclim <- read.csv(paste("data/","sPlot.csv", sep = ""), sep = ";", na.strings=c("","NA")) -str(splot.bioclim) -#data.frame': 1117382 obs. of 52 variables: - -#################### -##### Matching ##### -#index6 <- match(TRY.all.mean.sd.2$StandSpeciesName,backbone.splot.try3$names.sPlot.TRY) -index6 <- match(TRY.all.mean.sd.3$StandSpeciesName,backbone.splot.try3$names.sPlot.TRY) -any(is.na(index6)) #T -# not all species in the trait list are also in the backbone -TRY.all.mean.sd.3$StandSpeciesName[is.na(index6)] -# 16 species in TRY are not in the backbone -'[1] Albizia greveanaÊ AlnusÊgymnothyrsus Carapanaœba sp -[4] ChionanthusÊsp Clerodendron nudiflorumÊ Copa’ba sp -[7] Copa’fera sp Corynocarpus laevigatusÊ Enterospermum madagascarienseÊ -[10] Hierochlo‘ odorata Ing‡ sp Norrisia maiorÊ -[13] NothofagusÊbrassospora QuercusÊsp ShoreaÊanthoshorea -[16] ShoreaÊsp ' -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="Albizia greveanaÊ",] # n=10 -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="Albizia greveana",] # 0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Albizia greveanaÊ"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Albizia greveana"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="AlnusÊgymnothyrsus"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Alnus gymnothyrsus"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Carapanaœba sp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Carapanauba sp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Carapanaúba sp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="ChionanthusÊsp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Chionanthus sp"] #1 -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="ChionanthusÊsp",] # n=10 -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="Chionanthus sp",] # n=15 -DT$species[DT$species=="Chionanthus sp" & !is.na(DT$species)] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Clerodendron nudiflorumÊ"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Clerodendron nudiflorum"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Copa’ba sp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Copaiba sp"] #1 -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="Copa’ba sp",] # n=0, strange, there should be at least one -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="Copaiba sp",] # n=1 -DT$species[DT$species=="Copaiba sp" & !is.na(DT$species)] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Copa’fera sp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Copaifera sp"] #1 -DT$species[DT$species=="Copaifera sp" & !is.na(DT$species)] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Corynocarpus laevigatusÊ"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Corynocarpus laevigatus"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Enterospermum madagascarienseÊ"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Enterospermum madagascariense"] #1 -DT$species[DT$species=="Enterospermum madagascariense" & !is.na(DT$species)] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Hierochlo‘ odorata"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Hierochloe odorata"] #1 -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="Hierochlo‘ odorata",] # n=0, strange, there should be at least one -TRY.all.mean.sd.3[TRY.all.mean.sd.3$StandSpeciesName=="Hierochloe odorata",] # n=63 -DT$species[DT$species=="Hierochloe odorata" & !is.na(DT$species)] #545 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Ing‡ sp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Inga sp"] #1 -DT$species[DT$species=="Inga sp" & !is.na(DT$species)] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Norrisia maiorÊ"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Norrisia maior"] #1 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="NothofagusÊbrassospora"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Nothofagus brassospora"] #1 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="QuercusÊsp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Quercus sp"] #1 -DT$species[DT$species=="Quercus sp" & !is.na(DT$species)] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="ShoreaÊanthoshorea"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Shorea anthoshorea"] #1 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="ShoreaÊsp"] #0 -backbone.splot.try3$names.sPlot.TRY[backbone.splot.try3$names.sPlot.TRY=="Shorea sp"] #1 -DT$species[DT$species=="Shorea sp" & !is.na(DT$species)] #0 -# none of the species is in sPlot, thus we can take them out - -### data cleaning ### -length(TRY.all.mean.sd.3$StandSpeciesName[is.na(TRY.all.mean.sd.3$StandSpeciesName)]) -# No record is NA! -#TRY.all.mean.sd.2[which(is.na(TRY.all.mean.sd.2$StandSpeciesName)),] -# record no. 7947 has StandSpeciesName = NA -#TRY.all.mean.sd.2 <- TRY.all.mean.sd.2[-which(is.na(TRY.all.mean.sd.2$StandSpeciesName)),] - -TRY.all.mean.sd.3$species <- backbone.splot.try3$name.short.correct[index6] -dim(TRY.all.mean.sd.3) # 59319 39 - - -index1 <- match(DT$PlotObservationID, splot.header$PlotObservationID) -any(is.na(index1)) #F -length(index1) # 24241941 -length(unique(index1[!is.na(index1)])) #1117940 - -index2 <- match(splot.header$PlotObservationID,DT$PlotObservationID) -any(is.na(index2)) #F -length(index2) # 1117940 -length(unique(index2[!is.na(index2)])) # 1117940 -dim(splot.header) -# 1117940 3 -identical(as.character(splot.header$PlotObservationID),as.character(DT$PlotObservationID[index2])) -# T - -any(is.na(DT$species)) #T -# that should not be the case! -length(DT$species[!is.na(DT$species)]) #24221565 -length(DT$species) #24241941 -24241941-24221565 # 20376 NA names!!! -# it gives nonsense to match them with traits -index7 <- match(DT$species,TRY.all.mean.sd.3$species) -length(index7) #24241941 -length(index7[!is.na(index7)]) -# 21839463, with TRY3.0 -# 21040927, with TRY2.0 -# 19841429, with first TRY version -24241941 - 21839463 # 2402478 entries have no traits -(24241941 - 2402478)/24241941*100 -# which are 90.08958% of all entries -# previously: 86.79555% with TRY2.0 -# previously: 18.15247 % and with first TRY version - -# reduce DT, and splot.header -#splot.header <- splot.header[!is.na(DT$species[index2]),] -#dim(splot.header) #1117476 3 -DT <- DT[!is.na(DT$species),] -index7 <- match(DT$species,TRY.all.mean.sd.3$species) -length(index7) #24221565 - - -### CWM ### -mean(TRY.all.mean.sd.3$SLA.mean) # 2.634988 -min(TRY.all.mean.sd.3$SLA.mean) # 0.03072317 -max(TRY.all.mean.sd.3$SLA.mean) # 5.182365 -# example -DT$trait <- NA -DT$trait <- TRY.all.mean.sd.3$SLA.mean[index7] -length(DT$trait[!is.na(DT$trait)]) # 21819087 -length(DT$trait[is.na(DT$trait)]) # 2402478 -str(DT) - -colnames(TRY.all.mean.sd.3) -CWM2 <- DT[,list(CWM.SLA = weighted.mean(trait,Cover,na.rm = T)),by=PlotObservationID] -# I have checked that we do not need to prefilter only those entries that have a trait value -# this works fine -str(CWM2) -dim(CWM2) #1117898 -which(colnames(TRY.all.mean.sd.3)=="LeafArea.mean") # 3 -which(colnames(TRY.all.mean.sd.3)=="Wood.vessel.length.mean") # 20 -CWM <- array(NA,c(dim(CWM2)[1],18),dimnames=list(CWM2$PlotObservationID, - colnames(TRY.all.mean.sd.3)[3:20])) -rm(CWM2) -for (i in 1:18){ - DT$trait <- NA - DT$trait <- TRY.all.mean.sd.3[index7,i+2] - CWM[,i] <- DT[,list(CWM.trait= weighted.mean(trait,Relative.cover,na.rm = T)),by=PlotObservationID]$CWM.trait - -} -str(CWM) #num [1:1117898, 1:18] -CWM[1:20,] -tail(CWM) -write.csv(CWM,file = "CWM_TRY3.csv", row.names = T) - -CWM <- read.csv("C://Daten//iDiv2//splot2//CWM_TRY3.csv") -str(CWM) #1117898 obs. of 19 variables -dimnames(CWM)[[1]] <- CWM$X -CWM <- CWM[,-1] -tail(CWM) - -##### MAP #### -index3 <- match(dimnames(CWM)[[1]],splot.header$PlotObservationID) -length(index3) #1117898 -any(is.na(index3)) # F -#length(index3[is.na(index3)]) #422 -splot.header2 <- splot.header[index3,] -'CWM1$Longitude <- splot.header$Longitude[index10] -CWM1$Latitude <- splot.header$Latitude[index10] -' -str(CWM) # num [1:1117898, 1:18] -CWM <- CWM[!(is.na(splot.header2$Longitude)|is.na(splot.header2$Latitude)|is.na(CWM[,"SLA.mean"])),] -str(CWM) # num [1:1112287, 1:18] -1112287/1117898*100 # 99.49808% of plots have traits, Long and Lat -any(is.na(CWM)) #F -# match header again -index4 <- match(dimnames(CWM)[[1]],splot.header$PlotObservationID) -length(index4) #1112287 -any(is.na(index4)) # F -splot.header2 <- splot.header[index4,] -# now in the same sequence as CWM - -library(raster) -CRSlonlat <- CRS("+proj=longlat +datum=WGS84") -coords <- cbind(splot.header2$Longitude, splot.header2$Latitude) -coords <- SpatialPoints(coords, proj4string=CRSlonlat) -map.CWM <- SpatialPointsDataFrame(coords, as.data.frame(CWM), proj4string=CRSlonlat) -str(map.CWM) - -library(maptools) -data(wrld_simpl) -plot(wrld_simpl) -points(coordinates(map.CWM), cex=0.1, col="red", pch=16) -# sPlot2withSLA.png -max(coordinates(map.CWM)[,1]) # 179.5901 -max(coordinates(map.CWM)[,2]) # 80.14912 -min(coordinates(map.CWM)[,1]) # -162.7414 -min(coordinates(map.CWM)[,2]) # -64.78 - - -r <- raster(nrows=180, ncols=360, xmn=-180, xmx=180, ymn=-90, ymx=90) -str(r) -raster.map.SLA <- rasterize(map.CWM,r,map.CWM$SLA.mean, run="mean") -str(raster.map.SLA) -plot(wrld_simpl) -plot(raster.map.SLA, add=T) -# SLAgridded1.png - -library(rworldmap) -raster.map.SLA.grid <- as(raster.map.SLA, 'SpatialGridDataFrame') -library(RColorBrewer) -# Set a color ramp -rf <- brewer.pal(8, 'Spectral') -par(mar=c(0, 0, 0, 8) + 0.1) -mapParams <- mapGriddedData(raster.map.SLA.grid,addLegend=F, - numCats = 8, colourPalette=rf) -str(mapParams) -mapParams$cutVector -# addMapLegend(plottedData=raster.map.SLA.grid,legendShrink=0.5) -#do.call(addMapLegend, c( mapParams, legendLabels="all", legendWidth=0.5, -# legendIntervals="data", legendMar = 2 ) ) -#do.call(addMapLegend, c( mapParams, legendLabels="all", legendWidth=0.3, -# legendIntervals="page", legendMar = 4, legendShrink=1.7,horizontal=F)) -do.call(addMapLegend, c( mapParams, legendLabels="all", legendWidth=0.3, - legendIntervals="page", legendMar =2, horizontal=F)) - -#round(as.numeric(exp(mapParams$cutVector)),1) -mtext(round(as.numeric(exp(mapParams$cutVector)),1),side=4,line=-1.5, - at=seq(-200,230, by=51.3), las=2) -#mtext("ln(SLA)",side=1,line=0, at=230, las=1) -#mtext("ln(SLA)",side=4,line=-2,at=-170, las=2) -# SLAgridded2.png -par(mar=c(5, 4, 4, 2) + 0.1) - -############################################################ -# Regression with Bioclim -############################################################ -'BIO1 = Annual Mean Temperature -BIO2 = Mean Diurnal Range (Mean of monthly (max temp - min temp)) -BIO3 = Isothermality (BIO2/BIO7) (* 100) -BIO4 = Temperature Seasonality (standard deviation *100) -BIO5 = Max Temperature of Warmest Month -BIO6 = Min Temperature of Coldest Month -BIO7 = Temperature Annual Range (BIO5-BIO6) -BIO8 = Mean Temperature of Wettest Quarter -BIO9 = Mean Temperature of Driest Quarter -BIO10 = Mean Temperature of Warmest Quarter -BIO11 = Mean Temperature of Coldest Quarter -BIO12 = Annual Precipitation -BIO13 = Precipitation of Wettest Month -BIO14 = Precipitation of Driest Month -BIO15 = Precipitation Seasonality (Coefficient of Variation) -BIO16 = Precipitation of Wettest Quarter -BIO17 = Precipitation of Driest Quarter -BIO18 = Precipitation of Warmest Quarter -BIO19 = Precipitation of Coldest Quarter' - -index11 <- match(splot.header2$PlotObservationID,splot.bioclim$PLOT_ID) -length(index11) # 1112287 -length(index11[!is.na(index11)]) # 1112287 - -#index12 <- match(CWM2$PlotObservationID, splot.header$PlotObservationID) -#any(is.na(index12)) #F -str(splot.bioclim$BIO_01) -plot(CWM[,"SLA.mean"]~splot.bioclim$BIO_01[index11], - cex=0.05, xlab="BIO_1", ylab="CWM ln(SLA)",cex.lab=1.5, cex.axis=1.5) -model1 <- lm(CWM[,"SLA.mean"]~splot.bioclim$BIO_01[index11]) -model2 <- lm(CWM[,"SLA.mean"]~splot.bioclim$BIO_01[index11]+I(splot.bioclim$BIO_01[index11]^2)) -summary(model1) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) 2.929e+00 8.700e-04 3367 <2e-16 *** -splot.bioclim$BIO_01[index11] -9.720e-04 8.603e-06 -113 <2e-16 *** -Multiple R-squared: 0.01135, Adjusted R-squared: 0.01135 -F-statistic: 1.277e+04 on 1 and 1112285 DF, p-value: < 2.2e-16 -' -summary(model2) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) 2.791e+00 1.059e-03 2635.2 <2e-16 *** -splot.bioclim$BIO_01[index11] 2.446e-03 1.765e-05 138.6 <2e-16 *** -I(splot.bioclim$BIO_01[index11]^2) -1.673e-05 7.593e-08 -220.3 <2e-16 *** -Multiple R-squared: 0.05269 -' -abline(model1, lwd=3, col="blue") -model2$coefficients -x.new <- seq(-100,300,1) -y.new <- model2$coefficients[1]+model2$coefficients[2]*x.new+model2$coefficients[3]*x.new^2 -lines(x.new,y.new, lwd=3, col="blue") -# SLA_BIO1.png - -# devide in quantiles -quantile(splot.bioclim$BIO_01[index11],probs = seq(0, 1, 1/3)) -' 0% 33.33333% 66.66667% 100% - -227 79 99 303 ' -# -> most points (i.e. one third) are in the temperate zone between 7.9 and 9.9°C -x1 <- splot.bioclim$BIO_01[index11][splot.bioclim$BIO_01[index11]<=79] -model1a <- lm(CWM[,"SLA.mean"][splot.bioclim$BIO_01[index11]<=79]~splot.bioclim$BIO_01[index11][splot.bioclim$BIO_01[index11]<=79]) -summary(model1a) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) 2.688e+00 1.178e-03 2282 <2e-16 *** -splot.bioclim$BIO_01[index11][splot.bioclim$BIO_01[index11] <= 79] 2.826e-03 2.004e-05 141 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 0.382 on 372215 degrees of freedom -Multiple R-squared: 0.05069, Adjusted R-squared: 0.05068 -F-statistic: 1.987e+04 on 1 and 372215 DF, p-value: < 2.2e-16' -model1b <- lm(CWM[,"SLA.mean"][splot.bioclim$BIO_01[index11]<=99]~splot.bioclim$BIO_01[index11][splot.bioclim$BIO_01[index11]<=99]) -summary(model1b) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) 2.695e+00 1.112e-03 2422.8 <2e-16 *** -splot.bioclim$BIO_01[index11][splot.bioclim$BIO_01[index11] <= 99] 2.709e-03 1.463e-05 185.1 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 0.3796 on 750485 degrees of freedom -Multiple R-squared: 0.04367, Adjusted R-squared: 0.04367 -F-statistic: 3.427e+04 on 1 and 750485 DF, p-value: < 2.2e-16' -model1c <- lm(CWM[,"SLA.mean"][splot.bioclim$BIO_01[index11]>99]~splot.bioclim$BIO_01[index11][splot.bioclim$BIO_01[index11]>99]) -summary(model1c) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) 3.210e+00 2.425e-03 1323.3 <2e-16 *** -splot.bioclim$BIO_01[index11][splot.bioclim$BIO_01[index11] > 99] -3.417e-03 1.739e-05 -196.5 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 0.4157 on 361798 degrees of freedom -Multiple R-squared: 0.09646, Adjusted R-squared: 0.09646 -F-statistic: 3.862e+04 on 1 and 361798 DF, p-value: < 2.2e-16' - -plot(CWM[,"SLA.mean"]~splot.bioclim$BIO_01[index11], - cex=0.05, xlab="BIO_1", ylab="CWM ln(SLA)",cex.lab=1.5, cex.axis=1.5) -x.new <- seq(-100,79,1) -y.new <- model1a$coefficients[1]+model1a$coefficients[2]*x.new -lines(x.new,y.new, lwd=3, col="blue") -x.new <- seq(79,99,1) -y.new <- model1b$coefficients[1]+model1b$coefficients[2]*x.new -lines(x.new,y.new, lwd=3, col="green") -x.new <- seq(99,300,1) -y.new <- model1c$coefficients[1]+model1c$coefficients[2]*x.new -lines(x.new,y.new, lwd=3, col="red") - -### calculate a GAM -library(gam) -x <- splot.bioclim$BIO_01[index11] -model3 <- gam(CWM[,"SLA.mean"]~lo(x, span=0.5)) -summary(model3) -' Null Deviance: 207269.5 on 1111306 degrees of freedom -Residual Deviance: 187452.7 on 1111302 degrees of freedom -AIC: 1175898 -Anova for Parametric Effects - Df Sum Sq Mean Sq F value Pr(>F) -lo(x, span = 0.5) 1 3238 3238.0 19197 < 2.2e-16 *** -Residuals 1111302 187453 0.2 -Anova for Nonparametric Effects - Npar Df Npar F Pr(F) -(Intercept) -lo(x, span = 0.5) 2.7 37028 < 2.2e-16 *** -' - -x.new <- seq(-100,300,1) -y.new <- predict(model3, data.frame(x=x.new), se = F) -# se=T does not work -plot(CWM[,"SLA.mean"]~splot.bioclim$BIO_01[index11], - cex=0.05, xlab="BIO_1", ylab="CWM ln(SLA)",cex.lab=1.5, cex.axis=1.5) -lines(x.new,y.new, lwd=3, col="blue") - -### N to P ratio -model4 <- lm(CWM[,"LeafNPratio.mean"]~splot.bioclim$BIO_01[index11]) -summary(model4) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) 2.334e+00 4.243e-04 5501 <2e-16 *** -splot.bioclim$BIO_01[index11] 1.313e-03 4.196e-06 313 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 0.1986 on 1112285 degrees of freedom -Multiple R-squared: 0.08096, Adjusted R-squared: 0.08096 -F-statistic: 9.799e+04 on 1 and 1112285 DF, p-value: < 2.2e-16 -' -plot(CWM[,"LeafNPratio.mean"]~splot.bioclim$BIO_01[index11], - cex=0.05, xlab="BIO_01", ylab="CWM ln(Leaf N to P ratio)",cex.lab=1.5, cex.axis=1.5) -abline(model4, lwd=3, col="blue") - -### turn the regression around -# does not make sense -model5 <- lm(splot.bioclim$BIO_01[index11]~CWM[,"SLA.mean"]) -summary(model5) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) 127.41676 0.28026 454.6 <2e-16 *** -CWM[, "SLA.mean"] -12.97407 0.09769 -132.8 <2e-16 *** -Multiple R-squared: 0.01562, Adjusted R-squared: 0.01562 ' - -model6 <- lm(splot.bioclim$BIO_01[index11]~CWM[,"LeafNPratio.mean"]) -summary(model6) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) -72.7479 0.4591 -158.5 <2e-16 *** -CWM[, "LeafNPratio.mean"] 67.2535 0.1883 357.2 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 42.46 on 1111305 degrees of freedom -Multiple R-squared: 0.103, Adjusted R-squared: 0.103 ' - -model7 <- lm(splot.bioclim$BIO_01[index11]~CWM[,"SLA.mean"]+CWM[,"LeafNPratio.mean"]) -summary(model7) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) -41.59378 0.55839 -74.49 <2e-16 *** -CWM[, "SLA.mean"] -9.08978 0.09355 -97.17 <2e-16 *** -CWM[, "LeafNPratio.mean"] 65.04103 0.18885 344.40 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 42.28 on 1111304 degrees of freedom -Multiple R-squared: 0.1106, Adjusted R-squared: 0.1106 ' -x <- splot.bioclim$BIO_01[index11] -model8 <- lm(x~CWM[,"LeafNPratio.mean"]*CWM[,"SLA.mean"]) -summary(model8) -'Coefficients: - Estimate Std. Error t value Pr(>|t|) -(Intercept) -432.2500 2.2645 -190.9 <2e-16 *** -CWM[, "LeafNPratio.mean"] 227.1681 0.9304 244.2 <2e-16 *** -CWM[, "SLA.mean"] 135.8572 0.8202 165.6 <2e-16 *** -CWM[, "LeafNPratio.mean"]:CWM[, "SLA.mean"] -60.2280 0.3386 -177.9 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 41.69 on 1111303 degrees of freedom -Multiple R-squared: 0.1352, Adjusted R-squared: 0.1352 ' - -library(scatterplot3d) # für 3D-Plots -s3d1 <- scatterplot3d(CWM[,"SLA.mean"],CWM[,"LeafNPratio.mean"], x, - xlab="CWM ln(Leaf N to P ratio)", ylab="CWM ln(SLA)", zlab="BIO_1", - pch=1,cex.symbols=0.05,highlight.3d=T,type="p") -#fit <- lm(AnzF ~ Prop.n+Prop.ba,data=data6[data6$Sp=="Qupe",]) -s3d1$plane3d(model8) -# does not work -### producing the plane with points -min(CWM[,"SLA.mean"]) -max(CWM[,"SLA.mean"]) -x2 <- sort(rep(seq(0.1, 5, by=0.1),35)) -min(CWM[,"LeafNPratio.mean"]) -max(CWM[,"LeafNPratio.mean"]) -y2 <- rep(seq(1, 4.4, by=0.1),50) -func <- function(x,y) { -432.2500 + 227.1681 * x + 135.8572*y -60.2280*x*y} -z2 <- func(x2,y2) -s3d1 <- scatterplot3d(CWM[,"SLA.mean"],CWM[,"LeafNPratio.mean"], x, - xlab="CWM ln(Leaf N to P ratio)", ylab="CWM ln(SLA)", zlab="BIO_1", - pch=1,cex.symbols=0.05,highlight.3d=T,type="p",angle=70,scale.y=0.5) -s3d1$points3d(x2,y2,z2,col="blue", type="p", pch=20, cex=0.5) -# -x <- splot.bioclim$BIO_01[index11] -model7 <- lm(CWM[,"SLA.mean"]~x*CWM[,"LeafNPratio.mean"]) -summary(model7) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) 1.948e+00 9.377e-03 207.8 <2e-16 *** -x 1.278e-02 7.985e-05 160.0 <2e-16 *** -CWM[, "LeafNPratio.mean"] 3.916e-01 3.856e-03 101.6 <2e-16 *** -x:CWM[, "LeafNPratio.mean"] -5.472e-03 3.166e-05 -172.8 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 0.4213 on 1111303 degrees of freedom -Multiple R-squared: 0.04842, Adjusted R-squared: 0.04842 ' -min(x) -max(x) -x2 <- sort(rep(seq(-100, 290, by=10),35)) -min(CWM[,"LeafNPratio.mean"]) -max(CWM[,"LeafNPratio.mean"]) -y2 <- rep(seq(1, 4.4, by=0.1),40) -func <- function(x,y) { 1.948e+00 + 1.278e-02 * x + 3.916e-01*y -5.472e-03*x*y} -z2 <- func(x2,y2) -s3d1 <- scatterplot3d(x,CWM[,"LeafNPratio.mean"], CWM[,"SLA.mean"], - xlab="BIO_1", ylab="CWM ln(Leaf N to P ratio)", zlab="CWM ln(SLA)", - pch=1,cex.symbols=0.05,highlight.3d=T,type="p",angle=50,scale.y=1) -s3d1$points3d(x2,y2,z2,col="blue", type="p", pch=20, cex=0.5) -# final plot -# some BIO_01 and LeafNPratio combinations do not exist -?cut -x.cut <- cut(x, breaks=seq(-110, 290, by=10)) -y.cut <- cut(CWM[,"LeafNPratio.mean"],breaks=seq(0.9, 4.4, by=0.1)) -z.cut <- table(x.cut,y.cut) -head(z.cut) -dim(z.cut) #40 35 -z2.cut <- table(x2,y2) -head(z2.cut) -dim(z2.cut) #40 35 - -#library(reshape2) -z.cut <- melt(z.cut) -str(z.cut) # 1400 obs. of 3 variables: -head(z.cut) -z2.cut <- melt(z2.cut) -str(z2.cut) #1400 obs. of 3 variables: -head(z2.cut) -z2.cut$value <- 0 -z2.cut$value <- z.cut$value -z2.cut$xy <- paste(z2.cut$x2,z2.cut$y2,sep="_") -#z3.cut <- acast(z2.cut, x2~y2) -#head(z3.cut) -xy <- paste(x2,y2,sep="_") -index20 <- match(xy,z2.cut$xy) -values.present <- vector(mode="logical", length=length(x2)) -values.present <- z2.cut$value[index20] > 0 -table(values.present) -'z.cut$value[z.cut$x.cut==x.cut[1] & z.cut$y.cut==y.cut[1]] -values.present <- function(z.cut,x,y){ - z.cut$value[z.cut$x.cut==x & z.cut$y.cut==y] -} -x1 <- data.frame(x,x.cut, y=CWM[,"LeafNPratio.mean"],y.cut) -head(x1) -z1 <- apply(x1,1,FUN=values.present(z.cut, x1$x.cut, x1$y.cut)) -values.present(z.cut, x1$x.cut[1], x1$y.cut[1]) -' - -s3d1 <- scatterplot3d(x,CWM[,"LeafNPratio.mean"], CWM[,"SLA.mean"], - xlab="BIO_1", ylab="CWM ln(Leaf N to P ratio)", zlab="CWM ln(SLA)", - pch=1,cex.symbols=0.05,highlight.3d=T,type="p",angle=-10,scale.y=0.8) -s3d1$points3d(x2[values.present],y2[values.present],z2[values.present],col="blue", type="p", pch=20, cex=0.5) - - -#### Collect all CWM regressions #### -names(splot.bioclim) # from 4 (BIO_01 to 49 T_DEC -CWM.bioclim <- array(NA,c(46,18,5),dimnames=list(names(splot.bioclim)[4:49],dimnames(CWM)[[2]], - c("p_lin","r2_lin","p_qua1", "p_qua2","r2_qua"))) -for (i in 1:46){ - for (j in 1:18){ - model1 <- lm(CWM[,j]~splot.bioclim[index11,i+3]) - CWM.bioclim[i,j,1] <- summary(model1)$coefficients[2,4] - CWM.bioclim[i,j,2] <- summary(model1)$r.squared - model2 <- lm(CWM[,j]~splot.bioclim[index11,i+3]+I(splot.bioclim[index11,i+3]^2)) - CWM.bioclim[i,j,3] <- summary(model2)$coefficients[2,4] - CWM.bioclim[i,j,4] <- summary(model2)$coefficients[3,4] - CWM.bioclim[i,j,5] <- summary(model2)$r.squared - } -} -str(CWM.bioclim) #num [1:46, 1:18, 1:5] -write.csv(data.frame(names(splot.bioclim)[4:49],CWM.bioclim[,,2]),file = "CWM_bioclim_r2_lin2.csv", row.names = FALSE) -write.csv(data.frame(names(splot.bioclim)[4:49],CWM.bioclim[,,5]),file = "CWM_bioclim_r2_qua2.csv", row.names = FALSE) - -# for SLA -which(CWM.bioclim[,3,2]==max(CWM.bioclim[,3,2])) # BIO_02 -which(CWM.bioclim[,3,5]==max(CWM.bioclim[,3,5])) # BIO_02 -which(CWM.bioclim[,,2]==max(CWM.bioclim[,,2]),arr.ind = TRUE) -# row col -#BIO_02 2 3 -CWM.bioclim[2,3,2] #0.1113908 -which(CWM.bioclim[,,5]==max(CWM.bioclim[,,5]),arr.ind = TRUE) -# row col -#PET 22 2 -CWM.bioclim[22,2,5] # 0.1407318 -names(splot.bioclim)[2+3] #"BIO_02" -dimnames(CWM)[[2]][9] #"LeafNperArea.mean" -plot(CWM[,"LeafNperArea.mean"]~splot.bioclim$BIO_02[index11], - cex=0.05, xlab="BIO_02", ylab="CWM ln(Leaf N per Area)",cex.lab=1.5, cex.axis=1.5) -model1 <- lm(CWM[,9]~splot.bioclim[index11,2+3]) -abline(model1, lwd=3, col="blue") -# MeanNperArea_BIO_02.png -png(filename="MeanNperArea_BIO_02.png", width=800, height=800, units = "px", bg="white") - plot(CWM[,"LeafNperArea.mean"]~splot.bioclim$BIO_02[index11], - cex=0.05, xlab="BIO_02", ylab="CWM ln(Leaf N per Area)",cex.lab=1.5, cex.axis=1.5) - #model1 <- lm(CWM[,9]~splot.bioclim[index11,2+3]) - abline(model1, lwd=3, col="blue") -dev.off() # creates a file -png(filename="SLA_BIO_02.png", width=800, height=800, units = "px", bg="white") - plot(CWM[,"SLA.mean"]~splot.bioclim$BIO_02[index11], - cex=0.05, xlab="BIO_02", ylab="CWM ln(SLA)",cex.lab=1.5, cex.axis=1.5) - model1 <- lm(CWM[,1]~splot.bioclim[index11,2+3]) -abline(model1, lwd=3, col="blue") -dev.off() # creates a file - -#### PCA of all CWM and all Bioclim variables #### -library(vegan) -pca1 <- rda(CWM,scale=T) -plot(pca1) -head(summary(pca1),100) -'Partitioning of correlations: - Inertia Proportion -Total 18 1 -Unconstrained 18 1 - -Eigenvalues, and their contribution to the correlations - -Importance of components: - PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11 PC12 PC13 -Eigenvalue 5.3194 3.5487 2.0227 1.37785 1.27883 1.00296 0.71963 0.66827 0.56198 0.49244 0.34211 0.26158 0.19518 -Proportion Explained 0.2955 0.1971 0.1124 0.07655 0.07105 0.05572 0.03998 0.03713 0.03122 0.02736 0.01901 0.01453 0.01084 -Cumulative Proportion 0.2955 0.4927 0.6050 0.68159 0.75264 0.80836 0.84834 0.88546 0.91668 0.94404 0.96305 0.97758 0.98842 - PC14 PC15 PC16 PC17 PC18 -Eigenvalue 0.07591 0.05484 0.05067 0.01766 0.009314 -Proportion Explained 0.00422 0.00305 0.00281 0.00098 0.000520 -Cumulative Proportion 0.99264 0.99569 0.99850 0.99948 1.000000' -str(summary(pca1)) -#text(summary(pca1)$species[,c(1,2)],dimnames(summary(pca1)$species)[[1]]) -traitnames <- dimnames(summary(pca1)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(pca1)$species[,c(1,2)] -plotcoord <- summary(pca1)$sites[,c(1,2)] -which(traitnames=="Seed.length") #9 -traitcoord[9,2] <- traitcoord[9,2]+0.3 -which(traitnames=="LDMC") #10 -traitcoord[10,2] <- traitcoord[10,2]-0.3 -ordiplot(pca1, type="n", ylim=c(-10,10)) -text(traitcoord,traitnames, col="red", cex=1) -points(plotcoord*30, cex=0.05) -#env1 <- envfit(pca1,splot.bioclim[index11,c(4:49)],permutations = 99) -#with permutations = 999: -#Error: cannot allocate vector of size 4.1 Gb -plot(env1) -png(filename="PCA1.png", width=1000, height=1000, units = "px", bg="white") - ordiplot(pca1, type="n") - text(traitcoord,traitnames) - plot(env1) -dev.off() # creates a file -'rm(env1) -rm(backbone.splot.try3) -rm(model1) -rm(model2) -rm(pca1) -rm(splot.header) -rm(splot.header2) -rm(traitdist) -rm(coords) -rm(TRY.all.mean.sd.2) -rm(index7) -rm(raster.map.SLA) -rm(trait.vec) -rm(FD) -rm(splot.bioclim) -' -gc() - -### produce a PCA with kernel density -# From Díaz et al. 2016, Nature -library(ks) -str(plotcoord) #num [1:1111307, 1:2] -H <- Hpi(x=plotcoord) # optimal bandwidth estimation -# does not work -est<- kde(x=plotcoord, H=H, compute.cont=TRUE) # kernel density estimation - -library(raster) -library(fBasics) -# Color palette -#plotcoord <- plotcoord*30 -min(plotcoord[,1]) #-0.3202043 -max(plotcoord[,1]) # 0.3078603 -min(plotcoord[,2]) #-0.5899272 -max(plotcoord[,2]) # 0.2530614 -x.cut <- cut(plotcoord[,1], breaks=seq(min(plotcoord[,1]), max(plotcoord[,1]), by=0.01)) -y.cut <- cut(plotcoord[,2], breaks=seq(min(plotcoord[,2]), max(plotcoord[,2]), by=0.01)) -z.cut <- table(x.cut,y.cut) -head(z.cut) -dim(z.cut) #62 84 -z.cut <- melt(z.cut) -str(z.cut) # 5208 obs. of 3 variables: -head(z.cut) -z.cut$xy <- paste(z.cut$x.cut,z.cut$y.cut,sep="_") -str(x.cut) -length(x.cut) # 1112287 -xy <- paste(x.cut,y.cut,sep="_") -index30 <- match(xy,z.cut$xy) -length(index30) -any(is.na(index30)) # T -head(log10(z.cut$value[index30])) -values.present <- vector(mode="numeric", length=length(xy)) -min(log10(z.cut$value[index30]), na.rm=T) #0 -max(log10(z.cut$value[index30]), na.rm=T) # 3.992156 -values.cut <- cut(log10(z.cut$value[index30]), breaks=seq(min(log10(z.cut$value[index30]), na.rm=T), - 4, by=0.4)) -#values.present <- z.cut$value[index30] -ordiplot(pca1, type="n") -#points(plotcoord*30, cex=0.05, col=rainbowPalette(n=10, -# s = 1, v = 1, start = 3/6, end = 5/6, alpha = 1)[values.cut]) -points(plotcoord*30, cex=0.05, col=rev(greyPalette(n=10, start = 0, end = 0.8, - gamma = 2.2, alpha = NULL))[values.cut]) -text(traitcoord,traitnames, col="red", cex=1) - - -ext.factor <- 30 -r.pca <- raster(nrows=300, ncols=300, xmn=min(plotcoord[,1])*ext.factor, xmx=max(plotcoord[,2])*ext.factor, - ymn=min(plotcoord[,1])*ext.factor, ymx=max(plotcoord[,2]*ext.factor)) -# attention, xmn and ymn as well as xmx and ymx have to be the same, otherwise the raster is shifted -r.pca.raster <- rasterize(plotcoord*ext.factor, r.pca, fun="count") -str(r.pca.raster) -plot(log10(r.pca.raster), asp=0, col=seqPalette(n=10, name=c("Blues")), - main="", cex.main=0.7, xlab="", ylab="", add=T) -plot(log10(r.pca.raster), asp=0, col=rev(greyPalette(n=10, start = 0, end = 0.8, - gamma = 2.2, alpha = NULL)), - main="", cex.main=0.7, xlab="", ylab="", add=T) -plot(log10(r.pca.raster), asp=0, col=rainbowPalette(n=10, s = 1, v = 1, start = 3/6, end = 5/6, alpha = 1), - main="", cex.main=0.7, xlab="", ylab="", add=T, legend=F) - -'## graph for the PCA ## -ordiplot(pca1, type="n", xlim=c(-10,13), ylim=c(-10,10)) -rasterImage(as.raster(r.pca.raster), -10, -10, 20, 10, interpolate = F, - col=rainbowPalette(n=10, s = 1, v = 1, start = 3/6, end = 5/6, alpha = 1)) -plot(log10(r.pca.raster), asp=0, col=rainbowPalette(n=10, s = 1, v = 1, start = 3/6, end = 5/6, alpha = 1), - main="", cex.main=0.7, xlab="", ylab="", add=T, legend=F) -text(traitcoord,traitnames, col="red", cex=1) -' - - -rda1 <- rda(CWM~.,splot.bioclim[index11,c(4:49)],scale=T) -plot(rda1) -head(summary(rda1), 100) -rda1 -'Partitioning of correlations: - Inertia Proportion -Total 18.000 1.0000 -Constrained 2.321 0.1289 -Unconstrained 15.679 0.8711 - -Eigenvalues, and their contribution to the correlations - -Importance of components: -RDA1 RDA2 RDA3 RDA4 RDA5 RDA6 RDA7 RDA8 RDA9 RDA10 RDA11 RDA12 -Eigenvalue 1.20610 0.57369 0.23626 0.15021 0.06339 0.02077 0.02014 0.01570 0.01164 0.008565 0.007286 0.002948 -Proportion Explained 0.06701 0.03187 0.01313 0.00835 0.00352 0.00115 0.00112 0.00087 0.00065 0.000480 0.000400 0.000160 -Cumulative Proportion 0.06701 0.09888 0.11200 0.12035 0.12387 0.12502 0.12614 0.12701 0.12766 0.128140 0.128540 0.128710 -RDA13 RDA14 RDA15 RDA16 RDA17 RDA18 PC1 PC2 PC3 PC4 PC5 PC6 -Eigenvalue 0.002155 0.00111 0.0002949 0.0001558 0.0000665 3.596e-05 4.2977 3.0445 1.8700 1.1826 1.10560 0.94049 -Proportion Explained 0.000120 0.00006 0.0000200 0.0000100 0.0000000 0.000e+00 0.2388 0.1691 0.1039 0.0657 0.06142 0.05225 -Cumulative Proportion 0.128830 0.12889 0.1289000 0.1289100 0.1289200 1.289e-01 0.3677 0.5368 0.6407 0.7064 0.76783 0.82008 -PC7 PC8 PC9 PC10 PC11 PC12 PC13 PC14 PC15 PC16 PC17 PC18 -Eigenvalue 0.70216 0.61116 0.50930 0.46537 0.32289 0.24648 0.1782 0.07293 0.05366 0.04986 0.01738 0.009213 -Proportion Explained 0.03901 0.03395 0.02829 0.02585 0.01794 0.01369 0.0099 0.00405 0.00298 0.00277 0.00097 0.000510 -Cumulative Proportion 0.85909 0.89304 0.92134 0.94719 0.96513 0.97882 0.9887 0.99277 0.99575 0.99852 0.99949 1.000000' -#anova(rda1, perm=99) -#anova(rda1, by="terms", permutations = how(nperm=9)) -library(parallel) -detectCores() #32 -# Set up the cluster -#clusterType <- if(length(find.package("snow", quiet = TRUE))) "SOCK" else "PSOCK" -#clust <- try(makeCluster(getOption("cl.cores", 2), type = clusterType)) -cl <- makeCluster(10) -#registerDoParallel(cl) -options(na.action = "na.pass") -#clusterExport(cl, "results") - -#print(system.time(anova(rda1, by="terms", perm=99, parallel = getOption("mc.cores")))) -print(system.time(out1 <- anova(rda1, by="margin", permutations =99, parallel = cl))) -'user system elapsed -5304.802 1311.088 14522.410 -' -out1 - -traitnames <- dimnames(summary(rda1)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(rda1)$species[,c(1,2)] -bioclimcoord <- summary(rda1)$biplot[,c(1,2)] -which(traitnames=="LeafNperArea") #9 -traitcoord[9,1] <- traitcoord[9,1]+0.5 -which(traitnames=="StemDens") #5 -traitcoord[5,2] <- traitcoord[5,2]+0.3 -which(traitnames=="Disp.unit.leng") #18 -traitcoord[18,2] <- traitcoord[18,2]-0.3 -ordiplot(rda1, type="n", xlim=c(-7,7)) -arrows(rep(0,45),rep(0,45),bioclimcoord[,1]*8,bioclimcoord[,2]*8, col="cadetblue4", length=0.1) -text(bioclimcoord*8,dimnames(bioclimcoord)[[1]], col="cadetblue4", cex=0.8) -text(traitcoord,traitnames, col="red") -# copied as first RDA graph into ppt - -#rda1 <- rda(CWM ~ ., splot.bioclim[index11,c(4:49)],scale=T) - -### Stepwise RDA ### -rda2 <- rda(CWM ~ 1,splot.bioclim[index11,c(4:49)],scale=T) -#rda3 <- step(rda2, scope = formula(rda1), test = "perm") -rda3 <- ordiR2step(rda2, scope=formula(rda1), direction = "both", Pin = 0.05, R2scope = F, permutations = how(nperm = 99), trace = TRUE) -#TRY2.0: CWM ~ GDD5 + BIO_02 + BIO_12 + T_MAY + P_MAY + T_AUG .... -#TRY3.0: CWM ~ GDD5 + BIO_02 + BIO_12 + T_MAY + P_MAY + T_SEP + P_DEC + P_FEB -#rm(rda1) - -# now rebuild the RDA sequentially -pca1 <- rda(CWM,scale=T) -pca1 -5.527+ 3.906+ 1.953+ 1.507+ 1.375+ 0.886+ 0.726+ 0.623+ 0.499 +0.360+ 0.295+ 0.131+ 0.087+ 0.077+ 0.048 -(5.527+ 3.906)/18 # 52.40556% - -traitnames <- dimnames(summary(pca1)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(pca1)$species[,c(1,2)] -which(traitnames=="SeedMass") #3 -traitcoord[3,2] <- traitcoord[3,2]-0.5 -ordiplot(pca1, type="n") -text(traitcoord,traitnames, col="red") -# copied as second RDA graph into ppt - - -rda4 <- rda(CWM ~ GDD5,splot.bioclim[index11,c(4:49)],scale=T) -rda4 -traitnames <- dimnames(summary(rda4)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(rda4)$species[,c(1,2)] -plotcoord <- summary(rda4)$sites[,c(1,2)] -str(plotcoord) #num [1:1112287, 1:2] -bioclimcoord <- summary(rda4)$biplot[,c(1,2)] - -min(plotcoord[,1]) #-0.683271 -max(plotcoord[,1]) # 0.8519885 -min(plotcoord[,2]) #-0.3398233 -max(plotcoord[,2]) # 0.3047364 -x.cut <- cut(plotcoord[,1], breaks=seq(min(plotcoord[,1]), max(plotcoord[,1]), by=0.01)) -y.cut <- cut(plotcoord[,2], breaks=seq(min(plotcoord[,2]), max(plotcoord[,2]), by=0.01)) -z.cut <- table(x.cut,y.cut) -head(z.cut) -dim(z.cut) #153 64 -z.cut <- melt(z.cut) -str(z.cut) # 6550 obs. of 3 variables: -head(z.cut) -z.cut$xy <- paste(z.cut$x.cut,z.cut$y.cut,sep="_") -str(x.cut) -length(x.cut) # 1112287 -xy <- paste(x.cut,y.cut,sep="_") -index30 <- match(xy,z.cut$xy) -length(index30) -any(is.na(index30)) #T -head(log10(z.cut$value[index30])) -values.present <- vector(mode="numeric", length=length(xy)) -min(log10(z.cut$value[index30]), na.rm=T) #0 -max(log10(z.cut$value[index30]), na.rm=T) # 3.947336 -values.cut <- cut(log10(z.cut$value[index30]), breaks=seq(min(log10(z.cut$value[index30]), na.rm=T), - 4, by=0.4)) - - -ordiplot(rda4, type="n") -points(plotcoord*30, cex=0.05, col=rev(greyPalette(n=10, start = 0, end = 0.8, - gamma = 2.2, alpha = NULL))[values.cut]) - -arrows(rep(0,1),rep(0,1),bioclimcoord[1]*8,bioclimcoord[2]*8, col="blue", length=0.1) -text(bioclimcoord[1]*8+0.8,bioclimcoord[2]*8-0.2,"GDD5", col="blue", cex=1) -text(traitcoord,traitnames, col="red") -# copied as third RDA graph into ppt - -rda5 <- rda(CWM ~ GDD5+BIO_02,splot.bioclim[index11,c(4:49)],scale=T) -rda5 -traitnames <- dimnames(summary(rda5)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(rda5)$species[,c(1,2)] -bioclimcoord <- summary(rda5)$biplot[,c(1,2)] -plotcoord <- summary(rda5)$sites[,c(1,2)] -str(plotcoord) #num [1:1112287, 1:2] -x.cut <- cut(plotcoord[,1], breaks=seq(min(plotcoord[,1]), max(plotcoord[,1]), by=0.01)) -y.cut <- cut(plotcoord[,2], breaks=seq(min(plotcoord[,2]), max(plotcoord[,2]), by=0.01)) -z.cut <- table(x.cut,y.cut) -head(z.cut) -dim(z.cut) #141 205 -z.cut <- melt(z.cut) -str(z.cut) # 6550 obs. of 3 variables: -head(z.cut) -z.cut$xy <- paste(z.cut$x.cut,z.cut$y.cut,sep="_") -str(x.cut) -length(x.cut) # 1111307 -xy <- paste(x.cut,y.cut,sep="_") -index30 <- match(xy,z.cut$xy) -length(index30) -any(is.na(index30)) -head(log10(z.cut$value[index30])) -values.present <- vector(mode="numeric", length=length(xy)) -min(log10(z.cut$value[index30]), na.rm=T) #0 -max(log10(z.cut$value[index30]), na.rm=T) # 3.228913 -values.cut <- cut(log10(z.cut$value[index30]), breaks=seq(min(log10(z.cut$value[index30]), na.rm=T), - 4, by=0.4)) - - - -ordiplot(rda5, type="n", xlim=c(-10,10), ylim=c(-10,10)) -points(plotcoord*15, cex=0.05, col=rev(greyPalette(n=10, start = 0, end = 0.8, - gamma = 2.2, alpha = NULL))[values.cut]) -arrows(rep(0,2),rep(0,2),bioclimcoord[,1]*8,bioclimcoord[,2]*8, col="blue", length=0.1) -text(bioclimcoord*8,dimnames(bioclimcoord)[[1]], col="blue", cex=1) -text(traitcoord,traitnames, col="red") -# copied as fourth RDA graph into ppt - - -plot(CWM[,"LeafNPratio.mean"]~splot.bioclim$GDD5[index11], - cex=0.05, xlab="GDD5", ylab="CWM ln(leaf N to P ratio)",cex.lab=1.5, cex.axis=1.5) -model1 <- lm(CWM[,"LeafNPratio.mean"]~splot.bioclim$GDD5[index11]) -summary(model1) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) 2.334e+00 3.795e-04 6149.5 <2e-16 *** -splot.bioclim$GDD5[index11] 5.757e-06 1.595e-08 360.9 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 0.196 on 1112285 degrees of freedom -Multiple R-squared: 0.1048, Adjusted R-squared: 0.1048 -F-statistic: 1.303e+05 on 1 and 1112285 DF, p-value: < 2.2e-16 -' -abline(model1, lwd=3, col="blue") -# LeafNPRatio_GDD5 - -plot(CWM[,"SLA.mean"]~jitter(splot.bioclim$BIO_02[index11]), - cex=0.05, xlab="BIO_02", ylab="CWM ln(SLA)",cex.lab=1.5, cex.axis=1.5) -model1 <- lm(CWM[,"SLA.mean"]~splot.bioclim$BIO_02[index11]) -summary(model1) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) 3.399e+00 1.448e-03 2348.2 <2e-16 *** -splot.bioclim$BIO_02[index11] -6.253e-03 1.551e-05 -403.3 <2e-16 *** - -Residual standard error: 0.4034 on 1111305 degrees of freedom -Multiple R-squared: 0.1277, Adjusted R-squared: 0.1277 -' -abline(model1, lwd=3, col="blue") -# SLA_BIO_02 - -plot(CWM[,"LeafNperArea.mean"]~jitter(splot.bioclim$BIO_02[index11]), - cex=0.05, xlab="BIO_02", ylab="CWM ln(Leaf N per area)",cex.lab=1.5, cex.axis=1.5) -model1 <- lm(CWM[,"LeafNperArea.mean"]~splot.bioclim$BIO_02[index11]) -summary(model1) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) -5.989e-02 8.475e-04 -70.67 <2e-16 *** -splot.bioclim$BIO_02[index11] 3.696e-03 9.079e-06 407.09 <2e-16 *** ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Residual standard error: 0.2362 on 1111305 degrees of freedom -Multiple R-squared: 0.1298, Adjusted R-squared: 0.1298 -' -abline(model1, lwd=3, col="blue") -# LeafNper_BIO_02 - -##### FD calculations #### -j <- 3 -nam <- DT$species[DT$PlotObservationID==j] -abu <- DT$Relative.cover[DT$PlotObservationID==j] -trait <- DT$trait[DT$PlotObservationID==j] -abundance.weighted=T - -FD.fun <- function(trait, abu){ - res <- as.double(NA) - if (length(trait[!is.na(trait)])>0){ - res <- 0 - #nam <- as.character(nam[!is.na(trait)]) - abu <- as.data.frame(abu[!is.na(trait)]) - #rownames(abu) <- nam - trait <- as.data.frame(trait[!is.na(trait)]) - #rownames(trait) <- nam - dis <- dist(trait,method="euclidean") - if (sum(dis)>1){ - sqrt.dis <- sqrt(dis) - # taking the square root is required to obtain the same result from the divc function - # as divc takes the square of distances values, as suggested by - # Champely & Chessel (2002, Env. Ecol. Stat. 9: 167-177) - #abu <- as.data.frame(abu) - res <- unlist(divc(abu, sqrt.dis)) - #Rao's Q: sumi sumj (dist ij prop i prop j)' - } - } - res -} - -mpd.fun <- function(nam, trait, abu,abundance.weighted){ - #res <- numeric(1) # carries result from the function - res <- as.double(NA) - if (length(trait[!is.na(trait)])>0){ - # dis <- as.matrix(dist(t(t1),method="euclidean")) - abu <- t(abu) - colnames(abu) <- nam - trait <- t(trait) - colnames(trait) <- nam - #dis <- as.matrix(vegdist(t(t1),method="euclidean", na.rm=T)) - dis <- as.matrix(dist(t(trait),method="euclidean")) - res <- mpd(abu, dis, abundance.weighted=abundance.weighted) - } - res -} - -# from mpd source code -'N <- dim(samp)[1] -mpd <- numeric(N) -for (i in 1:N) { - sppInSample <- names(samp[i, samp[i, ] > 0]) - if (length(sppInSample) > 1) { - sample.dis <- dis[sppInSample, sppInSample] - if (abundance.weighted) { - sample.weights <- t(as.matrix(samp[i, sppInSample, - drop = FALSE])) %*% as.matrix(samp[i, sppInSample, - drop = FALSE]) - mpd[i] <- weighted.mean(sample.dis, sample.weights) - } - else { - mpd[i] <- mean(sample.dis[lower.tri(sample.dis)]) - } - } - else { - mpd[i] <- NA - } -} -mpd -' -# from Oliver, who used picante -# does not accept missing values in the function -library(picante) -# define function for mean pairwise distance -'mpd.fun.dt <- function(abu, dis, nam, abundance.weighted){ - abu <- t(abu) - colnames(abu) <- nam - res <- mpd(abu, dis, abundance.weighted=abundance.weighted) -} -# define funtion of mean nearest neighbor distance -mntd.fun.dt <- function(abu, dis, nam, abundance.weighted){ - abu <- t(abu) - colnames(abu) <- nam - res <- mntd(abu, dis, abundance.weighted=abundance.weighted) - res -} -species.list <- unique(DT$species) -any(is.na(species.list)) #T, there is one NA -length(species.list) #60909 -species.list <- species.list[!is.na(species.list)] -length(species.list) #60908 -index8 <- match(species.list,TRY.all.mean.sd.2$species) -str(index8) # 60908 -length(index8[!is.na(index8)]) #21001 -#species.list2 <- TRY.all.mean.sd.2$species[index8] -#species.list2 <- species.list2[!is.na(species.list2)] -#length(species.list2) # 21001 -TRY.all.mean.sd.2.na <- TRY.all.mean.sd.2[index8,] -str(TRY.all.mean.sd.2.na) -TRY.all.mean.sd.2.na$species2 <- species.list -rm(index9) -' -FD <- array(NA,c(dim(CWM)[1],18),dimnames=list(dimnames(CWM)[[1]], - colnames(TRY.all.mean.sd.2)[3:20])) -str(FD) #logi [1:1117898, 1:18] -'for (i in 1:18){ - # create distance matrix - #trait.vec <- TRY.all.mean.sd.2.na[,i+2] - #names(trait.vec) <- TRY.all.mean.sd.2.na$species2 - #trait.dist.mat <- as.matrix(dist(trait.vec)) - # too large for my notebook - #mpd[,i] <- DT[,list(mpd.trait= mpd.fun.dt(Relative.cover, trait.dist.mat, species, abundance.weighted=TRUE)),by=PlotObservationID]$mpd.trait - print(i) - DT$trait <- NA - DT$trait <- TRY.all.mean.sd.2[index7,i+2] - FD[,i] <- DT[,list(mpd.trait= mpd.fun(species, trait, Relative.cover, abundance.weighted=TRUE)),by=PlotObservationID]$mpd.trait -} -write.csv(FD,file = "FD2.csv", row.names = T) -' -for (i in 1:18){ - # create distance matrix - #trait.vec <- TRY.all.mean.sd.2.na[,i+2] - #names(trait.vec) <- TRY.all.mean.sd.2.na$species2 - #trait.dist.mat <- as.matrix(dist(trait.vec)) - # too large for my notebook - #mpd[,i] <- DT[,list(mpd.trait= mpd.fun.dt(Relative.cover, trait.dist.mat, species, abundance.weighted=TRUE)),by=PlotObservationID]$mpd.trait - print(i) - DT$trait <- NA - DT$trait <- TRY.all.mean.sd.2[index7,i+2] - # recalculate relative cover for this trait - FD[,i] <- DT[,list(FD.trait= FD.fun(trait, Relative.cover)),by=PlotObservationID]$FD.trait -} -write.csv(FD,file = "FD3.csv", row.names = T) - -#FD <- read.csv("C://Daten//iDiv2//splot2//FD3.csv") -FD <- read.csv("C://Daten//iDiv2//splot2//splot2.0//FD_TRY3.csv") -str(FD) -dimnames(FD)[[1]] <- FD$X -FD <- FD[,-1] -tail(FD) - -#### match FD to splot.header #### -index12 <- match(dimnames(FD)[[1]],splot.header$PlotObservationID) -length(index12) #1117898 -any(is.na(index12)) # F -splot.header3 <- splot.header[index12,] -str(FD) # num [1:1117898, 1:18] -FD <- FD[!(is.na(splot.header3$Longitude)|is.na(splot.header3$Latitude)|is.na(FD[,"SLA.mean"])),] -str(FD) # num [1:1112287 , 1:18] -1112287 /1117898*100 # 99.49808 % of plots have traits, Long and Lat -any(is.na(FD)) #F -# match header again -index13 <- match(dimnames(FD)[[1]],splot.header$PlotObservationID) -length(index13) #1112287 -any(is.na(index13)) # F -splot.header3 <- splot.header[index13,] -# now in the same sequence as FD - - -#### Collect all FD regressions #### -names(splot.bioclim) # from 4 BIO_01 to 49 T_MAR -index14 <- match(splot.header3$PlotObservationID,splot.bioclim$PLOT_ID) -length(index14) # 1111307 -length(index14[!is.na(index14)]) # 1111307 - -FD.bioclim <- array(NA,c(46,18,5),dimnames=list(names(splot.bioclim)[4:49],dimnames(FD)[[2]], - c("p_lin","r2_lin","p_qua1", "p_qua2","r2_qua"))) -for (i in 1:46){ - for (j in 1:18){ - model1 <- lm(FD[,j]~splot.bioclim[index14,i+3]) - FD.bioclim[i,j,1] <- summary(model1)$coefficients[2,4] - FD.bioclim[i,j,2] <- summary(model1)$r.squared - model2 <- lm(FD[,j]~splot.bioclim[index14,i+3]+I(splot.bioclim[index14,i+3]^2)) - FD.bioclim[i,j,3] <- summary(model2)$coefficients[2,4] - FD.bioclim[i,j,4] <- summary(model2)$coefficients[3,4] - FD.bioclim[i,j,5] <- summary(model2)$r.squared - } -} -str(FD.bioclim) #num [1:46, 1:18, 1:5] -write.csv(data.frame(names(splot.bioclim)[4:49],FD.bioclim[,,2]),file = "FD2_bioclim_r2_lin.csv", row.names = FALSE) -write.csv(data.frame(names(splot.bioclim)[4:49],FD.bioclim[,,5]),file = "FD2_bioclim_r2_qua.csv", row.names = FALSE) - -library(vegan) -FD.pca1 <- rda(FD,scale=T) -FD.pca1 -' -Eigenvalues for unconstrained axes: - PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 -8.703 1.758 1.122 0.974 0.732 0.643 0.590 0.540 -(Showed only 8 of all 18 unconstrained eigenvalues) -' -plot(FD.pca1) -head(summary(FD.pca1)) -#text(summary(FD.pca1)$species[,c(1,2)],dimnames(summary(FD.pca1)$species)[[1]]) -traitnames <- dimnames(summary(FD.pca1)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(FD.pca1)$species[,c(1,2)] -which(traitnames=="Seed.length") #17 -traitcoord[17,2] <- traitcoord[17,2]+0.3 -which(traitnames=="LeafC.perdrymass") #12 -traitcoord[12,2] <- traitcoord[12,2]-0.4 -which(traitnames=="Leaf.delta.15N") #13 -traitcoord[13,2] <- traitcoord[13,2]+0.4 -which(traitnames=="LeafNPratio") #11 -traitcoord[11,2] <- traitcoord[11,2]-0.3 - -plotcoord <- summary(FD.pca1)$sites[,c(1,2)] -str(plotcoord) #num [1:1111307, 1:2] -x.cut <- cut(plotcoord[,1], breaks=seq(min(plotcoord[,1]), max(plotcoord[,1]), by=0.01)) -y.cut <- cut(plotcoord[,2], breaks=seq(min(plotcoord[,2]), max(plotcoord[,2]), by=0.01)) -z.cut <- table(x.cut,y.cut) -head(z.cut) -dim(z.cut) #131 50 -z.cut <- melt(z.cut) -str(z.cut) # 6550 obs. of 3 variables: -head(z.cut) -z.cut$xy <- paste(z.cut$x.cut,z.cut$y.cut,sep="_") -str(x.cut) -length(x.cut) # 1111307 -xy <- paste(x.cut,y.cut,sep="_") -index30 <- match(xy,z.cut$xy) -length(index30) -any(is.na(index30)) -head(log10(z.cut$value[index30])) -values.present <- vector(mode="numeric", length=length(xy)) -min(log10(z.cut$value[index30]), na.rm=T) #0 -max(log10(z.cut$value[index30]), na.rm=T) # 3.399154 -values.cut <- cut(log10(z.cut$value[index30]), breaks=seq(min(log10(z.cut$value[index30]), na.rm=T), - 4, by=0.4)) - -ordiplot(FD.pca1, type="n") -#text(traitcoord,traitnames) -points(plotcoord*30, cex=0.05, col=rev(greyPalette(n=10, start = 0, end = 0.8, - gamma = 2.2, alpha = NULL))[values.cut]) - -#arrows(rep(0,45),rep(0,45),bioclimcoord[,1]*8,bioclimcoord[,2]*8, col="cadetblue4", length=0.1) -text(traitcoord,traitnames, col="red") -# copied as first RDA graph into ppt - -env1 <- envfit(FD.pca1,splot.bioclim[index14,c(4:49)],permutations = 0) -env1 -#with permutations = 999: -#Error: cannot allocate vector of size 4.1 Gb -plot(env1) -png(filename="PCA1.png", width=1000, height=1000, units = "px", bg="white") -ordiplot(pca1, type="n") -text(traitcoord,traitnames) -plot(env1) -dev.off() # creates a file - -### Stepwise RDA ### -### RDA ### -FD.rda1 <- rda(FD~.,splot.bioclim[index14,c(4:49)],scale=T) -FD.rda1 -FD.rda2 <- rda(FD ~ 1,splot.bioclim[index14,c(4:49)],scale=T) -FD.rda3 <- ordistep(FD.rda2, scope=formula(FD.rda1), direction = "both", Pin = 0.1, - permutations = how(nperm = 10), trace = TRUE) -'Start: FD ~ 1 - -Df AIC F Pr(>F) -+ BIO_14 1 3191679 20602.8 0.09091 . -+ BIO_17 1 3191898 20379.5 0.09091 . -+ BIO_12 1 3197070 15125.2 0.09091 . -+ P_MAY 1 3198071 14110.8 0.09091 . -+ P_APR 1 3198194 13986.4 0.09091 . -+ BIO_18 1 3198767 13406.3 0.09091 . -+ P_MAR 1 3199448 12717.1 0.09091 . -+ P_FEB 1 3199451 12714.5 0.09091 . -+ P_JUN 1 3199643 12519.9 0.09091 . -+ BIO_05 1 3199804 12357.7 0.09091 . -+ BIO_02 1 3200062 12096.5 0.09091 . -+ P_NOV 1 3200602 11551.1 0.09091 . -+ P_DEC 1 3200823 11328.1 0.09091 . -+ P_JAN 1 3201335 10810.2 0.09091 . -+ BIO_10 1 3202194 9943.1 0.09091 . -+ T_JUL 1 3202226 9911.4 0.09091 . -+ T_AUG 1 3202685 9448.0 0.09091 . -+ GDD5 1 3202914 9217.7 0.09091 . -+ T_JUN 1 3202934 9196.7 0.09091 . -+ BIO_16 1 3203459 8668.3 0.09091 . -+ BIO_19 1 3203685 8440.1 0.09091 . -+ P_AUG 1 3204079 8043.8 0.09091 . -+ BIO_13 1 3204383 7737.1 0.09091 . -+ T_MAY 1 3204450 7669.7 0.09091 . -+ P_OCT 1 3204755 7362.4 0.09091 . -+ T_SEP 1 3204986 7130.0 0.09091 . -+ P_SEP 1 3205174 6941.4 0.09091 . -+ BIO_15 1 3205378 6735.8 0.09091 . -+ P_JUL 1 3205600 6512.4 0.09091 . -+ T_APR 1 3205746 6365.1 0.09091 . -+ BIO_01 1 3205841 6270.3 0.09091 . -+ BIO_03 1 3205882 6228.8 0.09091 . -+ T_OCT 1 3206048 6062.0 0.09091 . -+ AR 1 3206562 5545.3 0.09091 . -+ BIO_07 1 3207063 5042.2 0.09091 . -+ T_NOV 1 3207547 4555.5 0.09091 . -+ T_MAR 1 3207659 4443.2 0.09091 . -+ T_FEB 1 3208177 3923.3 0.09091 . -+ T_DEC 1 3208260 3840.3 0.09091 . -+ BIO_11 1 3208334 3765.7 0.09091 . -+ T_JAN 1 3208465 3634.3 0.09091 . -+ BIO_08 1 3208844 3254.4 0.09091 . -+ BIO_06 1 3209374 2723.0 0.09091 . -+ BIO_09 1 3209543 2553.3 0.09091 . -+ PET 1 3209642 2454.5 0.09091 . -+ BIO_04 1 3210074 2021.3 0.09091 . ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Step: FD ~ BIO_14 - -Df AIC F Pr(>F) -- BIO_14 1 3212091 20603 0.09091 . ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Df AIC F Pr(>F) -+ BIO_02 1 3184224 7481.80 0.09091 . -+ BIO_03 1 3184435 7269.37 0.09091 . -+ GDD5 1 3187255 4435.29 0.09091 . -+ BIO_05 1 3187772 3915.70 0.09091 . -+ T_JAN 1 3188026 3661.00 0.09091 . -+ BIO_01 1 3188040 3647.18 0.09091 . -+ T_FEB 1 3188048 3638.72 0.09091 . -+ T_MAR 1 3188075 3612.29 0.09091 . -+ T_APR 1 3188082 3605.14 0.09091 . -+ BIO_11 1 3188088 3598.96 0.09091 . -+ T_DEC 1 3188123 3563.70 0.09091 . -+ T_NOV 1 3188208 3478.25 0.09091 . -+ T_OCT 1 3188225 3461.84 0.09091 . -+ T_MAY 1 3188357 3329.42 0.09091 . -+ BIO_06 1 3188491 3194.91 0.09091 . -+ BIO_10 1 3188609 3076.07 0.09091 . -+ T_SEP 1 3188617 3068.49 0.09091 . -+ BIO_13 1 3188664 3021.74 0.09091 . -+ T_JUN 1 3188669 3016.26 0.09091 . -+ BIO_16 1 3188709 2976.11 0.09091 . -+ P_SEP 1 3188724 2961.09 0.09091 . -+ BIO_07 1 3188728 2956.84 0.09091 . -+ BIO_12 1 3188782 2902.48 0.09091 . -+ T_AUG 1 3188788 2897.30 0.09091 . -+ T_JUL 1 3188879 2805.50 0.09091 . -+ P_AUG 1 3189181 2503.15 0.09091 . -+ BIO_18 1 3189256 2427.84 0.09091 . -+ BIO_04 1 3189277 2406.93 0.09091 . -+ P_JUL 1 3189398 2285.76 0.09091 . -+ BIO_15 1 3189605 2078.03 0.09091 . -+ P_APR 1 3189650 2032.61 0.09091 . -+ P_JUN 1 3189703 1979.86 0.09091 . -+ BIO_09 1 3189912 1770.71 0.09091 . -+ P_MAR 1 3189965 1717.19 0.09091 . -+ PET 1 3189984 1698.34 0.09091 . -+ AR 1 3190003 1678.99 0.09091 . -+ P_MAY 1 3190005 1677.55 0.09091 . -+ P_OCT 1 3190063 1619.65 0.09091 . -+ P_FEB 1 3190490 1192.28 0.09091 . -+ BIO_17 1 3190497 1184.39 0.09091 . -+ BIO_19 1 3190555 1126.59 0.09091 . -+ P_NOV 1 3190570 1111.68 0.09091 . -+ BIO_08 1 3190582 1100.05 0.09091 . -+ P_JAN 1 3190893 787.98 0.09091 . -+ P_DEC 1 3190955 726.52 0.09091 . ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 - -Step: FD ~ BIO_14 + BIO_02 - -Df AIC F Pr(>F) -- BIO_02 1 3191679 7481.8 0.09091 . -- BIO_14 1 3200062 15953.2 0.09091 . ---- -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1' - -FD.rda4 <- rda(FD ~ BIO_14,splot.bioclim[index14,c(4:49)],scale=T) -FD.rda4 -' Inertia Proportion Rank -Total 18.0000 1.0000 -Constrained 0.3276 0.0182 1 -Unconstrained 17.6724 0.9818 18 -Inertia is correlations - -Eigenvalues for constrained axes: -RDA1 -0.3276 - -Eigenvalues for unconstrained axes: -PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 -8.307 1.850 1.378 0.884 0.789 0.780 0.578 0.551 -' -traitnames <- dimnames(summary(FD.rda4)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(FD.rda4)$species[,c(1,2)] -bioclimcoord <- summary(FD.rda4)$biplot[,c(1,2)] -plotcoord <- summary(FD.rda4)$sites[,c(1,2)] -str(plotcoord) #num [1:1111307, 1:2] -x.cut <- cut(plotcoord[,1], breaks=seq(min(plotcoord[,1]), max(plotcoord[,1]), by=0.01)) -y.cut <- cut(plotcoord[,2], breaks=seq(min(plotcoord[,2]), max(plotcoord[,2]), by=0.01)) -z.cut <- table(x.cut,y.cut) -head(z.cut) -dim(z.cut) #131 50 -z.cut <- melt(z.cut) -str(z.cut) # 6550 obs. of 3 variables: -head(z.cut) -z.cut$xy <- paste(z.cut$x.cut,z.cut$y.cut,sep="_") -str(x.cut) -length(x.cut) # 1111307 -xy <- paste(x.cut,y.cut,sep="_") -index30 <- match(xy,z.cut$xy) -length(index30) -any(is.na(index30)) -head(log10(z.cut$value[index30])) -values.present <- vector(mode="numeric", length=length(xy)) -min(log10(z.cut$value[index30]), na.rm=T) #0 -max(log10(z.cut$value[index30]), na.rm=T) # 3.399154 -values.cut <- cut(log10(z.cut$value[index30]), breaks=seq(min(log10(z.cut$value[index30]), na.rm=T), - 4, by=0.4)) - -ordiplot(FD.rda4, type="n", xlim=c(-10,10),ylim=c(-10,12)) -points(plotcoord*15, cex=0.05, col=rev(greyPalette(n=10, start = 0, end = 0.8, - gamma = 2.2, alpha = NULL))[values.cut]) -arrows(rep(0,1),rep(0,1),bioclimcoord[1]*8,bioclimcoord[2]*8, col="blue", length=0.1) -text(bioclimcoord[1]*8,bioclimcoord[2]*8+0.5,"BIO_14", col="blue", cex=1) -text(traitcoord,traitnames, col="red") -# copied as third RDA graph into ppt - -FD.rda5 <- rda(FD ~ BIO_14+BIO_02,splot.bioclim[index14,c(4:49)],scale=T) -FD.rda5 -' -Inertia Proportion Rank -Total 18.00000 1.00000 -Constrained 0.44582 0.02477 2 -Unconstrained 17.55418 0.97523 18 -Inertia is correlations - -Eigenvalues for constrained axes: -RDA1 RDA2 -0.3641 0.0817 - -Eigenvalues for unconstrained axes: -PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 -8.267 1.816 1.377 0.880 0.788 0.780 0.568 0.530 ' -traitnames <- dimnames(summary(FD.rda5)$species)[[1]] -traitnames <- substr(traitnames,1,nchar(traitnames)-5) -traitcoord <- summary(FD.rda5)$species[,c(1,2)] -bioclimcoord <- summary(FD.rda5)$biplot[,c(1,2)] - -plotcoord <- summary(FD.rda5)$sites[,c(1,2)] -str(plotcoord) #num [1:1111307, 1:2] -x.cut <- cut(plotcoord[,1], breaks=seq(min(plotcoord[,1]), max(plotcoord[,1]), by=0.01)) -y.cut <- cut(plotcoord[,2], breaks=seq(min(plotcoord[,2]), max(plotcoord[,2]), by=0.01)) -z.cut <- table(x.cut,y.cut) -head(z.cut) -dim(z.cut) #131 50 -z.cut <- melt(z.cut) -str(z.cut) # 6550 obs. of 3 variables: -head(z.cut) -z.cut$xy <- paste(z.cut$x.cut,z.cut$y.cut,sep="_") -str(x.cut) -length(x.cut) # 1111307 -xy <- paste(x.cut,y.cut,sep="_") -index30 <- match(xy,z.cut$xy) -length(index30) -any(is.na(index30)) -head(log10(z.cut$value[index30])) -values.present <- vector(mode="numeric", length=length(xy)) -min(log10(z.cut$value[index30]), na.rm=T) #0 -max(log10(z.cut$value[index30]), na.rm=T) # 3.399154 -values.cut <- cut(log10(z.cut$value[index30]), breaks=seq(min(log10(z.cut$value[index30]), na.rm=T), - 4, by=0.4)) - -ordiplot(FD.rda5, type="n", xlim=c(-10,10),ylim=c(-10,12)) -points(plotcoord*15, cex=0.05, col=rev(greyPalette(n=10, start = 0, end = 0.8, - gamma = 2.2, alpha = NULL))[values.cut]) -arrows(rep(0,2),rep(0,2),bioclimcoord[,1]*4,bioclimcoord[,2]*4, col="blue", length=0.1) -text(bioclimcoord*4,dimnames(bioclimcoord)[[1]], col="blue", cex=1) -text(traitcoord,traitnames, col="red") -# copied as fourth RDA graph into ppt - -plot(FD[,"Seed.length.mean"]~splot.bioclim$BIO_14[index14], - cex=0.05, xlab="BIO_14", ylab="FD ln(seed length)",cex.lab=1.5, cex.axis=1.5) -model1 <- lm(FD[,"Seed.length.mean"]~splot.bioclim$BIO_14[index14]) -summary(model1) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) 2.584e-01 3.193e-04 809.1 <2e-16 *** -splot.bioclim$BIO_14[index14] 1.407e-04 6.813e-07 206.5 <2e-16 *** -Multiple R-squared: 0.03697, Adjusted R-squared: 0.03697 -' -abline(model1, lwd=3, col="blue") -# - -plot(FD[,"Seed.num.rep.unit.mean"]~splot.bioclim$BIO_02[index14], - cex=0.05, xlab="BIO_02", ylab="FD ln(Seed number of reproductive unit)",cex.lab=1.5, cex.axis=1.5) -model1 <- lm(FD[,"Seed.num.rep.unit.mean"]~splot.bioclim$BIO_02[index14]) -summary(model1) -' Estimate Std. Error t value Pr(>|t|) -(Intercept) 1.251e+00 1.799e-03 695.3 <2e-16 *** -splot.bioclim$BIO_02[index14] -3.751e-03 1.927e-05 -194.6 <2e-16 *** -Multiple R-squared: 0.03296, Adjusted R-squared: 0.03296 ' -abline(model1, lwd=3, col="blue") - - - - - - - - - - - - -# mpd presence-absence -system.time( - mpd.sla.no.abu <- DT[,list(mpd.sla = mntd.fun.dt(Cover.., SLA.dist.mat, StandSpeciesName, abundance.weighted=FALSE)),by=PlotObservationID] -) - - -########### -levels(splot.header2$COUNTRY_CO) -levels(splot.header$Country) -CWM2$Country <- splot.header$Country[index12] -data(countryExData) -str(countryExData) -sPDF <- joinCountryData2Map(splot.header, joinCode = "NAME",nameJoinColumn = "Country") -?mapCountryData -#mapCountryData(sPDF, nameColumnToPlot="BIODIVERSITY" ) - -#### Climatic space, from Jonathon Lenoir #### -library(fBasics) -# Color palette - -# Import bio1 (MAT) of the world -bio <- read.table(paste("/home/helge/sPlot/Bioclim/", "BIO.txt", sep = ""),sep=";", header=T) -str(bio) #9033453 obs. of 22 variables -r <- raster(nrows=33, ncols=33, xmn=min(bio$BIO_01), xmx=max(bio$BIO_01), ymn=min(bio$BIO_12), ymx=max(bio$BIO_12)) -mattar <- data.frame(bio$BIO_01,bio$BIO_12) -str(mattar) -names(mattar) <- c("bio1","bio12") -mattar_r <- rasterize(mattar, r, fun="count") -str(mattar_r) -plot(log10(mattar_r), asp=0, col=rev(divPalette(n=100, name=c("RdYlBu"))), - main="N 2.5 arc-minutes cells per bin (log10 scale)", cex.main=0.7, - xlab="MAT (°C*10)", ylab="TAR (mm)") -# Bio1_Bio12_world.png - -#plot(mattar_r/max(getValues(mattar_r), na.rm=TRUE), asp=0, col=rev(divPalette(n=100, name=c("RdYlBu"))), main="Relative proportion of 10 arc-minutes cells per bin", xlab="MAR (°C*10)", ylab="TAR (mm)") -# Plot the sampling effort of sPlot across the MAT-TAR climatic space -str(splot.bioclim) -# Make it a spatial data frame -CRSlonlat <- CRS("+proj=longlat +datum=WGS84") -splot.bioclim.coords <- cbind(splot.bioclim$X, splot.bioclim$Y) -splot.bioclim.coords <- SpatialPoints(splot.bioclim.coords, proj4string=CRSlonlat) -splot.bioclim2 <- data.frame(splot.bioclim$BIO_01,splot.bioclim$BIO_12) -names(splot.bioclim2) <- c("bio1","bio12") -#splot.bioclim2 <- SpatialPointsDataFrame(splot.bioclim.coords, splot.bioclim2, proj4string=CRSlonlat) -#str(splot.bioclim2) -#sPlot_mattar <- extract(bio1, coordinates(sPlot)) -#sPlot_mattar <- as.data.frame(sPlot_mattar) -#names(sPlot_mattar) <- c("bio1") -#sPlot_mattar$bio12 <- extract(bio12, coordinates(sPlot)) -sPlot_mattar_r <- rasterize(splot.bioclim2, r, fun="count") -str(sPlot_mattar_r) -plot(mattar_r, asp=0, col="grey", legend=FALSE, main="N vegetation plots per bin (log10 scale)", - xlab="MAT (°C)", ylab="TAR (mm)") -# Bio1_Bio12_world_grey.png -plot(log10(sPlot_mattar_r), asp=0, col=rev(divPalette(n=100, name=c("RdYlBu"))), - add=TRUE) -# Bio1_Bio12_sPlot_SLA.png - -# Build the PC1-PC2 climatic space -load("/home/helge/sPlot/Bioclim/pca_data.RData") -str(pca.data) -r <- raster(nrows=33, ncols=33, xmn=min(pca.data$PC1), xmx=max(pca.data$PC1), ymn=min(pca.data$PC2), ymx=max(pca.data$PC2)) -pca_r <- rasterize(pca.data[, c("PC1", "PC2")], r, fun="count") -plot(log10(pca_r), asp=0, col=rev(divPalette(n=100, name=c("RdYlBu"))), - main="N 2.5 arc-minutes cells per bin (log10 scale)", - xlab="PC1 (cold-to-warm)", ylab="PC2 (dry-to-wet)") -plot(pca_r/max(getValues(pca_r), na.rm=TRUE), asp=0, - col=rev(divPalette(n=100, name=c("RdYlBu"))), - main="Relative proportion of 2.5 arc-minutes cells per bin", - xlab="PC1 (cold-to-warm)", ylab="PC2 (dry-to-wet)") -# Plot the sampling effort of sPlot across the PC1-PC2 climatic space -index13 <- match(splot.bioclim$RAST_ID,pca.data$RAST_ID) -sPlot_pca <- pca.data[index13, c("PC1", "PC2")] -sPlot_pca_r <- rasterize(sPlot_pca, r, fun="count") -plot(pca_r, asp=0, col="grey", legend=FALSE, - main="N vegetation plots per bin (log10 scale)", - xlab="PC1 (cold-to-warm)", ylab="PC2 (dry-to-wet)") -plot(log10(sPlot_pca_r), asp=0, col=rev(divPalette(n=100, name=c("RdYlBu"))), - add=TRUE) - -#### For Marten Winter #### -# species x country Matrix -species.country <- table(DT$species,splot.header$Country[index30]) -str(species.country) # int [1:60908, 1:130] -names(dimnames(species.country)) -names(dimnames(species.country)) <- c("species","country") - -library(reshape2) -?melt.table -species.country2 <- melt(species.country) -str(species.country2) # 188470 obs. of 3 variables: -names(species.country2) -names(species.country2)[3] <- "p_a" -table(species.country2$p_a) - -species.country2$p_a[species.country2$p_a>0] <- 1 -species.country2 <- species.country2[species.country2$p_a==1,] -str(species.country2) # 188470 obs. of 3 variables: -species.country2 <- species.country2[,-3] -str(species.country2) # 188470 -write.csv(species.country2,file = - paste("/home/oliver/shared/", "species.country2.csv", sep = ""), row.names = FALSE) -levels(species.country2$country) # 130 -length(species.country2$country[species.country2$country=="Algeria"]) -# 97 -sum(species.country[,2]) -# 799, this is the amount of records for DZA = Algeria -sum(species.country[,126]) -# 1467200, sum of records for United States - -TaxaNat <- read.csv(paste("/home/oliver/shared/Glonaf/", "TaxaNat.csv", sep = "")) -str(TaxaNat) #178779 obs. of 2 - -GlonafRegion <- read.csv(paste("/home/oliver/shared/Glonaf/", "GlonafRegion.csv", sep = "")) -str(GlonafRegion) #843 obs. of 10 -trim.trailing <- function (x) sub("\\s+$", "", x) -# returns string w/o leading or trailing whitespace -GlonafRegion$Country_sPlot <- as.factor(trim.trailing(as.character(GlonafRegion$Country_sPlot))) -index14 <- match(levels(species.country2$country),levels(GlonafRegion$Country_sPlot)) -index14 -levels(GlonafRegion$Country) - -data.frame(levels(species.country2$country),levels(GlonafRegion$Country_sPlot)[index14]) -## all correct - -index15 <- match(levels(GlonafRegion$Country_sPlot),GlonafRegion$Country_sPlot) -index15 -index16 <- match(species.country2$country,levels(species.country2$country)) -any(is.na(index16)) # F -length(levels(species.country2$species)) #60908 -'species.country2$species.country <- paste(species.country2$species, -levels(species.country2$country)[index16],sep="_") -species.country2$species.country <- paste(species.country2$species, -levels(GlonafRegion$Country_sPlot)[index14][index16],sep="_") -species.country2$species.country <- paste(species.country2$species, -GlonafRegion$Country_sPlot[index15][index14][index16],sep="_") -' -species.country2$species.country <- paste(species.country2$species, - GlonafRegion$ISO.country[index15][index14][index16],sep="_") -str(species.country2) # 188470 obs. of 3 variables: -head(species.country2) -species.country2[c(160000:160100),] -## fits! - -index17 <- match(TaxaNat$Region,GlonafRegion$ID.region) -any(is.na(index17)) # F - -TaxaNat$species.country <-paste(TaxaNat$Taxon2,GlonafRegion$ISO.country[index17], sep="_") - -index18 <- match(species.country2$species.country,TaxaNat$species.country) -length(index18) #188470 -length(index18[!is.na(index18)]) # 9283 out of 188470 species x country occurrences -# are alien occurrences -9283/188470*100 # 4.925452 % species x country occurrences -species.country2$alien <- F -species.country2$alien[!is.na(index18)] <- T -species.country2$ISO.country <- GlonafRegion$ISO.country[index15][index14][index16] -str(species.country2) -head(species.country2) -length(species.country2$ISO.country[species.country2$ISO.country=="DZA"]) -# 12939, this cannot be -#species.country2$ISO.country[species.country2$ISO.country=="DZA"] -sum(species.country[,2]) -# 799, this is the amount of records for DZA = Algeria -length(species.country2$ISO.country[species.country2$ISO.country=="DZA" - & !is.na(species.country2$ISO.country)]) -# 97! - -#table(species.country2$ISO.country) -#species.country3 <- acast(species.country2, species~ISO.country, length) -length(species.country2$alien[species.country2$alien]) -# 9283 alien records in sPlot -length(species.country2$alien[species.country2$alien & species.country2$ISO.country=="DZA"]) -# 3 alien records in DZA = Algeria -length(species.country[species.country[,2]>0,2]) -# 97, however there are only 97 records in total -length(species.country2$alien[species.country2$alien & species.country2$ISO.country=="USA"]) -# 1911 alien species in USA -length(species.country[species.country[,126]>0,2]) -# 9933 species in total in USA -alien.richness <- as.matrix(table(species.country2$ISO.country,species.country2$alien))[,2] - -species.country3 <- species.country -species.country3[species.country3>0] <- 1 -country.richness <- colSums(species.country3) -country.richness -names(country.richness) -data.frame(names(country.richness),GlonafRegion$ISO.country[index15][index14]) -country.richness2 <- data.frame(GlonafRegion$ISO.country[index15][index14],as.numeric(country.richness)) -names(country.richness2) <- c("ISO.country","richness") -country.richness2$ISO.country -country.richness2 - -index19 <- match(country.richness2$ISO.country,names(alien.richness)) -index19 -alien.richness -country.richness2$alien.richness <- alien.richness[index19] -country.richness2 -country.richness2$alien.prop <- country.richness2$alien.richness/country.richness2$richness -country.richness2$alien.prop - -sPDF <- joinCountryData2Map(country.richness2,joinCode = "ISO3", - nameJoinColumn = "ISO.country") -'112 codes from your data successfully matched countries in the map -18 codes from your data failed to match with a country code in the map -132 codes from the map werent represented in your data -' -mapParams <- mapCountryData(sPDF, nameColumnToPlot="richness",addLegend=FALSE) -do.call(addMapLegend, c(mapParams, legendWidth=0.5, legendMar = 2,legendLabels="all")) -mapParams <- mapCountryData(sPDF, nameColumnToPlot="richness", - catMethod=seq(0,10000,by=1000),addLegend=FALSE) -do.call(addMapLegend, c(mapParams, legendWidth=0.5, legendMar = 2,legendLabels="all")) - -mapParams <- mapCountryData(sPDF, nameColumnToPlot="alien.richness", - catMethod=seq(0,2000,by=200),addLegend=FALSE) -do.call(addMapLegend, c(mapParams, legendWidth=0.5, legendMar = 2,legendLabels="all")) - -max(country.richness2$alien.prop, na.rm=T) #0.2823779 -mapParams <- mapCountryData(sPDF, nameColumnToPlot="alien.prop",addLegend=FALSE) -mapParams <- mapCountryData(sPDF, nameColumnToPlot="alien.prop", - catMethod=seq(0,0.3,by=0.02),addLegend=FALSE) -do.call(addMapLegend, c(mapParams, legendWidth=0.5, legendMar = 2,legendLabels="all")) - - - - -##################### OLD ################### -library(spdep) -library(maptools) -library(hexbin) -library(RColorBrewer) -# Use a lighter version of sPlot focusing on mean annual temperature MAT (BIO1) -# and total annual rainfall TAR (BIO12) -sPlot <- splot.header[, c("LONGITUDE", "LATITUDE", "BIO_1", "BIO_12")] -sPlot$LONGITUDE <- as.numeric(as.character(sPlot$LONGITUDE)) -sPlot$LATITUDE <- as.numeric(as.character(sPlot$LATITUDE)) -sPlot$BIO_1 <- as.numeric(sPlot$BIO_1)/10 -sPlot$BIO_12 <- as.numeric(sPlot$BIO_12) -str(sPlot) -# Make it a spatial data frame -CRSlonlat <- CRS("+proj=longlat +datum=WGS84") -coords <- cbind(sPlot$LONGITUDE, sPlot$LATITUDE) -coords <- SpatialPoints(coords, proj4string=CRSlonlat) -sPlot <- SpatialPointsDataFrame(coords, sPlot, proj4string=CRSlonlat) -str(sPlot) -# Plot the data on the world map to check the coordinates and projection -data(wrld_simpl) -plot(wrld_simpl) -points(coordinates(sPlot), cex=0.1, col="red", pch=16) -# Set a color ramp -rf <- colorRampPalette(rev(brewer.pal(11, 'Spectral'))) -# Plot the plot distribution within the MAT-TAR bidimentionnal climatic space -hexbinplot(BIO_12~BIO_1, data=sPlot@data, colramp=rf, trans=log, inv=exp, - border="white", xlab="MAT", ylab="TAR", xbins=30) -# Display only bins with a minimum of 10 plots and a maximum of 1000 plots -hexbinplot(BIO_12~BIO_1, data=sPlot@data, colramp=rf, trans=log, inv=exp, - border="white", xlab="MAT", ylab="TAR", xbins=30, mincnt=10, maxcnt=1000) -# - - - - - - - - -################ OLD ################### - -### -load("C:\\Daten\\iDiv\\sPlot\\pca_data.Rdata") -str(pca.data) -any(is.na(pca.data$PC1)) #F - -load("C:\\Daten\\iDiv\\sPlot\\sPlot_header_pca.RData") -str(splot.header2) -any(is.na(pca.data$PC1)) #F - -library(raster) -r <- - splot_pca_r <- rasterize(splot_pca, r, run="count") -plot(splot_pca_r, asp=0, col=rev(divPalette(n=100, name="RdY1Bu")))) -plot(splot_r, asp=0, col=rev(divPalette(n=100, name="RdY1Bu")))) - -index <- which(getValues(splot_pca_r)>0) -which(getValues(pca_r)>0) -poinra -getValues(splot_pca_r)[index] # 136 values -?sample -splo_pca$binid <- cellFromXY(pca_r, splot_pca) - - -########################### -load("C:\\Daten\\iDiv\\sPlot\\splot_pca2.Rdata") -str(splot_pca) -splot_pca <- data.table(splot_pca) -setkey(splot_pca,binid) -inter <- splot_pca[,list(count=length(PCA1)), by=binid] -splot_pca2 <- splot_pca[,list(PCA1, PCA2,count=length(PCA1)), by=binid] - -str(splot_pca2) -hist(splot_pca2$binid) -inter2 <- splot_pca2[count>100,list(count=sum(PCA1)), by=binid] -str(inter2) -[,list(total.cover=sum(Cover..)), by=PlotObservationID] -<- DT[,list(total.cover=sum(Cover..)), by=PlotObservationID] - -sample(splot_pca$PCA1,100) -splot_pca2 <- splot_pca[table(splot_pca$binid)>100,sample(PCA1,100),by=binid] -str(splot_pca2) - -resample <- function(PCA1_,PCA2_,binid_){ - if (length(PCA1)>100) { - - } - else { - 1 - } - ]index10 <- match(species,labels(d)) - d3 <- as.dist(dist[index10,index10]) - if (sum(d3)==0){ - NA - } - divc(as.data.frame(rel.cover),d3)$diversity -} -splot_pca2 <- splot_pca[length(PCA1)<=100,res_ID := 1] -head(splot_pca2,100) -table(splot_pca2$binid,splot_pca2$count, exclude=NULL) -table(splot_pca$binid) -splot_pca2 <- splot_pca[,res_ID := 0] -splot_pca2 <- splot_pca[table(splot_pca2$binid)<=100,res_ID := 1] -splot.selection <- splot_pca[,list(res = resample(PCA1,PCA2,binid)),by=binid] -#length(splot_pca[binid>100]) -hist(splot_pca$binid) -splot.selection <- splot_pca[,list(length(binid)),by=binid] -splot.selection <- splot_pca[,list(count=length(PCA1)),by=binid] -splot.selection <- splot_pca[,,by=binid] -hist(splot.selection$count) -str(splot.selection) -str(splot_pca2) -splot.selection <- splot_pca[,list(nrow()),by=binid] -splot.selection <- splot_pca[,count:=length(binid),by=binid] -length(splot_pca,by=binid) -######################################################################################## - -### CWM ### -#CWM1 <- DT[!is.na(plot.species.trait.value),list(CWM = weighted.mean(plot.species.trait.value,Relative.cover)),by=PlotObservationID] -CWM1 <- DT[,list(CWM = weighted.mean(plot.species.trait.value,Relative.cover)),by=PlotObservationID] -# see http://stackoverflow.com/questions/3367190/aggregate-and-weighted-mean-in-r -CWM1[1:100,] -hist(CWM1$CWM) -write.csv((x, file = paste(path.sPlot, "CWM_SLA_all.csv", sep = ""), row.names = FALSE)) - -### FD ### -library(ade4) # f?r divc (Rao's Q) -# this does not work: ~50 GB RAM required for 40k x 40k species matrix: -'ktab1 <- ktab.list.df(list(as.data.frame(species.trait.value[!is.na(species.trait.value)]))) -d <- dist.ktab(ktab1, type=c("Q"), option = "scaledBYrange") -#labels(d) -#str(d) -#attr(d,"Labels") -attr(d,"Labels") <- dimnames(species.trait.value)[[1]][!is.na(species.trait.value)] -labels(d) -any(is.na(d)) # F -dist <- as.matrix(d) - -#tree.trait.weighted <- t(t(veg.KHG3.prop) * all.traits.KHG[,j]) -#dist.sqrt <- sqrt(dist) -d.sqrt <- sqrt(d) -labels(d.sqrt) -dist <- as.matrix(d.sqrt) -' -'Rao <- function(rel.cover,species){ -index10 <- match(species,labels(d)) -d3 <- as.dist(dist[index10,index10]) -if (sum(d3)==0){ -NA -} -divc(as.data.frame(rel.cover),d3)$diversity -} -FD.all <- DT[!is.na(plot.species.trait.value),list(Rao.Q = Rao(Relative.cover,Matched.concept)),by=PlotObservationID] -' -#species.trait.value.scaled <- species.trait.value/(max(species.trait.value)-min(species.trait.value)) -species.trait.value.scaled <- TRY.mean.sd.splot$SLA.mean/(max(TRY.mean.sd.splot$SLA.mean)-min(TRY.mean.sd.splot$SLA.mean)) - -# scale by range, which saves time for distance calculations - -library(reshape2) - -package.size = 1000 -#number.plots.total <- length(levels(DT[!is.na(plot.species.trait.value)]$PlotObservationID)) # 705272 -number.plots.total <- length(levels(DT$PlotObservationID)) # 701611 vs. 705272 -FD.all <- array(0,number.plots.total, dimnames=list(levels(DT$PlotObservationID))) -number.packages <-ceiling(number.plots.total/package.size) #702 -pb <- winProgressBar(title = "progress bar", min = 0, max =number.packages, width = 300) -for (k in 1:number.packages) { - setWinProgressBar(pb, k, title=paste("Row ",k,"of ", number.packages, " is processed")) - ifelse (k==number.packages, package<-number.plots.total%%package.size, package <- package.size) - #index3 <- match(DT[!is.na(plot.species.trait.value)]$PlotObservationID,levels(DT[!is.na(plot.species.trait.value)]$PlotObservationID)[seq((k-1)*package.size+1,k*package.size,1)]) - index3 <- match(DT$PlotObservationID,levels(DT$PlotObservationID)[seq((k-1)*package.size+1,k*package.size,1)]) - #DT2 <- DT[!is.na(plot.species.trait.value) & !is.na(index3)] - #DT2 <- DT2[!is.na(plot.species.trait.value)] - #length(index3[!is.na(index3)]) - DT2 <- DT[!is.na(index3)] - #str(DT2) - #veg.matrix1 <- acast(DT2, Matched.concept ~ PlotObservationID, value.var="Relative.cover", fill=0) - veg.matrix1 <- acast(DT2, names.stand ~ PlotObservationID, value.var="Relative.cover", fun.aggregate=sum, fill=0) - # fun.aggregate = sum -> sums up multiple entries per species! - # this can happen with the unified species nomenclature! - #length(unique(dimnames(veg.matrix1)[[2]]))# 1000 - #length(unique(DT2$PlotObservationID)) # 1000 - #veg.matrix1[veg.matrix1 > 0] <- 1 - #any(colSums(veg.matrix1)!=1) #F - index4 <- match(dimnames(veg.matrix1)[[1]],species.list) - species.trait.value.scaled2 <- species.trait.value.scaled[index4] - species.list2 <- species.list[index4] - ktab1 <- ktab.list.df(list(as.data.frame(species.trait.value.scaled2))) - d <- dist.ktab(ktab1, type=c("Q"), option = "noscale") - #labels(d) - #str(d) - #attr(d,"Labels") - attr(d,"Labels") <- species.list2 - #labels(d) - #any(is.na(d)) # F - #dist <- as.matrix(d) - #as.matrix(d)[1:8,1:8] - d <- sqrt(d) - #dist <- as.matrix(d) - #rm(d) - if (k<number.packages){ - FD.all[seq((k-1)*package.size+1,k*package.size,1)] <- - divc(as.data.frame(veg.matrix1),d)$diversity - #DT2[,list(Rao.Q = Rao(Relative.cover,Matched.concept)),by=PlotObservationID]$Rao.Q - any(colSums(veg.matrix1)==0) # F o.K. - any(colSums(veg.matrix1)!=1) # T ups.... - hist(colSums(veg.matrix1)) - any(rowSums(veg.matrix1)==0) # F o.K. - } else { - FD.all[seq((k-1)*package.size+1,number.plots.total,1)] <- - divc(as.data.frame(veg.matrix1),d)$diversity - #DT2[,list(Rao.Q = Rao(Relative.cover,Matched.concept)),by=PlotObservationID] - } -} -close(pb) -#FD.all -write.csv(FD.all, file = paste(path.sPlot, "FDall.csv", sep = ""), row.names = FALSE) -