df <- read_csv("~/data/gcme/data_received_190325/NewData_wide_CORRECTED2.csv") %>%
# something is wrong in columns ambient_Sd, ambient_Se, elevated...
mutate( ambient_Sd = as.numeric(ambient_Sd), ambient_Se = as.numeric(ambient_Se),
elevated_Sd = as.numeric(elevated_Sd), elevated_Se = as.numeric(elevated_Se) )
# save experiments names
df_experiments <- df %>% select(exp_nam, prev_name) %>% distinct()
list_exp_gt1yr <- df %>%
filter(!is.na(Year)) %>%
group_by(exp_nam) %>%
summarise(nyears=max(Year)) %>%
filter(nyears>1) %>%
select(exp_nam) %>%
unlist() %>%
unname()
df_c <- df %>%
# ## Take this info from experiments below
# select(-Fumigation_type, -Vegetation_type) %>%
# ## Add prev_name back
# left_join( df_experiments, by = "exp_nam") %>%
## filter experiments with only manipulated CO2
## (no other factors manipulated, strong reduction of data)
filter(treatment=="c") %>%
## More than 1 year data
filter(exp_nam %in% list_exp_gt1yr) %>%
## Combine with experiments meta info
left_join(
read_csv("~/data/gcme/data_received_190325/table_var_exp_names_experiments.csv") %>%
select(prev_name, Fumigation_type=my_fumigation_type, Vegetation_type),
by = c("prev_name")
) %>%
## Filter only Fumigation_type OTC or FACE
filter( Fumigation_type %in% c("OTC", "FACE") ) %>%
{.}
Complement based on Kevin’s comments:
df_c %>%
filter(exp_nam == "MI") %>%
filter(Data_type %in% c("ANPP", "BNPP"))
## # A tibble: 3 × 53
## ALIAS exp_nam prev_name factors treatment TT_Nut_Detail co2_a co2_e fert_a
## <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 25213 MI MI_c c c c 410 760 0
## 2 25214 MI MI_c c c c 410 760 0
## 3 25215 MI MI_c c c c 410 760 0
## # … with 44 more variables: fert_e <dbl>, nfert_a <dbl>, nfert_e <dbl>,
## # nfertQ_a <dbl>, nfertQ_e <dbl>, pfert_a <dbl>, pfert_e <dbl>,
## # pfertQ_a <dbl>, pfertQ_e <dbl>, kfert_a <dbl>, kfert_e <dbl>,
## # kfertQ_a <dbl>, kfertQ_e <dbl>, lime_a <dbl>, lime_e <dbl>, foth_a <dbl>,
## # foth_e <dbl>, warm_a <dbl>, warm_e <dbl>, warmQ_e <dbl>, irr_a <dbl>,
## # irr_e <dbl>, d_a <dbl>, d_e <dbl>, ozone_a <dbl>, ozone_e <dbl>,
## # swarm_a <dbl>, swarm_e <dbl>, swarmQ_e <dbl>, Data_type <chr>, …
df_c <- df_c %>%
filter(exp_nam != "POPFACE_pooled")
df_c %>%
pull(exp_nam) %>%
unique() %>%
sort()
## [1] "Abisko_subarctic"
## [2] "BangorFACE"
## [3] "BioCON"
## [4] "Birmensdorf"
## [5] "Birmensdorf_c"
## [6] "Birmensdorf_cf"
## [7] "Brandbjerg"
## [8] "Chaux-des-Breuleux"
## [9] "Christchurch_nf"
## [10] "Christchurch_pr"
## [11] "DRI"
## [12] "DUKE"
## [13] "DUKE2"
## [14] "Durham_DukeFACE"
## [15] "Dwingeloo"
## [16] "EucFACE"
## [17] "EUROFACE4_pa"
## [18] "EUROFACE4_pe"
## [19] "EUROFACE4_pn"
## [20] "EUROFACE7_pooled"
## [21] "GiFACE"
## [22] "Glendevon_ag"
## [23] "Glendevon_bp"
## [24] "Glendevon_ps"
## [25] "Glendevon2_ag"
## [26] "Glendevon2_psi"
## [27] "Glendevon3_ag"
## [28] "Glendevon3_psi"
## [29] "Headley_fe"
## [30] "Headley_ps"
## [31] "Headley_qp"
## [32] "HohenheimFACE"
## [33] "Jokioinen"
## [34] "JRBP_FACE3"
## [35] "JRBP_OTC"
## [36] "JRBP_OTC2sand"
## [37] "JRBP_OTC2ser"
## [38] "JRBP_OTCsand"
## [39] "JRBP_OTCser"
## [40] "MBS_pe"
## [41] "MBS_pt"
## [42] "MBS_pt2"
## [43] "MBS_pt3"
## [44] "MBS_pt4_as"
## [45] "MBS_pt4_pooled"
## [46] "MBS_pt4_pt"
## [47] "MI"
## [48] "ORNERP_acer_ar"
## [49] "ORNERP_acer_as"
## [50] "ORNERP_acer_pooled"
## [51] "ORNERP_grassland"
## [52] "ORNERP_liqui"
## [53] "ORNERP_liqui2"
## [54] "ORNERP_liqui3"
## [55] "ORNERP_liriodendron"
## [56] "ORNERP_quercus"
## [57] "OzFACE"
## [58] "PHACE"
## [59] "POPFACE_pa"
## [60] "POPFACE_pe"
## [61] "POPFACE_pn"
## [62] "Rhine-aspenFACE"
## [63] "RiceFACE_China_23N_113E_1"
## [64] "RiceFACE_China_30N_112E_Or_1"
## [65] "RiceFACE_China_32N_120E_Or"
## [66] "RiceFACE_China_32N_120E_Or_5"
## [67] "RiceFACE_China_32N_120E_Or_7"
## [68] "RiceFACE_China_32N_120E_Or_9"
## [69] "RiceFACE_China_32N_120E_Or_A"
## [70] "RiceFACE_China_32N_120E_Or_Tr"
## [71] "RiceFACE_China_32N_120E_Or_Tr_2"
## [72] "RiceFACE_China_32N_120E_Or_Tr_4"
## [73] "RiceFACE_China_32N_120E_Or_Tr_9"
## [74] "RiceFACE_China_32N_120E_Tr_1"
## [75] "RiceFACE_China_33N_120E_Or_11"
## [76] "RiceFACE_China_33N_120E_Or_3"
## [77] "RiceFACE_China_33N_120E_Or_7"
## [78] "RiceFACE_China_33N_120E_Or_Tr_1"
## [79] "RiceFACE_Japan_A_1998_39,38_140,57"
## [80] "RiceFACE_Japan_A_1998_39,40_141"
## [81] "RiceFACE_Japan_A_2003_39,38_140,57"
## [82] "RiceFACE_Japan_A6_2010_35,38_139,60"
## [83] "RiceFACE_Japan_Ki_2004_39,38_140,57"
## [84] "RiceFACE_Japan_Ko_2011_35,58_139,59"
## [85] "RiceFACE_Japan_L_1999_39,38_140,57"
## [86] "RiceFACE_Japan_L_2000_39,38_140,57"
## [87] "RiceFACE_Japan_L_2010_35,58_139,60"
## [88] "RiceFACE_Japan_L_2011_35,58_139,60"
## [89] "Salmisuo"
## [90] "SCA"
## [91] "SCBG"
## [92] "Suonenjoki2_bp4"
## [93] "Suonenjoki2_bp80"
## [94] "SwissFACE_lolium"
## [95] "SwissFACE_lolium2"
## [96] "SwissFACE_medicago"
## [97] "SwissFACE_trifolium"
## [98] "SwissFACE_trifolium2"
## [99] "TasFACE"
## [100] "UA_OTC"
## [101] "USDA_citrus"
## [102] "Vielsalm"
## [103] "webFACE"
df_c <- df_c %>%
mutate(exp_nam = ifelse(exp_nam == "Durham_DukeFACE", "DUKE", exp_nam))
Look at available variables. They are a bit inconsistently named. Make a sound selection.
all_selvars <- c()
# df_c$Data_type %>% unique()
Test
selvars <- c("belowground_biomass", "belowground_biomass_C", "root_biomass", "root_mass",
"root_C", "fine_roots_C", "coarse_root_biomass", "coarse_roots_biomass",
"coarse_roots_C")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "test")
selvars <- c("GPP")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "gpp")
selvars <- c("total_plant_C", "total_biomass") # Not: "biomass_C",
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
filter(!(Unit %in% c("mg_C_"))) %>%
mutate(per_plant = ifelse(Unit %in% c("g/plant", "kg/tree"), TRUE, FALSE)) %>%
mutate(varnam = "cveg")
)
Note:
g_C/m2
), assuming this represents biomass per ground area, not C concentration (per leaf area)selvars <- c("aboveground_biomass", "Aboveground_biomass", "aboveground_biomass_", "aboveground_biomass_(green)", "aboveground_biomass_C", "total_aboveground_biomass")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
filter(!(Unit %in% c("%"))) %>%
mutate(per_plant = ifelse(Unit %in% c("g/plant", "kg/tree", "mg/plant"), TRUE, FALSE)) %>%
mutate(varnam = "cveg_ag")
)
g_C/m2
and is included for further analysis. Filter by Units.selvars <- c("belowground_biomass", "belowground_biomass_C", "root_biomass", "root_mass",
"root_C", "fine_roots_C", "coarse_root_biomass", "coarse_roots_biomass",
"coarse_roots_C")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
filter(!(Unit %in% c("%"))) %>%
mutate(per_soil = ifelse(Unit %in% c("g/g_soil"), TRUE, FALSE)) %>%
mutate(per_plant = ifelse(Unit %in% c("g/tree", "kg/plant", "kg/tree"), TRUE, FALSE)) %>%
mutate(varnam = "cveg_bg")
)
selvars <- c("wood_C", "wood_biomass", "stem_biomass", "woody_biomass")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "cveg_wood")
)
selvars <- c("leaf_C", "leaf_biomass", "green_leaf_biomass")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "cveg_fol")
)
selvars <- c("NPP")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "npp")
)
selvars <- c("aboveground_production", "annual_aboveground_biomass_production", "ANPP")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "anpp")
)
selvars <- c("ANPP_foliage")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "npp_fol")
)
selvars <- c("NPP_woody", "ANPP_woody")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "npp_wood")
)
selvars <- c("fine_root_production", "BNPP")
all_selvars <- c(all_selvars, selvars)
df_c_sub <- df_c_sub %>%
bind_rows(
df_c %>%
filter(Data_type %in% selvars) %>%
mutate(varnam = "bnpp")
)
# "soil_C" "soil_organic_C" "soil_organic_carbon" "soil_total_C" "SOM"
Available data.
df_c_sub %>%
group_by(varnam) %>%
summarise(n_plots = sum(n_plots), n_exp = n()) %>%
knitr::kable()
varnam | n_plots | n_exp |
---|---|---|
anpp | 300 | 96 |
bnpp | 356 | 134 |
cveg | 633 | 182 |
cveg_ag | 860 | 240 |
cveg_bg | 745 | 220 |
cveg_fol | 354 | 85 |
cveg_wood | 198 | 62 |
gpp | 64 | 18 |
npp | 400 | 128 |
npp_fol | 56 | 14 |
npp_wood | 114 | 38 |
All meaningful variables selected?
all_vars <- df_c$Data_type %>% unique()
# all_vars[!(all_vars %in% all_selvars)]
Aggregate by variable and experiment, pooling multiple years, sampling dates, and plots/replicates and calculate log response ratio
df_c_sub <- df_c_sub %>%
# get standard deviation for all data
mutate(
my_ambient_sd = ambient_Sd,
my_elevated_sd = elevated_Sd
) %>%
rowwise() %>%
mutate(
my_ambient_sd = ifelse( is.na(my_ambient_sd), ambient_Se * sqrt(n_plots), my_ambient_sd ),
my_elevated_sd = ifelse( is.na(my_elevated_sd), elevated_Se * sqrt(n_plots), my_elevated_sd )
) %>%
## Get logarithm of response ratio and its variance
metafor::escalc(
measure = "ROM",
m1i = elevated, sd1i = my_elevated_sd, n1i = n_plots,
m2i = ambient, sd2i = my_ambient_sd, n2i = n_plots,
data=.,
append = TRUE, var.names = c("logr", "logr_var") ) %>%
as_tibble() %>%
mutate( logr_se = sqrt(logr_var)/sqrt(n_plots) )
## Warning: Some 'yi' and/or 'vi' values equal to +-Inf. Recoded to NAs.
write_csv(df_c_sub, file = "data/df_c_sub.csv")
Pool all measurements (multiple years, sampling dates and plots) by variable and experiment for meta analysis
df_c_agg <- df_c_sub %>%
filter(!is.na(logr_var) & !is.na(logr)) %>%
mutate( id = paste(exp_nam, varnam, sep = "_XXX_")) %>%
MAd::agg( id = id, es = logr, var = logr_var, n.1 = n_plots, n.2 = n_plots, cor = 1.0, method = "BHHR", data = . ) %>%
as_tibble() %>%
mutate( id = str_split(id, "_XXX_") ) %>%
mutate( exp_nam = purrr::map_chr(id, 1),
varnam = purrr::map_chr(id, 2) ) %>%
select(exp_nam, varnam, es, var) %>%
## add number of plots column and varnam
left_join( df_c_sub %>%
group_by( exp_nam, varnam ) %>%
summarise( n_plots = sum(n_plots) ) %>%
select( exp_nam, varnam, n_plots ),
by = c("exp_nam", "varnam") ) %>%
rename( logr = es, logr_var = var ) %>%
mutate( logr_se = sqrt(logr_var)/sqrt(n_plots) ) %>%
# left_join( df_varnams, by = "varnam" ) %>%
## filter NA for exp_nam due to unidentified experiment name in soil decomposition dataset
filter(exp_nam!="NA" & !is.na(exp_nam))
## `summarise()` has grouped output by 'exp_nam'. You can override using the `.groups` argument.
write_csv(df_c_agg, file = "data/df_c_agg.csv")
Aggregate by variable, doing a meta-analysis of the log response ratios, with experiment as random factor (method=“DL”)
agg_meta <- function(df, groupvar){
# print(groupvar)
out_meta <- df %>%
dplyr::filter(varnam == eval(parse_character(groupvar))) %>%
# main meta analysis function call, adjusted step size (see http://www.metafor-project.org/doku.php/tips:convergence_problems_rma)
# metafor::rma( logr, logr_var, method = "REML", slab = exp_nam, control = list(stepadj=0.3), data = . )
metafor::rma.mv( logr, logr_var, method = "REML", random = ~ 1 | exp_nam, slab = exp_nam, control = list(stepadj=0.3), data = . )
# transform back
out_meta_scaled <- predict( out_meta, transf=exp )
df_box <- tibble(
varnam = groupvar,
middle = out_meta$b[1,1],
ymin = out_meta$ci.lb,
ymax = out_meta$ci.ub,
middle_scaled = out_meta_scaled$pred,
ymin_scaled = out_meta_scaled$ci.lb,
ymax_scaled = out_meta_scaled$ci.ub
)
# print("... done.")
return(list(df_box=df_box, out_meta=out_meta))
}
# do meta-analysis on all variables
varlist <- unique(df_c_agg$varnam)
## didn't work
varlist <- varlist[-which(varlist == "npp_fol")]
list_meta <- purrr::map(as.list(varlist), ~agg_meta(df_c_agg, .))
df_metabox <- purrr::map_dfr(list_meta, "df_box")
# left_join( df_varnams, by = "varnam" )
names(list_meta) <- varlist
df_c_agg %>%
# arrange(logr) %>%
# mutate( my_lab = factor(my_lab, levels=rev(c("Asat", "Leaf Nmass", "Leaf Narea", "ANPP", "N uptake", "N availability", "root:shoot ratio", "BNPP", "Litter", "Soil decomposition rate")))) %>%
ggplot( aes(x = varnam, y = logr)) +
geom_jitter( color = rgb(0,0,0,0.3), aes( size = 1/logr_se ), position = position_jitter(w = 0.2, h = 0) ) +
geom_crossbar( data = df_metabox, aes(x = varnam, y = middle, ymin = ymin, ymax = ymax), fill = "grey80", alpha = 0.6, width = 0.5 ) +
geom_hline( yintercept = 0.0, size = 0.5 ) +
labs(x = "", y = "Log Response Ratio", size = expression(paste("Error"^{-1}))) +
coord_flip() +
ylim(-1,1)
## Warning: Removed 2 rows containing missing values (geom_point).
## make a wide table with ANPP and BNPP
df_c_wide <- df_c_agg %>%
select(exp_nam, varnam, logr) %>%
tidyr::spread( varnam, logr )
## add standard error
df_c_wide_se <- df_c_agg %>%
select(exp_nam, varnam, logr_se) %>%
tidyr::spread( varnam, logr_se)
write_csv(df_c_wide, file = "data/df_c_wide.csv")
write_csv(df_c_wide_se, file = "data/df_c_wide_se.csv")
df_c_wide %>%
knitr::kable()
exp_nam | anpp | bnpp | cveg | cveg_ag | cveg_bg | cveg_fol | cveg_wood | gpp | npp | npp_fol | npp_wood |
---|---|---|---|---|---|---|---|---|---|---|---|
BangorFACE | NA | NA | NA | 0.1112469 | NA | NA | NA | NA | NA | NA | NA |
BioCON | 0.1335173 | NA | 0.1188994 | 0.2475571 | 0.1362949 | NA | NA | NA | NA | NA | NA |
Birmensdorf | NA | NA | NA | NA | 0.1067524 | NA | NA | NA | NA | NA | NA |
Birmensdorf_c | NA | NA | NA | NA | 0.3779193 | NA | NA | NA | NA | NA | NA |
Brandbjerg | NA | 0.4139760 | NA | -0.0560495 | 0.2238915 | -0.0054399 | NA | NA | NA | NA | NA |
Christchurch_pr | NA | 0.0865558 | NA | NA | NA | NA | NA | NA | NA | NA | NA |
DRI | NA | 0.3315263 | 0.5466786 | 0.5438703 | 0.6125276 | NA | NA | NA | NA | NA | NA |
DUKE | 0.1570184 | 0.2866832 | 0.0360633 | 0.3751406 | 0.0125839 | 0.0682708 | 0.0438558 | 0.1417322 | 0.1879209 | NA | 0.2457437 |
DUKE2 | NA | NA | NA | 0.0057893 | 0.8708284 | NA | NA | NA | 0.2388914 | 0.1707943 | NA |
EUROFACE4_pa | -0.0138365 | NA | NA | NA | 0.2308925 | NA | NA | NA | NA | NA | NA |
EUROFACE4_pe | -0.0372565 | NA | NA | NA | 0.3147427 | NA | NA | NA | NA | NA | NA |
EUROFACE4_pn | 0.0376497 | NA | NA | NA | 0.2304942 | -0.0100917 | NA | NA | NA | NA | NA |
EUROFACE7_pooled | NA | NA | 0.1946206 | NA | 0.1671038 | NA | -0.1863931 | NA | NA | NA | NA |
GiFACE | 0.0515306 | NA | NA | 0.0591206 | 0.2056396 | NA | NA | NA | NA | NA | NA |
Glendevon_ag | NA | NA | NA | NA | 0.4372138 | -0.1218049 | 0.4015019 | NA | NA | NA | NA |
Glendevon_bp | NA | NA | NA | NA | 0.0123019 | 0.0055173 | 0.0782007 | NA | NA | NA | NA |
Glendevon_ps | NA | NA | NA | NA | 0.5283702 | 0.3387736 | 0.5161074 | NA | NA | NA | NA |
Glendevon2_ag | NA | NA | NA | NA | 0.3134647 | 0.4379501 | 0.4850694 | NA | NA | NA | NA |
Glendevon2_psi | NA | NA | NA | NA | 0.3967778 | 0.2486040 | 0.1341206 | NA | NA | NA | NA |
Glendevon3_ag | NA | NA | NA | NA | 0.1517137 | NA | NA | NA | NA | NA | NA |
Glendevon3_psi | NA | NA | NA | NA | 0.4665894 | 0.2510882 | 0.1833692 | NA | NA | NA | NA |
Headley_fe | NA | NA | 0.4711651 | NA | 0.0310906 | NA | NA | NA | NA | NA | NA |
Headley_ps | NA | NA | 0.4265274 | NA | 0.4754237 | NA | NA | NA | NA | NA | NA |
Headley_qp | NA | NA | 0.1712619 | NA | 0.0676586 | NA | NA | NA | NA | NA | NA |
JRBP_FACE3 | 0.0370620 | -0.8754687 | -0.0507464 | 0.2316585 | -0.1749161 | NA | NA | NA | -0.2448323 | NA | NA |
JRBP_OTC2sand | NA | NA | 0.3571689 | 0.3725737 | 0.2638466 | NA | NA | NA | NA | NA | NA |
JRBP_OTC2ser | NA | NA | 0.3856517 | 0.2075951 | 0.4408220 | NA | NA | NA | NA | NA | NA |
JRBP_OTCsand | NA | NA | 0.6874530 | 0.3616584 | 1.4894786 | NA | NA | NA | NA | NA | NA |
JRBP_OTCser | NA | NA | 0.2966576 | 0.0979042 | 1.0238522 | NA | NA | NA | NA | NA | NA |
MBS_pe | NA | NA | 0.2275603 | 0.1933713 | 0.2505749 | NA | NA | NA | NA | NA | NA |
MBS_pt | NA | NA | 0.2358460 | 0.3076428 | 0.1971356 | 0.3659343 | 0.2546422 | NA | NA | NA | NA |
MI | 0.6886090 | 0.2238135 | NA | 0.4817802 | -0.0109911 | NA | NA | NA | NA | NA | NA |
ORNERP_acer_pooled | NA | 0.6507337 | NA | 0.6552134 | -0.0032279 | NA | NA | NA | NA | NA | NA |
ORNERP_grassland | NA | NA | NA | 0.1591515 | NA | NA | NA | NA | NA | NA | NA |
ORNERP_liqui | 0.1512726 | 0.7110731 | NA | NA | 0.9126287 | NA | NA | NA | 0.1894697 | NA | NA |
ORNERP_liqui2 | 0.7968220 | 0.4652327 | NA | 0.2820665 | NA | 0.0520934 | -0.0164182 | NA | 0.1777542 | NA | NA |
ORNERP_liriodendron | NA | NA | 0.1792408 | 0.1829151 | 0.1665553 | NA | NA | NA | NA | NA | NA |
ORNERP_quercus | NA | NA | 0.8542270 | 0.8371413 | 0.8582689 | NA | NA | NA | NA | NA | NA |
PHACE | NA | NA | 0.0884977 | 0.2017004 | 0.0871224 | NA | NA | 0.1104195 | NA | NA | NA |
POPFACE_pa | 0.2586932 | 0.4233322 | 0.2050547 | 0.2011534 | 0.3062610 | 0.0482133 | 0.2484391 | 0.4411407 | 0.2382158 | NA | 0.2416961 |
POPFACE_pe | 0.2559145 | 0.5910167 | 0.2815354 | 0.2540387 | 0.4637270 | 0.1371860 | 0.2912897 | 0.5067051 | 0.2466410 | NA | 0.2378633 |
POPFACE_pn | 0.1174660 | 0.7075088 | 0.1599663 | 0.1340787 | 0.3166201 | 0.1622885 | 0.1525943 | 0.4774717 | 0.1398347 | NA | 0.1058362 |
RiceFACE_China_32N_120E_Or_5 | NA | NA | NA | 0.0950925 | NA | NA | NA | NA | NA | NA | NA |
RiceFACE_China_32N_120E_Or_Tr_9 | NA | NA | 0.0985531 | NA | NA | NA | NA | NA | NA | NA | NA |
RiceFACE_China_33N_120E_Or_3 | NA | NA | NA | 0.2006375 | NA | NA | NA | NA | NA | NA | NA |
RiceFACE_China_33N_120E_Or_Tr_1 | NA | NA | NA | 0.1622556 | NA | NA | NA | NA | NA | NA | NA |
RiceFACE_Japan_A_2003_39,38_140,57 | NA | NA | 0.1006805 | NA | NA | 0.4340585 | NA | NA | NA | NA | NA |
RiceFACE_Japan_Ki_2004_39,38_140,57 | NA | NA | 0.1087863 | NA | NA | NA | NA | NA | NA | NA | NA |
SCA | NA | NA | -0.0710292 | 0.0419648 | -0.1109846 | NA | NA | NA | NA | NA | NA |
SCBG | NA | NA | 0.2175267 | 0.0552447 | 0.0890281 | NA | NA | NA | NA | NA | NA |
Suonenjoki2_bp4 | NA | NA | -0.0233929 | NA | -0.0501244 | -0.0396091 | 0.0359751 | NA | NA | NA | NA |
Suonenjoki2_bp80 | NA | NA | 0.3348475 | NA | 0.3635478 | 0.3227734 | 0.3407065 | NA | NA | NA | NA |
SwissFACE_lolium2 | -0.0317718 | NA | 0.1563991 | 0.0074219 | 0.3401834 | NA | NA | NA | NA | NA | NA |
SwissFACE_medicago | NA | NA | NA | 0.0018506 | NA | NA | NA | NA | NA | NA | NA |
SwissFACE_trifolium2 | 0.1541973 | NA | NA | 0.5552928 | 0.1991340 | NA | NA | NA | NA | NA | NA |
TasFACE | 0.6020745 | NA | 0.0063499 | 0.7103332 | -0.3973634 | NA | NA | NA | NA | NA | NA |
UA_OTC | NA | NA | 0.5648180 | 0.4929170 | 0.8684009 | 0.1951968 | 0.4006971 | NA | NA | NA | NA |
USDA_citrus | NA | NA | 0.4093392 | 0.4083281 | 0.3985172 | 0.2487667 | 0.3134662 | NA | NA | NA | NA |
tmp <- df_c_wide %>%
filter(!is.na(npp) & !is.na(gpp)) %>%
mutate(l_npp_gpp = npp / gpp) %>%
left_join(
df_c_wide_se %>%
select(exp_nam, npp_se = npp, gpp_se = gpp) %>%
filter(!is.na(npp_se) & !is.na(gpp_se)),
by = "exp_nam"
) %>%
mutate(certainty = 1/(gpp_se * npp_se))
tmp %>%
ggplot(aes(x = gpp, y = npp, label = exp_nam, size = certainty)) +
geom_point(color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
tmp %>%
ggplot(aes(x = l_npp_gpp, y = exp_nam, size = certainty)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp <- df_c_wide %>%
filter(!is.na(anpp) & !is.na(npp)) %>%
mutate(l_anpp_npp = anpp / npp)
tmp %>%
ggplot(aes(x = npp, y = anpp, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_text_repel).
tmp %>%
ggplot(aes(x = l_anpp_npp, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp <- df_c_wide %>%
filter(!is.na(bnpp) & !is.na(npp)) %>%
mutate(l_bnpp_npp = bnpp / npp)
tmp %>%
ggplot(aes(x = npp, y = bnpp, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_text_repel).
tmp %>%
ggplot(aes(x = l_bnpp_npp, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp <- df_c_wide %>%
filter(!is.na(npp_wood) & !is.na(npp)) %>%
mutate(l_npp_wood_npp = npp_wood / npp)
tmp %>%
ggplot(aes(x = npp, y = npp_wood, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
tmp %>%
ggplot(aes(x = l_npp_wood_npp, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp <- df_c_wide %>%
filter(!is.na(cveg) & !is.na(npp)) %>%
mutate(l_cveg_npp = cveg / npp)
tmp %>%
ggplot(aes(x = npp, y = cveg, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text_repel).
tmp %>%
ggplot(aes(x = l_cveg_npp, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp <- df_c_wide %>%
filter(!is.na(cveg_ag) & !is.na(cveg)) %>%
mutate(l_cveg_ag_cveg = cveg_ag / cveg)
tmp %>%
ggplot(aes(x = cveg, y = cveg_ag, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_text_repel).
tmp %>%
ggplot(aes(x = l_cveg_ag_cveg, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp %>%
ggplot(aes(x = l_cveg_ag_cveg, y = ..density..)) +
geom_density() +
geom_vline(xintercept = 1, linetype = "dotted") +
xlim(-1, 3)
## Warning: Removed 3 rows containing non-finite values (stat_density).
tmp <- df_c_wide %>%
filter(!is.na(cveg_bg) & !is.na(cveg)) %>%
mutate(l_cveg_bg_cveg = cveg_bg / cveg)
tmp %>%
ggplot(aes(x = cveg, y = cveg_bg, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
## Warning: Removed 7 rows containing missing values (geom_point).
## Warning: Removed 7 rows containing missing values (geom_text_repel).
tmp %>%
ggplot(aes(x = l_cveg_bg_cveg, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp %>%
ggplot(aes(x = l_cveg_bg_cveg, y = ..density..)) +
geom_density() +
geom_vline(xintercept = 1, linetype = "dotted") +
xlim(-1, 3)
## Warning: Removed 3 rows containing non-finite values (stat_density).
tmp <- df_c_wide %>%
filter(!is.na(cveg_wood) & !is.na(cveg)) %>%
mutate(l_cveg_wood_cveg = cveg_wood / cveg)
tmp %>%
ggplot(aes(x = cveg, y = cveg_wood, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_text_repel).
tmp %>%
ggplot(aes(x = l_cveg_wood_cveg, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")
tmp <- df_c_wide %>%
filter(!is.na(cveg_fol) & !is.na(cveg)) %>%
mutate(l_cveg_fol_cveg = cveg_fol / cveg)
tmp %>%
ggplot(aes(x = cveg, y = cveg_fol, label = exp_nam)) +
geom_point(size = 2, color = "red") +
xlim(-0.1, 0.7) + ylim(-0.1, 0.7) +
geom_abline(a = 0, b = 1, linetype = "dotted") +
coord_equal() +
theme_classic() +
geom_text_repel(size = 2, color = "grey30") +
labs(subtitle = paste("N = ", nrow(tmp)))
## Warning: Ignoring unknown parameters: a, b
tmp %>%
ggplot(aes(x = l_cveg_fol_cveg, y = exp_nam)) +
geom_jitter(position = position_jitter(w = 0.2, h = 0)) +
geom_vline(xintercept = 1, linetype = "dotted")