diff --git a/01_Mesobromion.R b/01_Mesobromion.R index fe812adb2e89563f20cc5194612e11e1db0c6e0e..54ed6dc289abd0ad239fa31e708226269af355a0 100644 --- a/01_Mesobromion.R +++ b/01_Mesobromion.R @@ -11,7 +11,8 @@ source("99_HIDDEN_functions.R") traits0 <- read_delim("_data/Mesobromion/traits3.txt", delim =";", col_names = T, locale = locale(encoding = 'latin1')) %>% dplyr::select(- c("PR_STAT_Indigen", "PR_STAT_Neophyt", "PR_STAT_Archaeophyt", "URBAN_urbanophob", "URBAN_maessig_urbanophob", - "URBAN_urbanoneutral", "URBAN_maessig_urbanophil", "URBAN_urbanophil", "WUH_von", "WUH_bis", "ARL_c_I_von", "ARL_c_I_bis")) %>% + "URBAN_urbanoneutral", "URBAN_maessig_urbanophil", "URBAN_urbanophil", "WUH_von", "WUH_bis", "ARL_c_I_von", "ARL_c_I_bis", + "BL_ANAT_hydromorph")) %>% #empty trait mutate(species0=species) %>% rowwise() %>% # quick and dirty clean up names @@ -27,13 +28,17 @@ dim(traits0) #907 obs. of 75 variables: traits0 <- traits0 %>% dplyr::select_if(~mean(!is.na(.)) >= 0.88) # 907 x 67 + + + + ### Transform binary traits to 0-1 traits.asym.binary <- c('LEB_F_Makrophanerophyt','LEB_F_Nanophanerophyt', 'LEB_F_Hemikryptophyt','LEB_F_Geophyt','LEB_F_Hemiphanerophyt','LEB_F_Therophyt', 'LEB_F_Hydrophyt','LEB_F_Pseudophanerophyt','LEB_F_Chamaephyt', 'LEB_D_plurienn_pollakanth','LBE_D_plurienn_hapaxanth','LEB_D_annuell', - 'LEB_D_bienn','V_VER_absent','V_VER_Wurzelspross','V_VER_Ausläufer',' - V_VER_Rhizom','V_VER_Innovationsknopse.mit.Wurzelknolle', + 'LEB_D_bienn','V_VER_absent','V_VER_Wurzelspross','V_VER_Ausläufer', + 'V_VER_Rhizom','V_VER_Innovationsknopse.mit.Wurzelknolle', 'V_VER_Innovationsknospe.mit.Speicherwurzel','V_VER_Ausläuferknolle', 'V_VER_Brutsprösschen','V_VER_Fragmentation','V_VER_Turio','V_VER_Sprossknolle', 'V_VER_phyllogener_Spross','V_VER_Rhizompleiokorm','V_VER_Zwiebel', @@ -87,6 +92,8 @@ env <- env0 %>% filter(!is.na(LAT)) %>% filter(!(LAT==0 | LON==0)) +env.all <- env + ### 3. Import species data #### @@ -160,25 +167,73 @@ traits <- traits %>% traits <- traits %>% as.tbl() %>% - dplyr::select(-starts_with("BL_FORM"), -starts_with("REPR_T"), -starts_with("BLU_KL"), -starts_with("STRAT_T")) %>% + dplyr::select(-starts_with("BL_FORM"), -starts_with("REPR_T"), -starts_with("BLU_KL"), -starts_with("STRAT_T"), -starts_with("BL_AUSD")) %>% left_join(traits %>% - dplyr::select(species0, REPR_T_Samen_Sporen:STRAT_T_SR) %>% + dplyr::select(species0, `BL_AUSD_immergrün`:`BL_AUSD_überwinternd_grün`, REPR_T_Samen_Sporen:STRAT_T_SR) %>% gather(key=Trait, value="value", -species0) %>% separate(Trait, into = c("Trait", "Organ", "Level"), sep = "_", extra = "merge") %>% unite(Trait, Trait, Organ) %>% filter(value==1) %>% dplyr::select(-value) %>% spread(Trait, Level) %>% - mutate_at(.vars=vars(BLU_KL:STRAT_T), + mutate_at(.vars=vars(BL_AUSD:STRAT_T), .funs=~as.factor(.)), by="species0") +## recode traits to numeric +robust.mean <- function(x1,x2=NA,x3=NA,x4=NA){ + x <- c(x1,x2,x3,x4) + if(any(!is.na(x))){mean(x, na.rm=T)} else {NA} +} + +traits <- traits %>% + dplyr::select(-starts_with("BL_ANAT"), -starts_with("LEB_D"), -starts_with("ROS_T")) %>% + left_join(traits %>% + dplyr::select(species0, starts_with("BL_ANAT")) %>% + mutate(BL_ANAT_helomorph=ifelse(BL_ANAT_helomorph==1, 1, NA)) %>% + mutate(BL_ANAT_hygromorph=ifelse(BL_ANAT_hygromorph==1, 2, NA)) %>% + mutate(BL_ANAT_mesomorph=ifelse(BL_ANAT_mesomorph==1, 3, NA)) %>% + mutate(BL_ANAT_skleromorph=ifelse(BL_ANAT_skleromorph==1, 4, NA)) %>% + rowwise() %>% + mutate(BL_ANAT=robust.mean(BL_ANAT_helomorph, BL_ANAT_hygromorph, BL_ANAT_mesomorph, BL_ANAT_skleromorph)) %>% + ungroup() %>% + dplyr::select(species0, BL_ANAT, BL_ANAT_blattsukkulent), + by="species0") %>% + left_join(traits %>% + dplyr::select(species0, starts_with("LEB_D")) %>% + rowwise() %>% + mutate(LEB_D_plurienn=max(LEB_D_plurienn_pollakanth + LEB_D_plurienn_hapaxanth, na.rm=T)) %>% + ungroup() %>% + mutate(LEB_D_plurienn=ifelse(LEB_D_plurienn==1, 3, NA)) %>% + mutate(LEB_D_annuell=ifelse(LEB_D_annuell==1, 1, NA)) %>% + mutate(LEB_D_bienn =ifelse(LEB_D_bienn==1, 2, NA)) %>% + rowwise() %>% + mutate(LEB_D=robust.mean(LEB_D_annuell, LEB_D_bienn, LEB_D_plurienn)) %>% + ungroup() %>% + dplyr::select(species0, LEB_D), + by="species0") %>% + left_join(traits %>% + dplyr::select(species0, starts_with("ROS_T")) %>% + mutate(ROS_T=ROS_T_Ganzrosettenpflanzen) %>% + mutate(ROS_T=replace(ROS_T, + list=ROS_T_Halbrosettenpflanze==1, + values=0.5)) %>% + mutate(ROS_T=replace(ROS_T, + list=ROS_T_rosettenlose.Pflanzen==1, + values=0)) %>% + dplyr::select(species0, ROS_T), + by="species0") + +### ordered factors + dim(species) #558 783 -dim(traits) #783 81 +dim(traits) #783 53 dim(env) #558 8 + + ## Select only plots where >90% of species have trait info [TRY] # releve08trait <- species %>% # rownames_to_column("RELEVE_NR") %>% @@ -203,6 +258,15 @@ dim(env) #558 8 ##export for Valerio write_delim(species, path="_data/Mesobromion/species.out.10perc.txt", delim="\t") write_delim(traits, path="_data/Mesobromion/traits.out.10perc.txt", delim="\t") +write_delim(env, path="_data/Mesobromion/env.10perc.txt", delim="\t") + +## version without missing species + empty <- which(colSums(species)==0) + traits_nozero <- traits[-empty,] + species_nozero <- species[,-empty] + +write_delim(species_nozero , path="_data/Mesobromion/species.out.10perc_nozero.txt", delim="\t") +write_delim(traits_nozero, path="_data/Mesobromion/traits.out.10perc_nozero.txt", delim="\t") @@ -217,21 +281,47 @@ write_delim(traits, path="_data/Mesobromion/traits.out.10perc.txt", delim="\t") ## calculate corr between species composition matrix and traits species <- read_delim("_data/Mesobromion/species.out.10perc.txt", delim="\t") traits <- read_delim("_data/Mesobromion/traits.out.10perc.txt", delim="\t") +trait.labs <- read_delim("_data/Mesobromion/TraitLabels.csv", delim=",") %>% + rownames_to_column("Trait.comb") traits <- traits %>% + as.data.frame() %>% # filter(species0 %in% colnames(species)) %>% + mutate_if(~is.character(.), .funs=~as.factor(.)) %>% column_to_rownames("species0") - + +#rename trait based on short labels +colnames(traits) <- trait.labs$Short_english_name + + +##check traits +is.binary <- function(x){(all(na.omit(x) %in% 0:1))} +trait.recap <- traits %>% + mutate_if(.predicate = ~is.numeric(.), ~round(.,3)) %>% + summarize_all(.funs = list(xxxType.of.variable=~ifelse(is.binary(.), "binary", + ifelse(is.ordered(.), "ordered", + ifelse(is.numeric(.), "numeric", + ifelse(is.factor(.), "factor", NA)))), + xxxLevels=~( + ifelse(is.binary(.), + paste(names(table(.)), "=", table(.), collapse="; "), + ifelse(is.numeric(.), + paste(range(., na.rm=T), collapse=" - "), + ifelse(is.factor(.), + paste(levels(.), collapse=", "), + NA)))))) %>% + gather(key="Variable") %>% + separate(Variable, into = c("Variable", "feature"), sep="_xxx") %>% + spread(key=feature, value = value) %>% + rename(`Range/Levels`=Levels) %>% + mutate(Variable=factor(Variable, levels=colnames(traits))) %>% + arrange(Variable) + +## Shoudln't BL_ANAT better treated as ordered.factor? +write_csv(trait.recap, path="_derived/Mesobromion/Traits.recap.csv") #dplyr::select(LeafArea:Disp.unit.leng) #dplyr::select(PlantHeight, LeafC.perdrymass, LeafN, StemDens, Stem.cond.dens, Seed.num.rep.unit, SLA) -comm <- species -traits <- traits -trait.sel <- 6 -a <- get.corXY.bootstrap(comm=species, traits=traits, - trait.sel=6, bootstrap=10) - - @@ -240,44 +330,51 @@ a <- get.corXY.bootstrap(comm=species, traits=traits, #### ## Import output #### myfilelist <- list.files(path="_derived/Mesobromion/", pattern="HIDDEN_round_[0-9]+.RData", full.names = T) #dataFiles = purrr::map(myfilelist, function(x){get(load(x))}) -load("_derived/Mesobromion/HIDDEN_round_7.RData") - - -corXY = bind_rows(dataFiles) %>% - as.tbl() -rm( dataFiles) - -trait.labs <- data.frame(Trait.comb=1:ncol(traits), - trait.name=colnames(traits))#[-which(colnames(traits) %in% c("species", "species0"))]) - -## calculate confidence intervals for bootstrapped correlations -corXY.ci <- corXY %>% - filter(bootstr.n==0) %>% - dplyr::select(-bootstr.n) %>% - group_by(Trait.comb) %>% - slice(1) %>% - left_join(corXY %>% - filter(bootstr.n!=0) %>% - group_by(Trait.comb) %>% - summarize(q025=quantile(Coef.obs, 0.025), - q975=quantile(Coef.obs, 0.975), - greater.than.perm=mean(Coef.obs>Coef.perm), - n=n())) %>% - #calculate significance using permuted correlations - mutate(sign_plus=greater.than.perm>0.995) %>% - mutate(sign_minus=greater.than.perm<0.005) %>% - rowwise() %>% - mutate(ntraits= length(unlist(strsplit(Trait.comb, "_")))) %>% - ungroup() %>% - mutate_at(.vars=vars(starts_with("sign")), - .funs=~factor(.*1, levels=c(0,1), labels=c("FALSE", "TRUE"))) +load("_derived/Mesobromion/HIDDEN_round_11.RData") + + + + +#corXY = bind_rows(dataFiles) %>% +# as.tbl() +#rm( dataFiles) + +#trait.labs <- data.frame(Trait.comb=1:ncol(traits), +# trait.name=colnames(traits)) %>% #[-which(colnames(traits) %in% c("species", "species0"))]) +# # shorten some labels +# mutate(trait.name = fct_recode(trait.name, +# V_VER_Wurzelknolle = "V_VER_Innovationsknopse.mit.Wurzelknolle", +# V_VER_Speicherwurzel = "V_VER_Innovationsknospe.mit.Speicherwurzel")) +# + +# ## calculate confidence intervals for bootstrapped correlations +# corXY.ci <- corXY %>% +# filter(bootstr.n==0) %>% +# dplyr::select(-bootstr.n) %>% +# group_by(Trait.comb) %>% +# slice(1) %>% +# left_join(corXY %>% +# filter(bootstr.n!=0) %>% +# group_by(Trait.comb) %>% +# summarize(q025=quantile(Coef.obs, 0.025), +# q975=quantile(Coef.obs, 0.975), +# greater.than.perm=mean(Coef.obs>Coef.perm), +# n=n())) %>% +# #calculate significance using permuted correlations +# mutate(sign_plus=greater.than.perm>0.995) %>% +# mutate(sign_minus=greater.than.perm<0.005) %>% +# rowwise() %>% +# mutate(ntraits= length(unlist(strsplit(Trait.comb, "_")))) %>% +# ungroup() %>% +# mutate_at(.vars=vars(starts_with("sign")), +# .funs=~factor(.*1, levels=c(0,1), labels=c("FALSE", "TRUE"))) corXY.ci <- corXY.ci %>% mutate(Trait.comb2=Trait.comb) %>% #split strings of trait combinations and add labels - separate(Trait.comb2, into=paste0("trait", 1:22)) %>% - mutate_at(.vars=vars(trait1:trait22), - .funs=~factor(., levels=trait.labs$Trait.comb, labels=trait.labs$trait.name)) %>% + separate(Trait.comb2, into=paste0("trait", 1:11)) %>% + mutate_at(.vars=vars(trait1:trait11), + .funs=~factor(., levels=trait.labs$Trait.comb, labels=trait.labs$Short_english_name)) %>% arrange(ntraits, Coef.obs) %>% dplyr::select(Trait.comb, Test, n, ntraits, everything()) @@ -302,24 +399,24 @@ mydata.byone <- mydata %>% mutate(seq=1:n()) -top.first <- ggplot(data=mydata.byone) + +(top.first <- ggplot(data=mydata.byone %>% + mutate(sign_plus=fct_rev(as.factor(sign_plus)))) + geom_segment(aes(x=q025, xend=q975, y=seq, yend=seq, col=sign_plus)) + geom_point(aes(x=Coef.obs, y=seq), pch=15) + scale_y_continuous(breaks=mydata.byone$seq, labels=mydata.byone$trait1, name=NULL) + scale_x_continuous(name="RD correlation") + - labs(fill = "Significant") - -tt2 <- ttheme_minimal() -topfirst.leg <- cowplot::plot_grid(top.first, - tableGrob(trait.labs %>% - dplyr::select(trait.name), theme=tt2), - nrow=1, rel_widths=c(0.65, 0.35)) + labs(color = "Significant") + + theme_bw() + + theme(panel.grid.minor = element_blank(), + axis.text = element_text(size=7), + legend.position = c(0.8, 0.1)) +) ggsave(filename = "_pics/TopFirstPredictors_CI.png", dpi=400, - width=6, height=5, topfirst.leg) + width=4, height=6, plot = top.first) allpredictors <- top.first %+% (mydata) + scale_y_continuous(breaks=mydata$seq, @@ -327,11 +424,11 @@ allpredictors <- top.first %+% (mydata) + # labels=mydata$Trait.comb) + theme_classic() + - theme(axis.text.y = element_text(size=3)) #+ - #facet_wrap(.~ntraits, scales = "free_y", nrow=3) + theme(axis.text.y = element_text(size=3))# + + # facet_wrap(.~ntraits, scales = "free_y", nrow=3) ggsave(filename = "_pics/All_predictors_sign_individually_CI_faceted_0506.png", dpi=400, - width=6, height=30, allpredictors) + width=10, height=10, allpredictors) @@ -351,18 +448,19 @@ get.best <- function(x, N){ top.one.by.one <- get.best(mydata, N=1) -maxtraits <- 7 +maxtraits <- 11 for(nn in 1:maxtraits){ if(nn==1) { best.at.1 <- get.best(mydata, N=nn) newdata <- mydata %>% - filter_at(.vars=vars(trait1:trait15), + filter_at(.vars=vars(trait1:trait11), .vars_predicate = any_vars(. %in% best.at.1$trait.name | is.na(.))) new.best.row <- newdata %>% filter(Trait.comb==best.at.1$Trait.comb) upper <- new.best.row$q975 lower <- new.best.row$q025 print(paste("new best at nn", nn, best.at.1$trait.name)) + best.progr <- best.at.1$Trait.comb } if(nn>1){ better <- list() @@ -392,28 +490,69 @@ for(nn in 1:maxtraits){ lower <- new.best.row$q025 print(paste("new best at nn", nn, paste(better$trait.name, collapse=" "))) best <- better + best.progr <- c(best.progr, better$Trait.comb) } } } - - - mydata.best <- mydata %>% - filter_at(.vars=vars(trait1:trait15), - .vars_predicate = all_vars(. %in% best$trait.name | is.na(.))) %>% - filter(ntraits <= length(best$trait.name)) %>% + filter_at(.vars=vars(trait1:trait11), + # .vars_predicate = all_vars(. %in% best$trait.name | is.na(.))) %>% + .vars_predicate = all_vars(. %in% traits.sign.alone | is.na(.))) %>% + #filter(ntraits <= length(best$trait.name)) %>% + filter(sign_plus==T) %>% arrange(ntraits, Coef.obs) %>% - mutate(seq=1:n()) + group_by(ntraits) %>% + slice(n()) %>% + ungroup() %>% + bind_rows(mydata %>% + filter(ntraits==1) %>% + filter(trait1 %in% traits.sign.alone) %>% + arrange(Coef.obs) %>% + slice(1:n()-1)) %>% + arrange(ntraits, Coef.obs) %>% + mutate(seq=1:n()) %>% + mutate(sign_plus=factor(Trait.comb %in% best.progr)) -(top.all <- top.first %+% mydata.best + - scale_y_continuous(breaks=mydata.best$seq, - labels=mydata.best$Trait.comb) + - theme(axis.text.y = element_text(size=3))) +write_csv(mydata.best %>% + dplyr::select(Trait.comb:sign_plus), + path = "_derived/Mesobromion/BestSolutionTiers.csv") -ggsave(filename = "_pics/Best8_AllCombinations_CI.png", dpi=400, - width=6, height=10, top.all) +(top.all <- ggplot(data=(mydata.best %>% + mutate(size0=.6+(as.numeric(sign_plus)-1)*.6))) + + geom_segment(aes(x=q025, xend=q975, y=seq, yend=seq, col="a", + lwd=size0)) + + geom_point(aes(x=Coef.obs, y=seq), pch=15) + + scale_y_continuous(breaks=mydata.best$seq, + labels=mydata.best$Trait.comb, name=NULL) + + scale_x_continuous(name="RD correlation") + + scale_size_identity() + + theme_bw() + + theme(panel.grid.minor = element_blank(), + axis.text = element_text(size=7), + legend.position = "none")) + + +tt2 <- ttheme_minimal( + core = list(fg_params=list(cex = .7), + padding=unit(c(1, 1), "mm")), + colhead = list(fg_params=list(cex = .7)), + rowhead = list(fg_params=list(cex = .7))) + +(topall.leg <- cowplot::plot_grid(top.all, + tableGrob(trait.labs %>% + mutate(Code=1:n()) %>% + dplyr::select(Code, Trait=Short_english_name) %>% + filter(Trait %in% traits.sign.alone), + theme=tt2, rows = NULL), + #tableGrob(trait.labs %>% + # mutate(Code=1:n()) %>% + # dplyr::select(Code, Trait=trait.name) %>% + # slice(33:n()), theme=tt2), + nrow=1, rel_widths=c(0.70, 0.3))) +ggsave(filename = "_pics/Best_AllCombinations_CI.png", dpi=400, + width=6, height=3, topall.leg) mydata.out <- mydata %>% #filter(ntraits<3)%>% @@ -458,7 +597,7 @@ break() -#### Calculate and plot PCA of CWMs +##### Calculate CWM and plot PCA #### CWM.wide <- species %>% rownames_to_column("RELEVE_NR") %>% reshape2::melt(.id="RELEVE_NR") %>% @@ -471,11 +610,62 @@ CWM.wide <- species %>% rownames_to_column("species0"), by="species0") %>% group_by(RELEVE_NR) %>% - summarize_at(.vars = vars(LEB_F_Makrophanerophyt:Disp.unit.leng), + select_if(.predicate=~is.numeric(.)) %>% # CWM calculated ONLY for numeric traits + summarize_at(.vars = vars(any_of(traits.sign.alone)), #GF_Macrophan:Rosette), .funs = list(~weighted.mean(., pres, na.rm=T))) %>% dplyr::select(RELEVE_NR, order(colnames(.))) %>% column_to_rownames("RELEVE_NR") +### PCA of Y (Bealls) matrix + +library(vegan) +W.beals <- as.data.frame(beals(species, include=T, type=2)) +pca.out <- rda(W.beals) +varexpl <- round((pca.out$CA$eig)/sum(pca.out$CA$eig)*100,1) +cwms.envfit <- envfit(pca.out, CWM.wide, na.rm = T, choices = 1:3) + + +PCA1_2 <- ggplot() + + geom_point(data=as.data.frame(pca.out$CA$u[,1:2]), + aes(x=PC1, y=PC2), pch="+", size=2, alpha=0.8) + + geom_segment(data=as.data.frame(cwms.envfit$vectors$arrows*.2), + aes(x=0, xend=PC1, y=0, yend=PC2), col="Dark blue", arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) + + geom_label(data=as.data.frame(cwms.envfit$vectors$arrows*.23) %>% + rownames_to_column("Trait"), + aes(x=PC1, y=PC2, label=Trait), col="Dark blue", size=2, + position = position_dodge(1) ) + + xlab(paste("PC1 (", varexpl[1], "%)", sep="")) + + ylab(paste("PC2 (", varexpl[2], "%)", sep="")) + + theme_bw() + + scale_y_continuous(limits=c(-0.25, 0.25)) + + scale_x_continuous(limits=c(-0.25, 0.25)) + coord_equal() + + theme(panel.grid = element_blank()) + +(PCA1_3 <- ggplot() + + geom_point(data=as.data.frame(pca.out$CA$u[,1:3]), + aes(x=PC1, y=PC3), pch="+", size=2, alpha=0.8) + + geom_segment(data=as.data.frame(cwms.envfit$vectors$arrows*.2), + aes(x=0, xend=PC1, y=0, yend=PC3), col="Dark blue", arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) + + geom_label(data=as.data.frame(cwms.envfit$vectors$arrows*.23) %>% + rownames_to_column("Trait"), + aes(x=PC1, y=PC3, label=Trait), col="Dark blue", size=2, + position = position_dodge(1) ) + + xlab(paste("PC1 (", varexpl[1], "%)", sep="")) + + ylab(paste("PC3 (", varexpl[3], "%)", sep="")) + + theme_bw() + + scale_y_continuous(limits=c(-0.25, 0.25)) + + scale_x_continuous(limits=c(-0.25, 0.25)) + + coord_equal() + + theme(panel.grid = element_blank()) +) +PC_beals <- cowplot::plot_grid(PCA1_2,PCA1_3, nrow=1) + +ggsave("_pics/PC_Beals.png", width=10, height=5, dpi=300, last_plot()) + + + +#### Old down from here + + #PCA of CWMs CWM.pca <- vegan::rda(CWM.wide, scale=T) varexpl <- round(CWM.pca$CA$eig/sum(CWM.pca$CA$eig)*100,1) @@ -524,44 +714,13 @@ ggplot() + -#### Map of plots -library(rgdal) -library(sp) -library(sf) -DE_NUTS1 <- readOGR(dsn="/data/sPlot/users/Francesco/Project_11/Germany/_data/Spatial", layer="Germany_LVL1_WGS84") -DE_NUTS_sf <- DE_NUTS1 %>% - st_as_sf() - -env.sf <- SpatialPointsDataFrame(coords=env %>% dplyr::select(LON, LAT), - data=env %>% dplyr::select(-LON, -LAT), - proj4string = raster::crs(DE_NUTS1)) %>% - st_as_sf() - -env.all.sf <- SpatialPointsDataFrame(coords=env.all %>% dplyr::select(LON, LAT), - data=env.all %>% dplyr::select(-LON, -LAT), - proj4string = raster::crs(DE_NUTS1)) %>% - st_as_sf() -(basemap2 <- ggplot(data=DE_NUTS_sf) + - geom_sf(col="darkgrey", lwd=0.5, fill="white", alpha=0.5)+ - geom_sf(data=env.all.sf, col=gray(0.5), size=1) + - geom_sf(data=env.sf, col="red", alpha=0.5, size=1) + - #geom_polygon(col="darkgrey", lwd=0.5, fill="white")+ - coord_sf() + - theme_bw() -) - -ggsave(filename="_data/Mesobromion/PlotDistribution.png", height=8, width=6, dpi=300, basemap2) - - - -## Graph of PCoA + passive projection of CWM library(vegan) fuzzy <- read.table("_data/Mesobromion/X_Dry-Grassland_581plots_488spp_R.txt", header=T)#, delim="\t") cwms <- read.table("_data/Mesobromion/X_scores_T_Dry-Grassland_581plots_5traits_Rao_R.txt", header=T) %>% dplyr::select(-Axis1, -Axis2) #, delim="\t") - + pcoa.out <- wcmdscale(dist(fuzzy), eig=T) varexpl <- round((pcoa.out$eig)/sum(pcoa.out$eig)*100,1) cwms.envfit <- envfit(pcoa.out, cwms) @@ -576,8 +735,8 @@ ggplot() + geom_segment(data=as.data.frame(cwms.envfit$vectors$arrows*.0008), aes(x=0, xend=Dim1, y=0, yend=Dim2), col="Dark blue", arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) + geom_text(data=as.data.frame(cwms.envfit$vectors$arrows*.00092) %>% - rownames_to_column("Trait"), - aes(x=Dim1, y=Dim2, label=Trait), col="Dark blue", size=3 ) + + rownames_to_column("Trait"), + aes(x=Dim1, y=Dim2, label=Trait), col="Dark blue", size=3 ) + xlab(paste("PCoA1 (", varexpl[1], "%)", sep="")) + ylab(paste("PCoA2 (", varexpl[2], "%)", sep="")) + theme_bw() + @@ -589,3 +748,109 @@ ggsave("_data/Mesobromion/PCoA_traits.png", width=6, height=4, dpi=300, last_plo + + + + +#### Map of plots #### +library(rgdal) +library(sp) +library(sf) +env <- read_delim(file = "_data/Mesobromion/env.10perc.txt", delim = "\t") +DE_NUTS1 <- readOGR(dsn="/data/sPlot/users/Francesco/Project_11/Germany/_data/Spatial", layer="Germany_LVL1_WGS84") +DE_NUTS_sf <- DE_NUTS1 %>% + st_as_sf() + +env.sf <- SpatialPointsDataFrame(coords=env %>% dplyr::select(LON, LAT), + data=env %>% dplyr::select(-LON, -LAT), + proj4string = raster::crs(DE_NUTS1)) %>% + st_as_sf() + +env.all.sf <- SpatialPointsDataFrame(coords=env.all %>% dplyr::select(LON, LAT), + data=env.all %>% dplyr::select(-LON, -LAT), + proj4string = raster::crs(DE_NUTS1)) %>% + st_as_sf() + + +(basemap2 <- ggplot(data=DE_NUTS_sf) + + geom_sf(col="darkgrey", lwd=0.5, fill="white", alpha=0.5)+ + geom_sf(data=env.all.sf, col=gray(0.5), size=1) + + geom_sf(data=env.sf, col="red", alpha=0.5, size=1) + + #geom_polygon(col="darkgrey", lwd=0.5, fill="white")+ + coord_sf() + + theme_bw() +) + +ggsave(filename="_pics/PlotDistribution.png", height=8, width=6, dpi=300, basemap2) + + + + + + +### renaming variables +"LF_Macroph = LEB_F_Makrophanerophyt +LF_Nanoh = LEB_F_Nanophanerophyt +LF_Hemicr = LEB_F_Hemikryptophyt +LF_Geoph = LEB_F_Geophyt +LF_Hemiph = LEB_F_Hemiphanerophyt +LF_Theropf = LEB_F_Therophyt +LF_Hydroph = LEB_F_Hydrophyt +LF_Pseudoph = LEB_F_Pseudophanerophyt +LF_Chamaeph = LEB_F_Chamaephyt +LL_Pluri_poll = LEB_D_plurienn_pollakanth +LL_Pluri_hapa = LEB_D_plurienn_hapaxanth +LL_Annual = LEB_D_annuell +LL_Bienn = LEB_D_bienn +VS_Absent = V_V_VER_absent +VS_RootSprout = V_VER_Wurzelspross +VS_Runners = V_VER_Ausläufer +VS_Rhizon = V_VER_Rhizom +VS_Tuber = V_VER_Innovationsknopse.mit.Wurzelknolle +VS_StorageRoot = V_VER_Innovationsknospe.mit.Speicherwurzel +VS_RunningTuber = V_VER_Ausläuferknolle +VS_Brutsprösschen = V_VER_Brutsprösschen ## How to translate? +VS_Fragment = V_VER_Fragmentation +VS_Turio = V_VER_Turio +24 V_VER_Sprossknolle +25 V_VER_phyllogener_Spross +26 V_VER_Rhizompleiokorm +27 V_VER_Zwiebel +28 V_VER_Ausläuferrhizom +29 V_VER_Ausläuferzwiebel +30 V_VER_Bulbille +31 ROS_T_rosettenlose.Pflanzen +32 ROS_T_Halbrosettenpflanze +33 ROS_T_Ganzrosettenpflanzen +34 BL_AUSD_immergrün +35 BL_AUSD_sommergrün +36 BL_AUSD_vorsommergrün +37 BL_AUSD_überwinternd_grün +38 BL_ANAT_skleromorph +39 BL_ANAT_mesomorph +40 BL_ANAT_hygromorph +41 BL_ANAT_hydromorph +42 BL_ANAT_blattsukkulent +43 BL_ANAT_helomorph +44 BL_BEG +45 BL_END +46 BL_DAU +47 LeafArea +48 SLA +49 LeafC.perdrymass +50 LeafN +51 LeafP +52 PlantHeight +53 SeedMass +54 Seed.length +55 LDMC +56 LeafNperArea +57 LeafNPratio +58 Leaf.delta.15N +59 Seed.num.rep.unit +60 Leaffreshmass +61 Disp.unit.leng +62 BLU_KL +63 REPR_T +64 STRAT_T" + diff --git a/99_HIDDEN_functions.R b/99_HIDDEN_functions.R index 1f206a113926f7e6ee9b757da38d12bb0feee9be..ef81a8006912f9ff823495935f21469d4dff945c 100644 --- a/99_HIDDEN_functions.R +++ b/99_HIDDEN_functions.R @@ -66,23 +66,24 @@ get.corXY.bootstrap <- function(comm, traits, trait.sel="all", bootstrap=199){ ## caution ## ALL columns with only 0-1 values are AUTOMATICALLY considered as asym.bin sensu FD:gowdis ##get all columns with binary variables + ## CAUTION - function below doesn't work as expected # binary.traits <- which(apply(traits[,ii,drop=F], MARGIN=2, function(x)( all(na.omit(x) %in% 0:1) ))==T) syn.out.tmp <- matrix.x(comm=comm, traits=traits[,ii,drop=F], scale=T)$matrix.X #, asym.bin=binary.traits W.beals <- as.data.frame(beals(comm, include=T, type=2)) - # permtute traits + # permute traits index.traits <- lapply(1:(bootstrap+1), function(x){sample(1:n.species, replace=F)}) syn.out.perm.tmp <- matrix.x(comm=comm, traits=traits[index.traits[[bootstrap+1]],ii,drop=F], scale=T)$matrix.X #, asym.bin=binary.traits - corXY <- NULL + #RD.tmp <- RV.rtest(W.beals, as.data.frame(syn.out.tmp), nrepet = 0) RD.tmp <- dcor(W.beals, as.data.frame(syn.out.tmp))^2 #RV.perm.tmp <- RV.rtest(W.beals, as.data.frame(syn.out.perm.tmp), nrepet = 0) RD.perm.tmp <- dcor(W.beals, as.data.frame(syn.out.perm.tmp))^2 - corXY <- rbind(corXY, - data.frame(Trait.comb=lab.tmp, bootstr.n=0, Test="RD", - Coef.obs=RD.tmp, Coef.perm=RD.perm.tmp)) + corXY <- NULL + corXY <- data.frame(Trait.comb=lab.tmp, bootstr.n=0, Test="RD", + Coef.obs=RD.tmp, Coef.perm=RD.perm.tmp) index.bootstr <- lapply(1:bootstrap, function(x){sample(1:n.sites, replace=T)}) for(b in 1:bootstrap){