Supplementary Materials s13

Total Page:16

File Type:pdf, Size:1020Kb

Supplementary Materials s13

Supplementary materials

1) Materials and Methods

2) Tables (4)

3) Figures (3)

4) References

5) R codes

1 Materials and methods Data selection

To examine the response of fine root production to soil nutrients in natural habitats, we searched databases of ISI Web of Science, PubMed, Google Scholar and JSTOR with the key terms: ‘fine root*’ and ‘ingrowth’. Agricultural or horticultural ecosystems that were often greatly disturbed by human activities were not included in our analysis. The control plots from fertilized experiments in natural systems were also included in the analysis. Data from greenhouse experiments were also excluded. We included data that had measured roots to at least 20 cm depth in the soil. Soil characteristics (pH, soil organic matter, total C, N and P, available N and P) were derived from the original papers or other studies that were conducted at the same sites. Soil types, classified according to the FAO-UNESCO classification system, were derived from original publications or from the Harmonised World Soil Database version 1.21 released in 2012 by FAO.

If multiple observations from different sampling dates at the same site were reported, we used the average in the analysis. The resulting dataset, solely based on the ingrowth core method, represented 410 observations from 223 publications (supplementary material, References). Our data covered a wide range of ecosystem types, including arctic tundra, forests, and grasslands. Forests were subdivided into boreal, temperate/subtropical, and tropical forests. Boreal forests included all forests occurring between 46°N and 66°N latitude , tropical forests included all forests between 23.5° S and 23.5° N latitude , and temperate/subtropical forests included all forests between the tropical and boreal latitudes. Forest ecosystems were grouped by leaf type (broadleaves vs. coniferous). Grasslands were also subdivided into temperate and tropical grasslands based on a latitudinal threshold of 23.5°N or °S. In light of the widely held belief that lowland and montane tropical forests should respond to N and P differently , we analysed data from lowland and montane tropical forests separately based on the elevation threshold of 800 m . Site elevation ranged from 13 to 4420 m. Mean annual air temperature ranged from –11.6 to 27.1 °C and mean annual precipitation ranged from 122 to 5640 mm.

To examine the response of fine root production to N and P additions, we extracted data from published studies that contained matched N and/or P additions and control treatments. The published studies were searched in the same databases. Fertilization experiments in natural environments were included, but studies conducted in greenhouses were excluded. To avoid possible bias associated with estimation methods, we included studies in which the same method (e.g., ingrowth, max-min or minirhizotron) was used to estimate fine root production in control and treatment sites. We did not include root biomass studies because biomass and production can respond

2 differently to soil nutrients . Measurements from different ecosystem types, nutrient addition levels, and nutrient chemical forms within a single study were considered independent observations. In the meta-analysis, when multiple observations from different sampling dates were reported for a given site, the first observation (generally the first year) was included. The resultant dataset from 69 publications contained 241, 147 and 81 entries for N, P and combined N+P addition experiments, respectively (see Supplementary material, References). Ecosystem and soil types were classified in the same way as in the component of the natural nutrient gradient analysis. All original data were extracted from the text, tables and figures in the published papers. When data were presented graphically, numerical data were obtained by using SigmaScan Pro 5.0 (SPSS, Chicago, IL).

Statistical analysis

To test the response of fine root production to soil nutrients in natural habitats, we conducted a boosted regression tree (BRT) analysis due to its following advantages: 1) BRT, as a tree classification technique, can develop the relative importance for each predictor and produce accurate predictions or predicted classifications based on few logical if-then conditions, with an easy interpretation of results summarized in a simple tree; 2) BRT, as a tree-based method, automatically takes into account interactions among predictors and the non-linearity between the dependent variable and the predictors; consequently it is particularly well suited for data mining tasks where there is little priori knowledge about relationships among variables; 3) BRT is able to deal with multi- dimensionality of predictors and disentangle the effect for each variable; and 4) BRT can accommodate missing values in predictors. In our analysis, we fitted BRT models using 3 as tree complexity, 0.005 as learning rate, and 0.5 as bag fraction. These values are the recommended optimal settings for ecological modelling . BRT was implemented by using the ‘gbm’ and ‘dismo’ libraries in R 2.15.0. The performance of BRT models was assessed by % deviance (variance) in fine root production explained. The influence (or contribution) of each predictor was measured based on the number of times the predictor is selected for splitting, weighted by the squared improvement to the model as a result of each split, and averaged over all trees . Given the limited data, we did not explore interactions among multiple predictors and applied monotonic constraints to continuous predictors . Unlike traditional statistics, BRT does not test the significance of each predictor. To complement BRT, we also analysed the dataset by using regressions and general linear models. To test whether the response of fine root production to N (or P) availability in natural habitats differed among ecosystem types, analysis of covariance (ANCOVA) (package HH 2.1-32 for R) was performed with fine root production as the dependent variable, with soil N (or P), ecosystem type, and ecosystem type by N (or P) interaction as predictors.

3 To examine the effect of nutrient addition on fine root production, we calculated effect sizes from each individual study as described by Hedges et al. . Effect size was calculated as a natural log response ratio: lnRR = ln (Xe/Xc) = ln Xe ‒ ln Xc, where Xe and

Xc were mean fine root production in nutrient addition and control treatments, respectively. The corresponding sampling variance for each lnRR was calculated as 2 2 ln[(1/ne) × (Se/Xe) + (1/nc) × (Sc/Xc) ] in package metafor 1.60 for R , where ne, nc Se, Sc

Xe, and Xc are sample sizes, stand deviations, and means of fine root production for nutrient addition and control treatments, respectively. The average lnRR for all data pooled and each ecosystem type pooled was calculated by using random effect models . The differences in lnRR among ecosystem, soil and leaf types were tested by a mixed effect model by specifying them as fixed factors. Both the random and mixed effect models were tested by weighing the corresponding sampling variance for each lnRR . The effect of nutrient addition on fine root production was considered significant if the 95% CI of RR did not overlap 1.

References

1. Jarvis P.G., Saugier B., Schulze E.D. 2001 Productivity of boreal forests. In Terrestrial Global Productivity (eds. Roy J., Saugier B., Mooney H.A.), pp. 211-244. San Diego, Academic Press. 2. Park C.C. 2003 Tropical rainforests. New York, Routledge. 3. Bruijnzeel L.A., Scatena F.N., Hamilton L.S. 2010 Tropical Montane Cloud Forests: Science for Conservation and Management, Cambridge University Press. 4. Girardin C.A.J., Malhi Y., Aragao L.E.O.C., Mamani M., Huasco W.H., Durand L., Feeley K.J., Rapp J., Silva-Espejo J.E., Silman M., et al. 2010 Net primary productivity allocation and cycling of carbon along a tropical forest elevational transect in the Peruvian Andes. Global Change Biol 16, 3176-3192. 5. Nadelhoffer K.J. 2000 The potential effects of nitrogen deposition on fine-root production in forest ecosystems. New Phytol 147, 131-139. 6. Elith J., Leathwick J.R., Hastie T. 2008 A working guide to boosted regression trees. J Anim Ecol 77, 802-813. 7. De'ath G. 2007 Boosted trees for ecological modeling and prediction. Ecology 88, 243-251. 8. Friedman J.H., Meulman J.J. 2003 Multiple additive regression trees with application in epidemiology. Stat Med 22, 1365-1381. 9. Hedges L.V., Gurevitch J., Curtis P.S. 1999 The meta-analysis of response ratios in experimental ecology. Ecology 80, 1150-1156. 10. Viechtbauer W. 2011 Meta-analysis package 'metafor' (1.60) for R. (

4 Table S1

Results of analysis of covariance (ANCOVA) with fine root production as the dependent variable, soil N (or P) as the covariate, and ecosystem type as the factor

Source df MS F P Model r2

Soil N 1 1.513 19.231 <0.001 0.395 Ecosystem 7 2.265 28.767 <0.001 Soil N×Ecosystem 7 0.653 8.293 <0.001 Residuals 389 0.078

Soil P 1 0.023 0.0031 0.955 0.385 Ecosystem 7 1.519 20.376 <0.001 Soil P×Ecosystem 7 0.166 2.227 0.033 Residuals 214 0.075

5 Table S2

Boosted regression tree (BRT) analysis for all ecosystems showing the influence of ecosystem type, soil type, leaf type (broadleaves vs. coniferous), and soil nutrients on fine root production. BRT was also performed for individual system type except tropical grasslands and wetlands due to limited numbers of observations. The performance of BRT models was assessed by % deviance (variance) in fine root production explained. In the model, predictors with large values in influence indicate more explanatory power. Total: all predictors, All: all ecosystems, BF: boreal forests, TSF: temperate/subtropical forests, lowF: lowland tropical forests, monF: montane tropical forests, tempG: temperate grasslands, TU: tundra.

Ecosystem

Predictor All BF TSF lowF monF tempG TU

Ecosystem type 19.72 / / / / / / Soil type 28.29 14.13 10.76 11.25 16.59 23.17 52.28 Leaf type 0.05 0 0.23 0 0 / / pH 3.24 1.48 1.75 0.58 0 0 0 Organic matter 0.08 0 0 0 0 0 0 Total C 3.07 0.06 1.30 0.02 0 0 0 Total N 9.70 13.19 8.85 0.22 24.23 33.72 0.71 Total P 3.72 2.89 4.45 1.65 0 0 0 Available N 1.41 0 0.07 0 0 0 0 Available P 0.83 0 0 0.05 0 0 0 Total 70.11 31.75 27.41 13.77 40.82 56.89 52.99

6 Table S3

Whole-model r2 and P values in a series of general linear models with increasing numbers of independent variables. We do not perform more complex models due to the limited sample size. The ‘+’ includes the relevant predictors and their interactions.

Model r2 P value

One factor model Ecosystem type (ET) 0.266 <0.001 Soil type (ST) 0.161 <0.001 Leaf type (LT) 0.069 <0.001 Total N 0.018 0.004 Total P 0.011 0.018 pH 0.013 0.013 Organic matter (OM) 0.002 0.183 Total C 0.004 0.120 Available N (AN) 0.005 0.079 Available P (AP) 0.001 0.530 Total N+total P 0.046 <0.001 Total N+total P+ET 0.523 <0.001 Total N+total P+ET+ST 0.710 <0.001 Total N+total P+ET+ST+LT 0.724 <0.001

7 Table S4

General linear model analyses of fine root production in nutrient addition experiments.

Source N addition P addition

F P F P

Nutrient addition rate (N) 176.880 <0.001 6.380 0.013 Ecosystem type (ET) 8.820 <0.001 1.078 0.380 Soil type (ST) 12.970 <0.001 3.447 <0.001 N×ET 14.463 <0.001 0.469 0.830 N×ST 7.132 <0.001 1.023 0.415 ET×ST 0.964 0.485 0.076 0.998 N×ET×LT 5.895 0.017 / / Model r2 0.714 0.390

8 Figure S1

Responses of fine root production to fertilizer addition by nitrogen (N), phosphorus (P) and combined N and P (N+P) based on paired data from the same site, sampling date, fertilization type and rate (n=63, 59 and 36, respectively). The dot with error bars shows the mean response ratio with the 95% confidence interval.

9 Figure S2

Responses of fine root production to nitrogen (N), phosphorus (P) or combined N and P (N+P) additions in different soil types. The numbers out and in parentheses represent response ratio and the number of observations in each soil type, respectively. The dot with error bars shows the mean response ratio with the 95% confidence intervals.

10 Figure S3

Responses of fine root production to nitrogen (N), phosphorus (P) or combined N and P (N+P) additions between leaf types (broadleaves vs. coniferous). The numbers out and in parentheses represent response ratio and the number of observations in each leaf type, respectively. The dot with error bars shows the mean response ratio with the 95% confidence intervals.

11 Supplementary References

Adamek M. 2009 Effects of increased nitrogen input on the net primary production of a tropical lower montane rain foest, Panama, Niedersahsischen Staats-und Universitat sbibliothek Gottingen.

Adamek M., Corre M.D., Holscher D. 2011 Responses of fine roots to experimental nitrogen addition in a tropical lower montane rain forest, Panama. J Trop Ecol 27, 73-81.

Adams C.M., Hutchinson T.C. 1992 Fine-root growth and chemical-composition in declining central Ontario sugar maple stands. Can J For Res 22, 1489-1503.

Ahlstrom K., Persson H., Borjesson I. 1988 Fertilization in a mature scots pine (Pinus sylvestris L.) stand - Effects on fine roots. Plant Soil 106, 179-190.

Albrektson A., Valinger E., Leijon B., Sjogren H., Sonesson J. 2000 Fine root production and nitrogen content in roots of Pinus sylvestris L. after clear-felling. Scand J For Res 15, 188-193.

Allard V., Newton P.C.D., Lieffering M., Soussana J.F., Carran R.A., Matthew C. 2005

Increased quantity and quality of coarse soil organic matter fraction at elevated CO2 in a grazed grassland are a consequence of enhanced root growth rate and turnover. Plant Soil 276, 49-60.

Anderson L.J., Derner J.D., Polley H.W., Gordon W.S., Eissenstat D.M., Jackson R.B.

2010 Root responses along a subambient to elevated CO2 gradient in a C3-C4 grassland. Global Change Biol 16, 454-468.

Anisfeld S. 2008 Understanding the role of nutrient enrichment in marsh loss in Long Island Sound. (

Anisfeld S., Hill T. 2011 Fertilization effects on elevation change and belowground carbon balance in a Long Island Sound Tidal Marsh. Estuaries and Coasts 35, 1-11.

Aragao L.E.O.C., Malhi Y., Metcalfe D.B., Silva-Espejo J.E., Jimenez E., Navarrete D., Almeida S., Costa A.C.L., Salinas N., Phillips O.L., et al. 2009 Above- and below- ground net primary productivity across ten Amazonian forests on contrasting soils. Biogeosciences 6, 2759-2778.

Bader M., Hiltbrunner E., Korner C. 2009 Fine root responses of mature deciduous forest trees to free air carbon dioxide enrichment (FACE). Funct Ecol 23, 913-921.

12 Bagchi S., Ritchie M.E. 2010 Herbivore effects on above- and belowground plant production and soil nitrogen availability in the Trans-Himalayan shrub-steppes. Oecologia 164, 1075-1082.

Bai W.M., Wang Z.W., Chen Q.S., Zhang W.H., Li L.H. 2008 Spatial and temporal effects of nitrogen addition on root life span of Leymus chinensis in a typical steppe of Inner Mongolia. Funct Ecol 22, 583-591.

Baker T.T., Conner W.H., Lockaby B.G., Stanturf J.A., Burke M.K. 2001 Fine root productivity and dynamics on a forested floodplain in South Carolina. Soil Sci Soc Am J 65, 545-556.

Baker T.T., III. 1998 Fine root dynamics on a forested floodplain and litter decomposition in four forested floodplain communities in the southern United States, Auburn University.

Barger N.N., D'Antonio C.M., Ghneim T., Brink K., Cuevas E. 2002 Nutrient limitation to primary productivity in a secondary savanna in Venezuela. Biotropica 34, 493- 501.

Barger N.N., D'Antonio C.M., Ghneim T., Cuevas E. 2003 Constraints to colonization and growth of the African grass, Melinis minutiflora, in a Venezuelan savanna. Plant Ecol 167, 31-43.

Bauhus J. 2009 Rooting patterns of old-growth forests: Is aboveground structural and functional diversity mirrored belowground? In Old-Growth Forests (eds. Wirth C., Gleixner G., Heimann M., Heldmaier G., Jackson R.B., Lange O.L., Mooney H.A., Schulze E.D., Sommer U.), pp. 211-229, Springer Berlin Heidelberg.

Bauhus J., Bartsch N. 1996 Fine-root growth in beech (Fagus sylvatica) forest gaps. Can J For Res 26, 2153-2159.

Bauhus J., Messier C. 1999 Soil exploitation strategies of fine roots in different tree species of the southern boreal forest of eastern Canada. Can J For Res 29, 260-273.

Bessler H., Temperton V.M., Roscher C., Buchmann N., Schmid B., Schulze E.D., Weisser W.W., Engels C. 2009 Aboveground overyielding in grassland mixtures is associated with reduced biomass partitioning to belowground organs. Ecology 90, 1520-1530.

Blair B.C., Perfecto I. 2008 Root proliferation and nutrient limitations in a Nicaraguan rain forest. Caribb J Sci 44, 36-42.

13 Blue J.D., Souza L., Classen A.T., Schweitzer J.A., Sanders N.J. 2011 The variable effects of soil nitrogen availability and insect herbivory on aboveground and belowground plant biomass in an old-field ecosystem. Oecologia 167, 771-780.

Bouma T.J., Hengst K., Koutstaal B.P., van Soelen J. 2002 Estimating root lifespan of two grasses at contrasting elevation in a salt marsh by applying vitality staining on roots from in-growth cores. Plant Ecol 165, 235-245.

Bowman W.D., Schardt J.C., Schmidt S.K. 1996 Symbiotic N2-fixation in alpine tundra: Ecosystem input and variation in fixation rates among communities. Oecologia 108, 345-350.

Boxman A.W., Blanck K., Brandrud T.E., Emmett B.A., Gundersen P., Hogervorst R.F., Kjonaas O.J., Persson H., Timmermann V. 1998 Vegetation and soil biota response to experimentally-changed nitrogen inputs in coniferous forest ecosystems of the NITREX project. For Ecol Manag 101, 65-79.

Boyd C.S., Svejcar T.J. 2009 A Technique for estimating riparian root production. Rangeland Ecol Manage 62, 198-202.

Brassard B.W., Chen H.Y.H., Bergeron Y., Pare D. 2011 Differences in fine root productivity between mixed- and single-species stands. Funct Ecol 25, 238-246.

Brunner I., Pannatier E.G., Frey B., Rigling A., Landolt W., Zimmermann S., Dobbertin M. 2009 Morphological and physiological responses of Scots pine fine roots to water supply in a dry climatic region in Switzerland. Tree Physiol 29, 541-550.

Camill P., McKone M.J., Sturges S.T., Severud W.J., Ellis E., Limmer J., Martin C.B., Navratil R.T., Purdie A.J., Sandel B.S., et al. 2004 Community- and ecosystem-level changes in a species-rich tallgrass prairie restoration. Ecol Appl 14, 1680-1694.

Campbell J.J., Finer L., Messier C. 1998 Fine-root production in small experimental gaps in successional mixed boreal forests. J Veg Sci 9, 537-542.

Campbell J.J., Messier C., BauhuS J. 2002 Does soil heterogeneity and compaction in ingrowth-cores affect growth and morphology of black spruce fine-roots? Commun Soil Sci Plant Anal 33, 1027-1037.

Campioli M., Michelsen A., Demey A., Vermeulen A., Samson R., Lemeur R. 2009 Net primary production and carbon stocks for subarctic mesic-dry tundras with contrasting microtopography, altitude, and dominant species. Ecosystems 12, 760- 776.

Carnol M., Cudlin P., Ineson P. 1999 Impacts of (NH4)2SO4 deposition on Norway spruce (Picea abies [L.] Karst) roots. Water Air Soil Pollut 116, 111-120.

14 Cavelier J., Wright S.J., Santamaria J. 1999 Effects of irrigation on litterfall, fine root biomass and production in a semideciduous lowland forest in Panama. Plant Soil 211, 207-213.

Chen X.Y., Eamus D., Hutley L.B. 2004 Seasonal patterns of fine-root productivity and turnover in a tropical savanna of northern Australia. J Trop Ecol 20, 221-224.

Chen X.Y., Hutley L.B., Eamus D. 2003 Carbon balance of a tropical savanna of northern Australia. Oecologia 137, 405-416.

Chen Y.X., Lee P., Lee G., Mariko S., Oikawa T. 2006 Simulating root responses to grazing of a Mongolian grassland ecosystem. Plant Ecol 183, 265-275.

Cheng X., Bledsoe C.S. 2002 Seasonal and site effects on oak fine root production and ectomycorrhizal colonization in California oak woodland. USDA Forest Service General Technical Report 184, 106-115.

Cheng X.M., Bledsoe C.S. 2002 Contrasting seasonal patterns of fine root production for blue oaks (Quercus douglasii) and annual grasses in California oak woodland. Plant Soil 240, 263-274.

Chimner R.A., Ewel K.C. 2004 Differences in carbon fluxes between forested and cultivated micronesian tropical peatlands. Wetl Ecol Manag 12, 419-427.

Clawson R.G., Lockaby B.G., Rummer B. 2001 Changes in production and nutrient cycling across a wetness gradient within a floodplain forest. Ecosystems 4, 126-138.

Clemenssonlindell A., Persson H. 1995 The effects of nitrogen addition and removal on Norway spruce fine-root vitality and distribution in three catchment areas at Gardsjon. For Ecol Manag 71, 123-131.

Clemmensen K.E., Michelsen A., Jonasson S., Shaver G.R. 2006 Increased ectomycorrhizal fungal abundance after long-term fertilization and warming of two arctic tundra ecosystems. New Phytol 171, 391-404.

Cleveland C.C., Townsend A.R. 2006 Nutrient additions to a tropical rain forest drive substantial soil carbon dioxide losses to the atmosphere. Proc Natl Acad Sci U S A 103, 10316-10321.

Clough K.S., Everett S.B., Best G.R. 1990 Wetland macrophyte production and hydrodynamics in Hopkins Prairie, Ocala National Forest, Florida.

Coleman M.D., Friend A.L., Kern C.C. 2004 Carbon allocation and nitrogen acquisition in a developing Populus deltoides plantation. Tree Physiol 24, 1347-1357.

15 Coles J.R.P., Yavitt J.B. 2004 Linking belowground carbon allocation to anaerobic CH4

and CO2 production in a forested peatland, New York state. Geomicrobiol J 21, 445- 455.

Cotrufo M.F., Alberti G., Inglima I., Marjanovic H., LeCain D., Zaldei A., Peressotti A., Miglietta F. 2011 Decreased summer drought affects plant productivity and soil carbon dynamics in a Mediterranean woodland. Biogeosciences 8, 2729-2739.

Craine J.M., Morrow C., Stock W.D. 2008 Nutrient concentration ratios and co-limitation in South African grasslands. New Phytol 179, 829-836.

Cudlin P., Chmelikova E. 1996 Degradation and restoration processes in crowns and fine roots of polluted montane Norway spruce ecosystems. Phyton-Annales Rei Botanicae 36, 69-76.

Cuevas E., Brown S., Lugo A.E. 1991 Aboveground and belowground organic-matter storage and production in a tropical pine plantation and a paired broadleaf secondary forest. Plant Soil 135, 257-268.

Cuevas E., Medina E. 1988 Nutrient dynamics within Amazonian forests .II. Fine root- growth, nutrient availability and leaf litter decomposition. Oecologia 76, 222-235.

Cusack D.F., Silver W.L., Torn M.S., McDowell W.H. 2011 Effects of nitrogen additions on above- and belowground carbon dynamics in two tropical forests. Biogeochemistry 104, 203-225.

D'Antonio C.M., Mack M.C. 2006 Nutrient limitation in a fire-derived, nitrogen-rich Hawaiian grassland. Biotropica 38, 458-467.

Davis M.R., Allen R.B., Clinton P.W. 2004 The influence of N addition on nutrient content, leaf carbon isotope ratio, and productivity in a Nothofagus forest during stand development. Can J For Res 34, 2037-2048.

De Wit H.A., Mulder J., Nygaard P.H., Aamlid D. 2001 Testing the aluminium toxicity hypothesis: A field manipulation experiment in mature spruce forest in Norway. Water Air Soil Pollut 130, 995-1000.

Dilly O., Blume H.P., Kappen L., Kutsch W.L., Middelhoff U., Wotzel J., Buscot F., Dittert K., Bach H.J., Mogge B., et al. 1999 Microbial processes and features of the microbiota in histosols from a black alder (Alnus glutinosa (L.) Gaertn.) forest. Geomicrobiol J 16, 65-78.

Dilustro J.J., Collins B., Duncan L., Crawford C. 2005 Moisture and soil texture effects

on soil CO2 efflux components in southeastern mixed pine forests. For Ecol Manag 204, 85-95.

16 Doll J.E., Brink G.E., Cates R.L., Jackson R.D. 2009 Effects of native grass restoration management on above- and belowground pasture production and forage quality. J Sustainable Agric 33, 512-527.

Dress W.J., Boerner R.E.J. 2001 Root dynamics of southern Ohio oak-hickory forests: influences of prescribed fire and landscape position. Can J For Res 31, 644-653.

Dress W.J., Boerner R.E.J. 2003 Temporal and spatial patterns in root nitrogen concentration and root decomposition in relation to prescribed fire. Am Midl Nat 149, 245-257.

Easter S. 2010 Current precipitation controls of belowground net primary productivity in a semi-arid ecosystem, Brown University.

Edwards K.R., Mills K.P. 2005 Aboveground and belowground productivity of Spartina alterniflora (smooth cordgrass) in natural and created Louisiana salt marshes. Estuaries 28, 252-265.

Eldhuset T.D., Lange H., De Wit H.A. 2006 Fine root biomass, necromass and chemistry during seven years of elevated aluminium concentrations in the soil solution of a middle-aged Picea abies stand. Sci Total Environ 369, 344-356.

Emmerich S., Losch L., Lieberei R. 2000 Root responses of four tropical useful trees to localized soil enrichment. (p. 31.

Epron D., Farque L., Lucot E., Badot P.M. 1999 Soil CO2 efflux in a beech forest: the contribution of root respiration. Ann For Sci 56, 289-295.

Fahey T.J., Hughes J.W. 1994 Fine-root dynamics in a northern hardwood forest ecosystem, Hubbard Brook Experimental Forest, NH. J Ecol 82, 533-548.

Fan W., Meng R., Chen Q.S. 2010 Effects of nitrogen additions on ground/underground biomass allocation of Stipa krylovii community. Animal Husbandry and Feed Science 31, 74-75.

Fiala K., Tuma I., Holub P. 2009 Effect of manipulated rainfall on root production and plant belowground dry mass of different grassland ecosystems. Ecosystems 12, 906- 914.

Finer L., Laine J. 2000 The ingrowth bag method in measuring root production on peatland sites. Scand J For Res 15, 75-80.

Finér L., Messier C., DeGrandpre L. 1997 Fine-root dynamics in mixed boreal conifer- broad-leafed forest stands at different successional stages after fire. Can J For Res 27, 304-314.

17 Fisk M.C., Schmidt S.K., Seastedt T.R. 1998 Topographic patterns of above- and belowground production and nitrogen cycling in Alpine tundra. Ecology 79, 2253- 2266.

Fujimaki R., McGonigle T.P., Takeda H. 2004 Soil micro-habitat effects on fine roots of Chamaecyparis obtusa Endl.: A field experiment using root ingrowth cores. Plant Soil 266, 325-332.

Gao Y.Z., Chen Q., Lin S., Giese M., Brueck H. 2011 Resource manipulation effects on net primary production, biomass allocation and rain-use efficiency of two semiarid grassland sites in Inner Mongolia, China. Oecologia 165, 855-864.

Gao Y.Z., Giese M., Lin S., Sattelmacher B., Zhao Y., Brueck H. 2008 Belowground net primary productivity and biomass allocation of a grassland in Inner Mongolia is affected by grazing intensity. Plant Soil 307, 41-50.

Garcia-Pausas J., Casals P., Romanya J., Vallecillo S., Sebastia M.T. 2011 Seasonal patterns of belowground biomass and productivity in mountain grasslands in the Pyrenees. Plant Soil 340, 315-326.

Genenger M., Zimmermann S., Hallenbarter D., Landolt W., Frossard E., Brunner I. 2003 Fine root growth and element concentrations of Norway spruce as affected by wood ash and liquid fertilisation. Plant Soil 255, 253-264.

Girardin C.A.J., Malhi Y., Aragao L.E.O.C., Mamani M., Huasco W.H., Durand L., Feeley K.J., Rapp J., Silva-Espejo J.E., Silman M., et al. 2010 Net primary productivity allocation and cycling of carbon along a tropical forest elevational transect in the Peruvian Andes. Global Change Biol 16, 3176-3192.

Gleason S.M., Ewel K.C. 2002 Organic matter dynamics on the forest floor of a Micronesian mangrove forest: An investigation of species composition shifts. Biotropica 34, 190-198.

Gleeson S.K., Good R.E. 2010 Root growth response to water and nutrients in the New Jersey Pinelands. Can J For Res 40, 167-172.

Godbold D.L., Fritz H.W., Jentschke G., Meesenburg H., Rademacher P. 2003 Root turnover and root necromass accumulation of Norway spruce (Picea abies) are affected by soil acidity. Tree Physiol 23, 915-921.

Gomez M.M., Day F.P. 1982 Litter nutrient content and production in the great dismal swamp. Am J Bot 69, 1314-1321.

Gower S.T., Vitousek P.M. 1989 Effects of nutrient amendments on fine root biomass in a primary successional forest in Hawaii. Oecologia 81, 566-568.

18 Graefe S., Hertel D., Leuschner C. 2010 N, P and K limitation of fine root growth along an elevation transect in tropical mountain forests. Acta Oecol 36, 537-542.

Gurwick N.P. 2011 Root-supplied carbon in surface and subsurface soils of forested riparian zones in New England. (

Handa I.T., Hagedorn F., Hattenschwiler S. 2008 No stimulation in root production in

response to 4 years of in situ CO2 enrichment at the Swiss treeline. Funct Ecol 22, 348-358.

Hansson A.C., Andren O. 1986 Belowground plant-production in a perennial grass ley (Festuca pratensis Huds) assessed with different methods. J Appl Ecol 23, 657-666.

Harmon M.E., Bible K., Ryan M.G., Shaw D.C., Chen H., Klopatek J., Li X. 2004 Production, respiration, and overall carbon balance in an old-growth Pseudotsuga tsuga forest ecosystem. Ecosystems 7, 498-512.

Harteveld M., Hertel D., Wiens M., Leuschner C. 2007 Spatial and temporal variability of fine root abundance and growth in tropical moist forests and agroforestry systems (Sulawesi, Indonesia). Ecotropica 13, 111-120.

Harteveld M.A. 2007 The impact of forest disturbance on the fine root system of a tropical forest on Sulawesi, Indonesia.

Haugwitz M.S., Michelsen A., Schmidt I.K. 2011 Long-term microbial control of nutrient availability and plant biomass in a subarctic-alpine heath after addition of carbon, fertilizer and fungicide. Soil Biol Biochem 43, 179-187.

He Z., Piceno Y., Deng Y., Xu M., Lu Z., DeSantis T., Andersen G., Hobbie S.E., Reich P.B., Zhou J. 2011 The phylogenetic composition and structure of soil microbial communities shifts in response to elevated carbon dioxide. ISME J.

Hebeisen T., Luscher A., Zanetti S., Fischer B.U., Hartwig U.A., Frehner M., Hendrey G.R., Blum H., Nosberger J. 1997 Growth response of Trifolium repens L. and

Lolium perenne L. as monocultures and bi-species mixture to free air CO2 enrichment and management. Global Change Biol 3, 149-160.

Helmisaari H., Hallb?cken L. 1998 Tree biomass below-ground. In Nutrition and growth of Norway spruce forests in a Nordic climatic and deposition gradient, TemaNord Series (eds. Andersson F., Braekke F.H., Hallbacken L.), pp. 80–90.

Helmisaari H.S., Hallbacken L. 1999 Fine-root biomass and necromass in limed and fertilized Norway spruce (Picea abies (L.) Karst.) stands. For Ecol Manag 119, 99- 110.

19 Helmisaari H.S., Makkonen K., Olsson M., Viksna A., Malkonen E. 1999 Fine-root growth, mortality and heavy metal concentrations in limed and fertilized Pinus silvestris (L.) stands in the vicinity of a Cu-Ni smelter in SW Finland. Plant Soil 209, 193-200.

Hendricks J.J., Hendrick R.L., Wilson C.A., Mitchell R.J., Pecot S.D., Guo D.L. 2006 Assessing the patterns and controls of fine root dynamics: An empirical test and methodological review. J Ecol 94, 40-57.

Herbert D.A., Fownes J.H., Vitousek P.M. 1999 Hurricane damage to a Hawaiian forest: Nutrient supply rate affects resistance and resilience. Ecology 80, 908-920.

Hertel D., Harteveld M.A., Leuschner C. 2009 Conversion of a tropical forest into agroforest alters the fine root-related carbon flux to the soil. Soil Biol Biochem 41, 481-490.

Hertel D., Leuschner C. 2002 A comparison of four different fine root production estimates with ecosystem carbon balance data in a Fagus quercus mixed forest (vol 239, pg 237, 2002). Plant Soil 245, 335-335.

Hertel D., Moser G., Culmsee H., Erasmi S., Horna V., Schuldt B., Leuschner C. 2009 Below- and above-ground biomass and net primary production in a paleotropical natural forest (Sulawesi, Indonesia) as compared to neotropical forests. For Ecol Manag 258, 1904-1912.

Higgins P.A.T., Jackson R.B., Des Rosiers J.M., Field C.B. 2002 Root production and demography in a california annual grassland under elevated atmospheric carbon dioxide. Global Change Biol 8, 841-850.

Hishi T., Takeda H. 2005 Life cycles of individual roots in fine root system of Chamaecyparis obtusa Sieb. et Zucc. J For Res 10, 181-187.

Hishi T., Takeda H. 2008 Soil microarthropods alter the growth and morphology of fungi and fine roots of Chamaecyparis obtusa. Pedobiologia 52, 97-110.

Hishi T., Tateno R., Takeda H. 2006 Anatomical characteristics of individual roots within the fine-root architecture of Chamaecyparis obtusa (Sieb. & Zucc.) in organic and mineral soil layers. Ecol Res 21, 754-758.

Holm G.O. 2006 Nutrient constraints on plant community production and organic matter accumulation of subtropical floating marshes.

Howard E.A., Gower S.T., Foley J.A., Kucharik C.J. 2004 Effects of logging on carbon dynamics of a jack pine forest in Saskatchewan, Canada. Global Change Biol 10, 1267-1284.

20 Idol T.W., Pope P.E., Ponder F. 2000 Fine root dynamics across a chronosequence of upland temperate deciduous forests. For Ecol Manag 127, 153-167.

Inagaki M., Inagaki Y., Kamo K., Titin J. 2009 Fine-root production in response to nutrient application at three forest plantations in Sabah, Malaysia: higher nitrogen and phosphorus demand by Acacia mangium. J For Res 14, 178-182.

Iversen C.M., Norby R.J. 2008 Nitrogen limitation in a sweetgum plantation: implications for carbon allocation and storage. Can J For Res 38, 1021-1032.

Janssens I.A., Sampson D.A., Curiel-Yuste J., Carrara A., Ceulemans R. 2002 The carbon cost of fine root turnover in a Scots pine forest. For Ecol Manag 168, 231- 240.

Jastrow J.D., Miller R.M., Owensby C.E. 2000 Long-term effects of elevated

atmospheric CO2 on below-ground biomass and transformations to soil organic matter in grassland. Plant Soil 224, 85-97.

Jentschke G., Drexhage M., Fritz H.W., Fritz E., Schella B., Lee D.H., Gruber F., Heimann J., Kuhr M., Schmidt J., et al. 2001 Does soil acidity reduce subsoil rooting in Norway spruce (Picea abies)? Plant Soil 237, 91-108.

Jimenez E.M., Moreno F.H., Penuela M.C., Patino S., Lloyd J. 2009 Fine root dynamics for forests on contrasting soils in the Colombian Amazon. Biogeosciences 6, 2809- 2827.

Johansson M. 2000 The influence of ammonium nitrate on the root growth and ericoid mycorrhizal colonization of Calluna vulgaris (L.) Hull from a Danish heathland. Oecologia 123, 418-424.

Johnson L.C., Matchett J.R. 2001 Fire and grazing regulate belowground processes in tallgrass prairie. Ecology 82, 3377-3389.

Jones R.H., Mitchell R.J., Stevens G.N., Pecot S.D. 2003 Controls of fine root dynamics across a gradient of gap sizes in a pine woodland. Oecologia 134, 132-143.

Jongen M., Jones M.B., Hebeisen T., Blum H., Hendrey G. 1995 The effects of elevated CO2 concentrations on the root-growth of Lolium perenne and Trifolium repens grown in a face system. Global Change Biol 1, 361-371.

Jordan C.F., Escalante G. 1980 Root productivity in an Amazonian rain forest. Ecology 61, 14-18.

Joslin J.D., Henderson G.S. 1987 Organic-matter and nutrients associated with fine root turnover in a white oak stand. For Sci 33, 330-346.

21 Jourdan C., Silva E.V., Goncalves J.L.M., Ranger J., Moreira R.M., Laclau J.P. 2008 Fine root production and turnover in Brazilian Eucalyptus plantations under contrasting nitrogen fertilization regimes. For Ecol Manag 256, 396-404.

Kang B.W., Liu J.J., Hou L., Li S.G. 2006 Effects of grazing-blockade by fencing on the biomass in Stipa krylovii steppe of Mongolia. Acta Botany Boreal-Occident Sinica 26, 2540-2546.

Kangas P. 1992 Root regrowth in a subtropical wet forest in Puerto Rico. Biotropica 24, 463-465.

Kaplova M., Edwards K.R., Kvet J. 2011 The effect of nutrient level on plant structure and production in a wet grassland: A field study. Plant Ecol 212, 809-819.

Kasurinen A., Helmisaari H.S., Holopainen T. 1999 The influence of elevated CO2 and

O3 on fine roots and mycorrhizas of naturally growing young Scots pine trees during three exposure years. Global Change Biol 5, 771-780.

Kasuya N. 1998 Estimation of fine root production in coniferous forests in Japan. Jarq- Japan Agricultural Research Quarterly 32, 197-202.

Kiley D.K., Schneider R.L. 2005 Riparian roots through time, space and disturbance. Plant Soil 269, 259-272.

Kishchuk B. 1991 Effects of fertilization on roots of sugar maple (Acer saccharum Marzsh.).

Kleja D.B., Svensson M., Majdi H., Jansson P.E., Langvall O., Bergkvist B., Johansson M.B., Weslien P., Truusb L., Lindroth A., et al. 2008 Pools and fluxes of carbon in three Norway spruce ecosystems along a climatic gradient in Sweden. Biogeochemistry 89, 7-25.

Klopatek J.M. 2002 Belowground carbon pools and processes in different age stands of Douglas-fir. Tree Physiol 22, 197-204.

Klopatek J.M. 2007 Litterfall and fine root biomass contribution to nutrient dynamics in second- and old-growth Douglas-fir ecosystems. Plant Soil 294, 157-167.

Kolb A., Alpert P., Enters D., Holzapfel C. 2002 Patterns of invasion within a grassland community. J Ecol 90, 871-881.

Konopka B. 2009 Differences in fine root traits between Norway spruce (Picea abies [L.] Karst.) and European beech (Fagus sylvatica L.)- A case study in the Kysuck. Journal of Forest Science 55, 556-566.

22 Konopka B., Lukac M. 2010 Fine root condition relates to visible crown damage in Norway spruce in acidified soils. For Pathol 40, 47-57.

Konopka B., Noguchi K., Sakata T., Takahashi M., Konopkova Z. 2007 Effects of simulated drought stress on the fine roots of Japanese cedar (Cryptomeria japonica) in a plantation forest on the Kanto Plain, eastern Japan. J For Res 12, 143-151.

Konopka B., Tsukahara H. 2001 Production and vertical distribution of fine and small roots in Japanese black pine on sandy soil. Journal of Forest Science 47, 277-284.

Korner C. 2003 Alpine plant life: functional plant ecology of high mountain ecosystems, Springer Verlag; 1-344 p.

Langley J.A., Dijkstra P., Drake B.G., Hungate B.A. 2003 Ectomycorrhizal colonization, biomass, and production in a regenerating scrub oak forest in response to elevated

CO2. Ecosystems 6, 424-430.

Langley J.A., McKee K.L., Cahoon D.R., Cherry J.A., Megonigal J.P. 2009 Elevated

CO2 stimulates marsh elevation gain, counterbalancing sea-level rise. Proc Natl Acad Sci U S A 106, 6182-6186.

Langley J.A., Megonigal J.P. 2010 Ecosystem response to elevated CO2 levels limited by nitrogen-induced plant species shift. Nature 466, 96-99.

Le Goff N., Ottorini J.M. 2001 Root biomass and biomass increment in a beech (Fagus sylvatica L.) stand in North-East France. Ann For Sci 58, 1-13.

Lee K.H., Jose S. 2003 Soil respiration, fine root production, and microbial biomass in cottonwood and loblolly pine plantations along a nitrogen fertilization gradient. For Ecol Manag 185, 263-273.

Leuschner C., Harteveld M., Hertel D. 2009 Consequences of increasing forest use intensity for biomass, morphology and growth of fine roots in a tropical moist forest on Sulawesi, Indonesia. Agric Ecosyst Environ 129, 474-481.

Li C.P., Sun O.J., Xiao C.W., Han X.G. 2009 Differences in net primary productivity among contrasting habitats in Artemisia ordosica rangeland of northern China. Rangeland Ecol Manage 62, 345-350.

Li J.Z., Lin S., Taube F., Pan Q.M., Dittert K. 2011 Above and belowground net primary productivity of grassland influenced by supplemental water and nitrogen in Inner Mongolia. Plant Soil 340, 253-264.

Li L.H., Lin P., Xing X.R. 1998 Fine root biomass and production of Castanopsis eyrei forests in Wuyi Mountains. Chinese Journal of Applied Ecology 9, 337-340.

23 Li Y.Q., Xu M., Zou X.M. 2006 Effects of nutrient additions on ecosystem carbon cycle in a Puerto Rican tropical wet forest. Global Change Biol 12, 284-293.

Lima M., Harrington R., Saldana S., Estay S. 2008 Non-linear feedback processes and a latitudinal gradient in the climatic effects determine green spruce aphid outbreaks in the UK. Oikos 117, 951-959.

Lima T.T.S., Miranda I.S., Vasconcelos S.S. 2010 Effects of water and nutrient availability on fine root growth in eastern Amazonian forest regrowth, Brazil. New Phytol 187, 622-630.

Liu J.J., Turano T., Mariko S., Oikawa T. 2005 Influence of grazing pressures on belowground productivity and biomass in Mongolia steppe. Acta Botanica Brasilica 25, 88-93.

Liu J.L., Mei L., Gu J.C., Quan X.K., Wang Z.Q. 2009 Effects of nitrogen fertilization on fine root biomass and morphology of Fraxinus mandshurica and Larix gmelinii: A study with in-growth core approach. Chinese Journal of Ecology 28, 1-6.

Lu X.K., Mo J.M., Gilliam F.S., Zhou G.Y., Fang Y.T. 2010 Effects of experimental nitrogen additions on plant diversity in an old-growth tropical forest. Global Change Biol 16, 2688-2700.

Lukac M., Calfapietra C., Godbold D. 2001 Root production and turnover in Populus

grown under elevated CO2 using a free air enrichment system POPFACE. In Plant Nutrition-Food security and sustainability of agro-ecosystems (ed. Horst W.J.), pp. 688-689, Springer.

Lukac M., Godbold D.L. 2010 Fine root biomass and turnover in southern taiga estimated by root inclusion nets. Plant Soil 331, 505-513.

Maher R.M., Asbjornsen H., Kolka R.K., Cambardella C.A., Raich J.W. 2010 Changes in soil respiration across a chronosequence of tallgrass prairie reconstructions. Agric Ecosyst Environ 139, 749-753.

Maire V., Gross N., Pontes L.D.S., Picon-Cochard C., Soussana J.F. 2009 Trade-off between root nitrogen acquisition and shoot nitrogen utilization across 13 co- occurring pasture grass species. Funct Ecol 23, 668-679.

Makkonen K., Helmisaari H.S. 1999 Assessing fine-root biomass and production in a Scots pine stand - Comparison of soil core and root ingrowth core methods. Plant Soil 210, 43-50.

24 Malkonen E., Derome J., Fritze H., Helmisaari H.S., Kukkola M., Kyto M., Saarsalmi A., Salemaa M. 1999 Compensatory fertilization of Scots pine stands polluted by heavy metals. Nutr Cycl Agroecosyst 55, 239-268.

Malo C. 2011 Impact of primary and secondary machinery tracks on fine root growth of sugar maple after selection cutting. Can J For Res 41, 892-897.

Marchesini L.B., Papale D., Reichstein M., Vuichard N., Tchebakova N., Valentini R. 2007 Carbon balance assessment of a natural steppe of southern Siberia by multiple constraint approach. Biogeosciences 4, 581-595.

Matzner E., Murach D., Fortmann H. 1986 Soil acidity and its relationship to root growth in declining forest stands in Germany. Water Air Soil Pollut 31, 273-282.

Maurer D.A., Zedler J.B. 2002 Differential invasion of a wetland grass explained by tests of nutrients and light availability on establishment and clonal growth. Oecologia 131, 279-288.

McCulley R.L., Burke I.C., Lauenroth W.K. 2009 Conservation of nitrogen increases with precipitation across a major grassland gradient in the Central Great Plains of North America. Oecologia 159, 571-581.

McGinty D.T. 1976 Comparative root and soil dynamics on a white pine watershed and in the hardwood forest in the Coweeta Basin, University of Georgia, Athens, GA.

McGroddy M.E., Silver W.L., de Oliveira R.C., de Mello W.Z., Keller M. 2008 Retention of phosphorus in highly weathered soils under a lowland Amazonian forest ecosystem. Journal of Geophysical Research-Biogeosciences 113.

Megonigal J.P., Day F.P. 1988 Organic-matter dynamics in 4 seasonally flooded forest communities of the Dismal Swamp. Am J Bot 75, 1334-1343.

Mei L., Wang Z.Q., Zhang X.J., Yu L.Z., Du Y. 2008 Effects of nitrogen fertilization on fine root biomass production and turnover of Fraxinus mandshurica plantation. Chinese Journal of Ecology 27, 1663-1668.

Meier I.C., Leuschner C. 2008 Belowground drought response of European beech: fine root biomass and carbon partitioning in 14 mature stands across a precipitation gradient. Global Change Biol 14, 2081-2095.

Meinen C., Hertel D., Leuschner C. 2009 Root growth and recovery in temperate broad- Leaved forest stands differing in tree species diversity. Ecosystems 12, 1103-1116.

Metcalfe D.B., Meir P., Aragao L.E.O.C., da Costa A.C.L., Braga A.P., Goncalves P.H.L., Silva J.D., de Almeida S.S., Dawson L.A., Malhi Y., et al. 2008 The effects

25 of water availability on root growth and morphology in an Amazon rainforest. Plant Soil 311, 189-199.

Metcalfe D.B., Meir P., Williams M. 2007 A comparison of methods for converting rhizotron root length measurements into estimates of root mass production per unit ground area. Plant Soil 301, 279-288.

Milchunas D.G. 2009 Estimating root production: Comparison of 11 Methods in shortgrass steppe and review of biases. Ecosystems 12, 1381-1402.

Milchunas D.G., Morgan J.A., Mosier A.R., Lecain D.R. 2005 Root dynamics and

demography in shortgrass steppe under elevated CO2 , and comments on minirhizotron methodology. Global Change Biol 11, 1837-1855.

Milchunas D.G., Mosier A.R., Morgan J.A., Lecain D.R., King J.Y., Nelson J.A. 2005

Root production and tissue quality in a shortgrass steppe exposed to elevated CO2: Using a new ingrowth method. Plant Soil 268, 111-122.

Mo J., Zhang W., Zhu W., Gundersen P., Fang Y., Li D., Wang H. 2008 Nitrogen addition reduces soil respiration in a mature tropical forest in southern China. Global Change Biol 14, 403-412.

Montane F., Romanya J., Rovira P., Casals P. 2010 Aboveground litter quality changes may drive soil organic carbon increase after shrub encroachment into mountain grasslands. Plant Soil 337, 151-165.

Moser G., Leuschner C., Roderstein M., Graefe S., Soethe N., Hertel D. 2010 Biomass and productivity of fine and coarse roots in five tropical mountain forests stands along an altitudinal transect in southern Ecuador. Plant Ecology & Diversity 3, 151- 164.

Mundell T.L., Landhausser S.M., Lieffers V.J. 2008 Root carbohydrates and aspen regeneration in relation to season of harvest and machine traffic. For Ecol Manag 255, 68-74.

Murphy M., Laiho R., Moore T.R. 2009 Effects of water table drawdown on root production and aboveground biomass in a boreal bog. Ecosystems 12, 1268-1282.

Murphy M.T., Moore T.R. 2010 Linking root production to aboveground plant characteristics and water table in a temperate bog. Plant Soil 336, 219-231.

Nadelhoffer K.J., Johnson L., Laundre J., Giblin A.E., Shaver G.R. 2002 Fine root production and nutrient content in wet and moist arctic tundras as influenced by chronic fertilization. Plant Soil 242, 107-113.

26 Neill C. 1992 Comparison of soil coring and ingrowth methods for measuring belowground production. Ecology 73, 1918-1921.

Neill C. 1994 Primary production and management of seasonally flooded prairie marshes harvested for wild hay. Can J Bot 72, 801-807.

Niklaus P.A., Leadley P.W., Schmid B., Korner C. 2001 A long-term field study on

biodiversity x elevated CO2 interactions in grassland. Ecol Monogr 71, 341-356.

Nikolova P.S., Andersen C.P., Blaschke H., Matyssek R., Haberle K.H. 2010 Belowground effects of enhanced tropospheric ozone and drought in a beech/spruce forest (Fagus sylvatica L./Picea abies [L.] Karst). Environ Pollut 158, 1071-1078.

Nygaard P.H., De Wit H.A. 2004 Effects of elevated soil solution Al concentrations on fine roots in a middle-aged Norway spruce (Picea abies (L.) Karst.) stand. Plant Soil 265, 131-140.

Olff H., Vanandel J., Bakker J.P. 1990 Biomass and shoot root allocation of 5 species from a grassland succession series at different combinations of light and nutrient supply. Funct Ecol 4, 193-200.

Ostertag R. 1998 Belowground effects of canopy gaps in a tropical wet forest. Ecology 79, 1294-1304.

Ostertag R. 2001 Effects of nitrogen and phosphorus availability on fine-root dynamics in Hawaiian montane forests. Ecology 82, 485-499.

Ostonen I., Lohmus K., Pajuste K. 2005 Fine root biomass, production and its proportion of NPP in a fertile middle-aged Norway spruce forest: Comparison of soil core and ingrowth core methods. For Ecol Manag 212, 264-277.

Owensby C.E., Auen L.M., Coyne P.I. 1994 Biomass production in a tallgrass prairie

ecosystem exposed to ambient and elevated CO2. Plant Soil 165, 105-113.

Owensby C.E., Coyne P.I., Ham J.M., Auen L.M., Knapp A.K. 1993 Biomass production

in a tallgrass prairie ecosystem exposed to ambient and elevated CO2. Ecol Appl 3, 644-653.

Owensby C.E., Ham J.M., Knapp A.K., Bremer D., Auen L.M. 1997 Water vapour fluxes

and their impact under elevated CO2 in a C4 tallgrass prairie. Global Change Biol 3, 189-195.

Pan Q.M., Bai Y.F., Han X.G., Yang J.C. 2005 Effects of nitrogen addition on a Leymus chinensis population in typical steppe of Inner Mongolia. Acta Phytoecol Sin 29, 311-317.

27 Pandey C.B., Singh J.S. 1992 Rainfall and grazing effects on net primary productivity in a tropical savanna, India. Ecology 73, 2007-2021.

Peng Y.Y., Thomas S.C. 2010 Influence of non-nitrogenous soil amendments on soil CO2 efflux and fine root production in a northern hardwood forest. Ecosystems 13, 1145- 1156.

Persson H., Ahlstrom K. 1990 The Effects of forest liming on fertilization on fine-root growth. Water Air Soil Pollut 54, 365-375.

Persson H., Ahlstrom K., Clemensson-Lindell A. 1998 Nitrogen addition and removal at Gardsjon -Effects on fine-root growth and fine-root chemistry. For Ecol Manag 101, 199-205.

Persson H.A. 1983 The distribution and productivity of fine roots in boreal forests. Plant Soil 71, 87-101.

Pieters A., Baruch Z. 1997 Soil depth and fertility effects on biomass and nutrient allocation in jaraguagrass. J Range Manag 50, 268-273.

Powell S.W., Day F.P. 1991 Root production in four communities in the Great Dismal Swamp. Am J Bot 78, 288-297.

Pridoehl F. 2010 Fine root dynamics for three distinct northern Ontario forests: A comparison of approaches used to estimate fine root biomass, productivity, and turnover, Lakehead University, ON.

Priess J., Then C., Folster H. 1999 Litter and fine-root production in three types of tropical premontane rain forest in SE Venezuela. Plant Ecol 143, 171-187.

Raich J.W. 1983 Effects of forest conversion on the carbon budget of a tropical soil. Biotropica 15, 177-184.

Raich J.W., Riley R.H., Vitousek P.M. 1994 Use of root-ingrowth cores to assess nutrient limitations in forest ecosystems. Can J For Res 24, 2135-2138.

Riley R.H., Vitousek P.M. 1995 Nutrient dynamics and nitrogen trace gas flux during ecosystem development in montane rain forest. Ecology 76, 292-304.

Rodriguez M.V., Bertiller M.B., Bisigato A. 2007 Are fine roots of both shrubs and perennial grasses able to occupy the upper soil layer? A case study in the arid Patagonian Monte with non-seasonal precipitation. Plant Soil 300, 281-288.

28 Rogers W.E., Siemann E. 2003 Effects of simulated herbivory and resources on Chinese tallow tree (Sapium sebiferum, Euphorbiaceae) invasion of native coastal prairie. Am J Bot 90, 243-249.

Russell A.E., Cambardella C.A., Ewel J.J., Parkin T.B. 2004 Species, rotation, and life- form diversity effects on soil carbon in experimental tropical ecosystems. Ecol Appl 14, 47-60.

Russell A.E., Raich J.W., Arrieta R.B., Valverde-Barrantes O., Gonzalez E. 2010 Impacts of individual tree species on carbon dynamics in a moist tropical forest environment. Ecol Appl 20, 1087-1100.

Saarinen T. 1998 Internal C:N balance and biomass partitioning of Carex rostrata grown at three levels of nitrogen supply. Can J Bot 76, 762-768.

Sanchez G. 2005 Belowground Productivity of Mangrove Forests in Southwest Florida.

Sanchez-Gallen I., Alvarez-Sanchez J. 1996 Root productivity in a lowland tropical rain forest in Mexico. Vegetatio 123, 109-115.

Sanford R.L. 1990 Fine root biomass under light gap openings in an Amazon rain forest. Oecologia 83, 541-545.

Schappi B., Korner C. 1996 Growth responses of an alpine grassland to elevated CO2. Oecologia 105, 43-52.

Seastedt T.R., Adams G.A. 2001 Effects of mobile tree islands on alpine tundra soils. Ecology 82, 8-17.

Shimamura T., Momose K. 2007 Reciprocal interactions between carbon storage function and plant species diversity in a tropical peat swamp forest. Asian and African Area Studies 6, 279-296.

Silva A.K.L., Vasconcelos S.S., de Carvalho C.J.R., Cordeiro I. 2011 Litter dynamics and fine root production in Schizolobium parahyba var. amazonicum plantations and regrowth forest in Eastern Amazon. Plant Soil 347, 377-386.

Silver W.L., Jackson R.D., Allen-Diaz B. 2005 Soil carbon dynamics of California grasslands under altered soil moisture regimes. In Kearney Foundation of Soil Science Final Report (pp. 1–14.

Sindhoj E., Andren O., Katterer T., Marissink M., Pettersson R. 2004 Root biomass

dynamics in a semi-natural grassland exposed to elevated atmospheric CO2 for five years. Acta Agriculturae Scandinavica Section B-Soil and Plant Science 54, 50-59.

29 Singh B. 1998 Contribution of forest fine roots in reclamation of semiarid sodic soils. Arid Soil Research and Rehabilitation 12, 207-222.

Smirnova E., Bergeron Y., Brais S., Granstrom A. 2008 Postfire root distribution of Scots pine in relation to fire behaviour. Can J For Res 38, 353-362.

Smit A., Kooijman A.M. 2001 Impact of grazing on the input of organic matter and nutrients to the soil in a grass-encroached Scots pine forest. For Ecol Manag 142, 99-107.

Smith C.K., Coyea M.R., Munson A.D. 2005 Response of fine roots to fertilized ingrowth cores in burned and harvested black spruce ecosystems. Commun Soil Sci Plant Anal 36, 1361-1372.

Son Y., Hwang J.H. 2003 Fine root biomass, production and turnover in a fertilized Larix leptolepis plantation in central Korea. Ecol Res 18, 339-346.

Steele S.J., Gower S.T., Vogel J.G., Norman J.M. 1997 Root mass, net primary production and turnover in aspen, jack pine and black spruce forests in Saskatchewan and Manitoba, Canada. Tree Physiol 17, 577-587.

Steltzer H., Bowman W.D. 1998 Differential influence of plant species on soil nitrogen transformations within moist meadow Alpine tundra. Ecosystems 1, 464-474.

Stevens G.N. 2005 Trophic dynamics in the fine-root based food web: integrating resource heterogeneity, root herbivores, and root foraging, Virginia Polytechnic Institute and State University.

Stevens G.N., Jones R.H. 2006 Patterns in soil fertility and root herbivory interact to influence fine-root dynamics. Ecology 87, 616-624.

Stevenson M.J., Day F.P. 1996 Fine-root biomass distribution and production along a barrier island chronosequence. Am Midl Nat 135, 205-217.

Stewart C.G. 2000 A test of nutrient limitation in two tropical montane forests using root ingrowth cores. Biotropica 32, 369-373.

Sullivan P.F., Arens S.J.T., Chimner R.A., Welker J.M. 2008 Temperature and microtopography interact to control carbon cycling in a high arctic fen. Ecosystems 11, 61-76.

Sullivan P.F., Sommerkorn M., Rueth H.M., Nadelhoffer K.J., Shaver G.R., Welker J.M. 2007 Climate and species affect fine root production with long-term fertilization in acidic tussock tundra near Toolik Lake, Alaska. Oecologia 153, 643-652.

30 Sun Y., Gu J., Zhuang H., Guo D., Wang Z. 2011 Lower order roots more palatable to herbivores: a case study with two temperate tree species. Plant Soil 347, 351-361.

Sundarapandian S.M., Swamy P.S. 1996 Fine root biomass distribution and productivity patterns under open and closed canopies of tropical forest ecosystems at Kodayar in western Ghats, south India. For Ecol Manag 86, 181-192.

Symbula M., Day F.P. 1988 Evaluation of two methods for estimating belowground production in a fresh-water swamp forest. Am Midl Nat 120, 405-450.

Tateno R., Hishi T., Takeda H. 2004 Above- and belowground biomass and net primary production in a cool-temperate deciduous forest in relation to topographical changes in soil nitrogen. For Ecol Manag 193, 297-306.

Tateno R., Takeda H. 2010 Nitrogen uptake and nitrogen use efficiency above and below ground along a topographic gradient of soil nitrogen availability. Oecologia 163, 793-804.

Treseder K.K., Vitousek P.M. 2001 Effects of soil nutrient availability on investment in Acquisition of N and P in hawaiian rain forests. Ecology 82, 946-954.

Tripathi S.K., Singh K.P. 1994 Productivity and nutrient cycling in recently harvested and mature bamboo savannas in the dry tropics. J Appl Ecol 31, 109-124.

Tripathi S.K., Singh K.P. 1996 Culm recruitment, dry matter dynamics and carbon flux in recently harvested and mature bamboo savannas in the Indian dry tropics. Ecol Res 11, 149-164.

Tripathi S.K., Singh K.P., Singh P.K. 1999 Temporal changes in spatial pattern of fine- root mass and nutrient concentrations in Indian bamboo savanna. Appl Veg Sci 2, 229-238.

Trujillo W., Fisher M.J., Lal R. 2006 Root dynamics of native savanna and introduced pastures in the Eastern Plains of Colombia. Soil Tillage Res 87, 28-38.

Uselman S.M., Qualls R.G., Lilienfein J. 2007 Fine root production across a primary successional ecosystem chronosequence at Mt. Shasta, California. Ecosystems 10, 703-717.

Usman S., Singh S.P., Rawat Y.S. 1999 Fine root productivity and turnover in two evergreen central Himalayan forests. Ann Bot 84, 87-94.

Valverde-Barrantes O.J., Raich J.W., Russell A.E. 2007 Fine-root mass, growth and nitrogen content for six tropical tree species. Plant Soil 290, 357-370.

31 Vanguelova E.I., Nortcliff S., Moffat A.J., Kennedy F. 2007 Short-term effects of manipulated increase in acid deposition on soil, soil solution chemistry and fine roots in Scots pine (Pinus sylvestris) stand on a podzol. Plant Soil 294, 41-54.

Vieira I.C.G., Uhl C., Nepstad D. 1994 The role of the shrub Cordia multispicata Cham as a succession facilitator in an abandoned pasture, Paragominas, Amazonia. Vegetatio 115, 91-99.

Visalakshi N. 1994 Fine-root dynamics in two tropical dry evergreen forests in southern India. J Biosci (Bangalore) 19, 103-116.

Wang W., Feng J., Oikawa T. 2009 Contribution of root and microbial respiration to soil

CO2 efflux and their environmental controls in a humid temperate grassland of Japan. Pedosphere 19, 31-39.

Weltzin J.F., Pastor J., Harth C., Bridgham S.D., Updegraff K., Chapin C.T. 2000 Response of bog and fen plant communities to warming and water-table manipulations. Ecology 81, 3464-3478.

Wen D.Z., Wei P., Kong G.H., Ye W.H. 1999 Production and turnover rate of fine roots in two lower subtropical forest sites at Dinghushan. Acta Phytoecol Sin 23, 361-369.

Wright S.J., Yavitt J.B., Wurzburger N., Turner B.L., Tanner E.V.J., Sayer E.J., Santiago L.S., Kaspari M., Hedin L.O., Harms K.E., et al. 2011 Potassium, phosphorus, or nitrogen limit root allocation, tree growth, or litter production in a lowland tropical forest. Ecology 92, 1616-1625.

Wu Y.B., Wu J., Deng Y.C., Tan H.C., Du Y.G., Gu S., Tang Y.H., Cui X.Y. 2011 Comprehensive assessments of root biomass and production in a Kobresia humilis meadow on the Qinghai-Tibetan Plateau. Plant Soil 338, 497-510.

Xiao C.W., Janssens I.A., Sang W.G., Wang R.Z., Xie Z.Q., Pei Z.Q., Yi Y. 2010 Belowground carbon pools and dynamics in China's warm temperate and sub- tropical deciduous forests. Biogeosciences 7, 275-287.

Yavitt J.B., Harms K.E., Garcia M.N., Mirabello M.J., Wright S.J. 2011 Soil fertility and fine root dynamics in response to four years of nutrient (N, P, K) fertilization in a lowland tropical moist forest, Panama. Austral Ecol 36, 433-445.

Zhang Q.H., Zak J.C. 1998 Effects of water and nitrogen amendment on soil microbial biomass and fine root production in a semi-arid environment in West Texas. Soil Biol Biochem 30, 39-45.

32 Zhao G.Y., Liu J.S., Wang Y., Dou J.X. 2009 Effects of elevated CO2 concentration and application of N fertilizer on biomass and root/shoot ratio of Calamagrostis angustifolia in typical wetland of Sanjiang Plain. J Ecol Rural Environ 25, 38-41.

33 R codes

### Figure 1 soil N-biome rm(list=ls())

### read in data dat.ing<-read.csv(file.choose()) head(dat.ing)

### calculate mean and sd bf<-subset(dat.ing, dat.ing$biome=="1BF") temf<-subset(dat.ing, dat.ing$biome=="2temF") lowland<-subset(dat.ing, dat.ing$biome=="3lowland") montane<-subset(dat.ing, dat.ing$biome=="4montane") temg<-subset(dat.ing, dat.ing$biome=="5temG") trog<-subset(dat.ing, dat.ing$biome=="6troG") tu<-subset(dat.ing, dat.ing$biome=="7TU") wet<-subset(dat.ing, dat.ing$biome=="8wet") terr<-rbind(bf,temf,lowland,montane,temg,trog,tu) trof<-rbind(lowland,montane) mean(bf$FRP);sd(bf$FRP) mean(temf$FRP);sd(temf$FRP) mean(lowland$FRP);sd(lowland$FRP) mean(montane$FRP);sd(montane$FRP) mean(temg$FRP);sd(temg$FRP) mean(trog$FRP);sd(trog$FRP)

34 mean(tu$FRP);sd(tu$FRP) mean(terr$FRP);sd(terr$FRP) mean(dat.ing$FRP);sd(dat.ing$FRP) mean(trof$FRP);sd(trof$FRP)

### test assumption boxplot(split(dat.ing$FRP,dat.ing$biome),xlab="Ecosystem type",ylab="FRP",col="green") shapiro.test(dat.ing$FRP) shapiro.test(bf$FRP) shapiro.test(temf$FRP) shapiro.test(lowland$FRP) shapiro.test(montane$FRP) shapiro.test(temg$FRP) shapiro.test(trog$FRP) shapiro.test(tu$FRP) shapiro.test(terr$FRP) shapiro.test(trof$FRP) dat.ing$FRP<-log10(dat.ing$FRP+1) bf<-subset(dat.ing, dat.ing$biome=="1BF") temf<-subset(dat.ing, dat.ing$biome=="2temF") lowland<-subset(dat.ing, dat.ing$biome=="3lowland") montane<-subset(dat.ing, dat.ing$biome=="4montane") temg<-subset(dat.ing, dat.ing$biome=="5temG") trog<-subset(dat.ing, dat.ing$biome=="6troG") tu<-subset(dat.ing, dat.ing$biome=="7TU")

35 wet<-subset(dat.ing, dat.ing$biome=="8wet") terr<-rbind(bf,temf,lowland,montane,temg,trog,tu) trof<-rbind(lowland,montane) shapiro.test(dat.ing$FRP) shapiro.test(bf$FRP) shapiro.test(temf$FRP) shapiro.test(lowland$FRP) shapiro.test(montane$FRP) shapiro.test(temg$FRP) shapiro.test(trog$FRP) shapiro.test(tu$FRP) shapiro.test(terr$FRP) shapiro.test(trof$FRP) bartlett.test(dat.ing$FRP~dat.ing$biome)

### Regression library(ggplot2) dat.ing<-read.csv(file.choose()) nnumber <- subset(dat.ing,biome=="1BF" | biome=="2temF"| biome=="3lowland"| biome=="4montane"| biome=="5temG"|

biome=="6troG"| biome=="7TU"| biome=="8wet") levels(nnumber$biome) table(nnumber$biome)

36 qplot(soilN, FRP, data=dat.ing, facets= . ~ biome, geom=c('point', 'smooth'), se=F, method='lm', formula=y ~ x) dat.ing$FRP<-log10(dat.ing$FRP+1) lmall<-lm(FRP~soilN, data=dat.ing) lmbf<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="1BF")) lmtemf<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="2temF")) lmlowland<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="3lowland")) lmmontane<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="4montane")) lmtemg<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="5temG")) lmtrog<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="6troG")) lmtu<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="7TU")) lmwet<-lm(FRP~soilN, data=subset(dat.ing, dat.ing$biome=="8wet")) lmterr<-lm(FRP~soilN, data=rbind(bf,temf,lowland,montane,temg,trog,tu)) lmtrof<-lm(FRP~soilN, data=rbind(lowland,montane)) summary(lmall) summary(lmbf) summary(lmtemf) summary(lmlowland) summary(lmmontane) summary(lmtemg) summary(lmtrog) summary(lmtu) summary(lmwet) summary(lmterr) summary(lmtrof)

37 ### test slope library(ggplot2) qplot(soilN, FRP, data=dat.ing, facets= . ~ biome, geom=c('point', 'smooth'), se=F, method='lm', formula=y ~ x) plot(FRP~soilN, data=bf,xlab="Soil N",ylab="FRP") abline(lmbf) plot(FRP~soilN, data=temf,xlab="Soil N",ylab="FRP") abline(lmtemf) plot(FRP~soilN, data=trof,xlab="Soil N",ylab="FRP") abline(lmtrof) plot(FRP~soilN, data=temg,xlab="Soil N",ylab="FRP") abline(lmtemg) plot(FRP~soilN, data=trog,xlab="Soil N",ylab="FRP") abline(lmtrog) plot(FRP~soilN, data=tu,xlab="Soil N",ylab="FRP") abline(lmtu) summary(inter<-glm(FRP~soilN+biome, data=dat.ing))

dat.ing<-read.csv(file.choose()) dat.ing$FRP<-log10(dat.ing$FRP+1) source("http://www.rforge.net/NCStats/InstallNCStats.R") library(NCStats)

?NCStats lm1 <- lm(FRP~soilN+biome+soilN*biome, data=dat.ing)

38 # visualize the results fitPlot(lm1)

# compare all pairs of slopes using an FDR control compSlopes(lm1)

# compare all pairs of slopes using the Holm method of control compSlopes(lm1,control="holm")

#### export data for graph

### overall

FRPgraph<-read.csv(file.choose()) head(FRPgraph)

FRP0graph.gbm <- gbm.step(data=(subset(FRPgraph,!is.na(FRPgraph$FRP))), gbm.x=2:5, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

FRP1graph.gbm <- gbm.step(data=(subset(FRPgraph,!is.na(FRPgraph$FRP))), gbm.x=2:5, gbm.y=1, family="gaussian", var.monotone=c(1,1,1,1),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5) summary(FRP0graph.gbm);text(10,6.2, "FRP", adj=0) summary(FRP1graph.gbm);text(10,6.2, "FRP", adj=0) gbm.plot(FRP0graph.gbm, n.plots=4, write.title = FALSE) gbm.plot(FRP1graph.gbm, n.plots=4, write.title = FALSE)

####### 0 model

39 soilN<- seq(from=min(na.omit((FRPgraph$soilN*FRPgraph$FRP)/FRPgraph$FRP)),to=max(na. omit((FRPgraph$soilN*FRPgraph$FRP)/FRPgraph$FRP)),length=500)

FRP0graphSN<-data.frame(cbind(soilN)); names(FRP0graphSN)<-c("soilN"); FRP0graphSN$Nav<-mean(na.omit(FRPgraph$Nav)); FRP0graphSN$Pav<- mean(na.omit(FRPgraph$Pav)); FRP0graphSN$soilP<-mean(na.omit(FRPgraph$soilP))

FRP0graphSN$Y<- predict.gbm(FRP0graph.gbm,FRP0graphSN,n.trees=FRP0graph.gbm$gbm.call$best.tree s,type="response"); FRP0graphSN<- data.frame(FRP0graphSN$soilN,FRP0graphSN$Y)

FRP0graphSN<-data.frame(cbind(soilN)); names(FRP0graphSN)<-c("soilN"); FRP0graphSN$Nav<-mean(na.omit(FRPgraph$Nav)); FRP0graphSN$Pav<- mean(na.omit(FRPgraph$Pav)); FRP0graphSN$soilP<-mean(na.omit(FRPgraph$soilP))

FRP0graphSN$Y<- predict.gbm(FRP0graph.gbm,FRP0graphSN,n.trees=FRP0graph.gbm$gbm.call$best.tree s,type="response"); FRP0graphSN<- data.frame(FRP0graphSN$soilN,FRP0graphSN$Y)

##soil P soilP<- seq(from=min(na.omit((FRPgraph$soilP*FRPgraph$FRP)/FRPgraph$FRP)),to=max(na. omit((FRPgraph$soilP*FRPgraph$FRP)/FRPgraph$FRP)),length=500)

FRP0graphSP<-data.frame(cbind(soilP)); names(FRP0graphSP)<-c("soilP"); FRP0graphSP$Nav<-mean(na.omit(FRPgraph$Nav)); FRP0graphSP$Pav<- mean(na.omit(FRPgraph$Pav)); FRP0graphSP$soilN<-mean(na.omit(FRPgraph$soilN))

FRP0graphSP$Y<- predict.gbm(FRP0graph.gbm,FRP0graphSP,n.trees=FRP0graph.gbm$gbm.call$best.trees ,type="response"); FRP0graphSP<- data.frame(FRP0graphSP$soilP,FRP0graphSP$Y)

FRP0graphSP<-data.frame(cbind(soilP)); names(FRP0graphSP)<-c("soilP"); FRP0graphSP$Nav<-mean(na.omit(FRPgraph$Nav)); FRP0graphSP$Pav<- mean(na.omit(FRPgraph$Pav)); FRP0graphSP$soilN<-mean(na.omit(FRPgraph$soilN))

FRP0graphSP$Y<- predict.gbm(FRP0graph.gbm,FRP0graphSP,n.trees=FRP0graph.gbm$gbm.call$best.trees ,type="response"); FRP0graphSP<- data.frame(FRP0graphSP$soilP,FRP0graphSP$Y)

FRP0graphsoilNP<-cbind(FRP0graphSN, FRP0graphSP)

40 ###### 1 model

##soil N soilN<- seq(from=min(na.omit((FRPgraph$soilN*FRPgraph$FRP)/FRPgraph$FRP)),to=max(na. omit((FRPgraph$soilN*FRPgraph$FRP)/FRPgraph$FRP)),length=500)

FRP1graphSN<-data.frame(cbind(soilN)); names(FRP1graphSN)<-c("soilN"); FRP1graphSN$Nav<-mean(na.omit(FRPgraph$Nav)); FRP1graphSN$Pav<- mean(na.omit(FRPgraph$Pav)); FRP1graphSN$soilP<-mean(na.omit(FRPgraph$soilP))

FRP1graphSN$Y<- predict.gbm(FRP1graph.gbm,FRP1graphSN,n.trees=FRP1graph.gbm$gbm.call$best.tree s,type="response"); FRP1graphSN<- data.frame(FRP1graphSN$soilN,FRP1graphSN$Y)

FRP1graphSN<-data.frame(cbind(soilN)); names(FRP1graphSN)<-c("soilN"); FRP1graphSN$Nav<-mean(na.omit(FRPgraph$Nav)); FRP1graphSN$Pav<- mean(na.omit(FRPgraph$Pav)); FRP1graphSN$soilP<-mean(na.omit(FRPgraph$soilP))

FRP1graphSN$Y<- predict.gbm(FRP1graph.gbm,FRP1graphSN,n.trees=FRP1graph.gbm$gbm.call$best.tree s,type="response"); FRP1graphSN<- data.frame(FRP1graphSN$soilN,FRP1graphSN$Y)

##soil P soilP<- seq(from=min(na.omit((FRPgraph$soilP*FRPgraph$FRP)/FRPgraph$FRP)),to=max(na. omit((FRPgraph$soilP*FRPgraph$FRP)/FRPgraph$FRP)),length=500)

FRP1graphSP<-data.frame(cbind(soilP)); names(FRP1graphSP)<-c("soilP"); FRP1graphSP$Nav<-mean(na.omit(FRPgraph$Nav)); FRP1graphSP$Pav<- mean(na.omit(FRPgraph$Pav)); FRP1graphSP$soilN<-mean(na.omit(FRPgraph$soilN))

FRP1graphSP$Y<- predict.gbm(FRP1graph.gbm,FRP1graphSP,n.trees=FRP1graph.gbm$gbm.call$best.trees ,type="response"); FRP1graphSP<- data.frame(FRP1graphSP$soilP,FRP1graphSP$Y)

41 FRP1graphSP<-data.frame(cbind(soilP)); names(FRP1graphSP)<-c("soilP"); FRP1graphSP$Nav<-mean(na.omit(FRPgraph$Nav)); FRP1graphSP$Pav<- mean(na.omit(FRPgraph$Pav)); FRP1graphSP$soilN<-mean(na.omit(FRPgraph$soilN))

FRP1graphSP$Y<- predict.gbm(FRP1graph.gbm,FRP1graphSP,n.trees=FRP1graph.gbm$gbm.call$best.trees ,type="response"); FRP1graphSP<- data.frame(FRP1graphSP$soilP,FRP1graphSP$Y)

FRP1graphsoilNP<-cbind(FRP1graphSN, FRP1graphSP)

FRPgraphsoilNP<-cbind(FRP0graphsoilNP, FRP1graphsoilNP)

write.csv(FRPgraphsoilNP,"FigsoilNP500.csv",row.names=F)

#### individual biome graphsoilNP<-read.csv(file.choose()) head(graphsoilNP) bf<-subset(graphsoilNP, graphsoilNP$biome=="1BF") temf<-subset(graphsoilNP, graphsoilNP$biome=="2temF") lowland<-subset(graphsoilNP, graphsoilNP$biome=="3lowland") montane<-subset(graphsoilNP, graphsoilNP$biome=="4montane") temg<-subset(graphsoilNP, graphsoilNP$biome=="5temG") trog<-subset(graphsoilNP, graphsoilNP$biome=="6troG") tu<-subset(graphsoilNP, graphsoilNP$biome=="7TU") wet<-subset(graphsoilNP, graphsoilNP$biome=="8wet")

#### boreal forests bfsoilNPgraph <- gbm.step(data=(subset(bf,!is.na(bf$FRP))), gbm.x=4:7, gbm.y=1, family="gaussian", var.monotone=c(1,1,1,1),

42 tree.complexity=2, learning.rate=0.005, bag.fraction=0.5) gbm.plot(bfsoilNPgraph, n.plots=4, write.title = FALSE)

##bf-soil N soilNbf<- seq(from=min(na.omit((bf$soilN*bf$FRP)/bf$FRP)),to=max(na.omit((bf$soilN*bf$FRP )/bf$FRP)),length=500) bfgraphSN<-data.frame(cbind(soilNbf)); names(bfgraphSN)<-c("soilN"); bfgraphSN$Nav<-mean(na.omit(graphsoilNP$Nav)); bfgraphSN$Pav<- mean(na.omit(graphsoilNP$Pav)); bfgraphSN$soilP<-mean(na.omit(graphsoilNP$soilP)) bfgraphSN$Y<- predict.gbm(bfsoilNPgraph,bfgraphSN,n.trees=bfsoilNPgraph$gbm.call$best.trees,type= "response"); bfgraphSN<- data.frame(bfgraphSN$soilN,bfgraphSN$Y)

##bf-soil P soilPbf<- seq(from=min(na.omit((bf$soilP*bf$FRP)/bf$FRP)),to=max(na.omit((bf$soilP*bf$FRP)/ bf$FRP)),length=500) bfgraphSP<-data.frame(cbind(soilPbf)); names(bfgraphSP)<-c("soilP"); bfgraphSP$Nav<-mean(na.omit(graphsoilNP$Nav)); bfgraphSP$Pav<- mean(na.omit(graphsoilNP$Pav)); bfgraphSP$soilN<- mean(na.omit(graphsoilNP$soilN)) bfgraphSP$Y<- predict.gbm(bfsoilNPgraph,bfgraphSP,n.trees=bfsoilNPgraph$gbm.call$best.trees,type=" response"); bfgraphSP<- data.frame(bfgraphSP$soilP,bfgraphSP$Y)

bfgraphsoilNP<-cbind(bfgraphSN, bfgraphSP)

### temperate forests temfsoilNPgraph <- gbm.step(data=(subset(temf,!is.na(temf$FRP))), gbm.x=4:7, gbm.y=1, family="gaussian", var.monotone=c(1,1,1,1),

43 tree.complexity=2, learning.rate=0.005, bag.fraction=0.5) gbm.plot(temfsoilNPgraph, n.plots=4, write.title = FALSE)

##temf--soil N soilNtemf<- seq(from=min(na.omit((temf$soilN*temf$FRP)/temf$FRP)),to=max(na.omit((temf$soil N*temf$FRP)/temf$FRP)),length=500) temfgraphSN<-data.frame(cbind(soilNtemf)); names(temfgraphSN)<-c("soilN"); temfgraphSN$Nav<-mean(na.omit(graphsoilNP$Nav)); temfgraphSN$Pav<- mean(na.omit(graphsoilNP$Pav)); temfgraphSN$soilP<- mean(na.omit(graphsoilNP$soilP)) temfgraphSN$Y<- predict.gbm(temfsoilNPgraph,temfgraphSN,n.trees=temfsoilNPgraph$gbm.call$best.tree s,type="response"); temfgraphSN<- data.frame(temfgraphSN$soilN,temfgraphSN$Y)

##temf--soil P soilPtemf<- seq(from=min(na.omit((temf$soilP*temf$FRP)/temf$FRP)),to=max(na.omit((temf$soilP *temf$FRP)/temf$FRP)),length=500) temfgraphSP<-data.frame(cbind(soilPtemf)); names(temfgraphSP)<-c("soilP"); temfgraphSP$Nav<-mean(na.omit(graphsoilNP$Nav)); temfgraphSP$Pav<- mean(na.omit(graphsoilNP$Pav)); temfgraphSP$soilN<- mean(na.omit(graphsoilNP$soilN)) temfgraphSP$Y<- predict.gbm(temfsoilNPgraph,temfgraphSP,n.trees=temfsoilNPgraph$gbm.call$best.trees ,type="response"); temfgraphSP<- data.frame(temfgraphSP$soilP,temfgraphSP$Y) temfgraphsoilNP<-cbind(temfgraphSN, temfgraphSP)

### lowland tropical forest lowlandsoilNPgraph <- gbm.step(data=(subset(lowland,!is.na(lowland$FRP))), gbm.x=4:7, gbm.y=1, family="gaussian", var.monotone=c(1,1,1,1),

44 tree.complexity=2, learning.rate=0.005, bag.fraction=0.5) gbm.plot(lowlandsoilNPgraph, n.plots=4, write.title = FALSE)

lowlandsoilPgraph <- gbm.step(data=(subset(lowland,!is.na(lowland$FRP))), gbm.x=5:7, gbm.y=1, family="gaussian", var.monotone=c(1,1,1),

tree.complexity=2, learning.rate=0.005, bag.fraction=0.75) gbm.plot(lowlandsoilPgraph, n.plots=4, write.title = FALSE)

##lowland--soil N soilNlowland<- seq(from=min(na.omit((lowland$soilN*lowland$FRP)/lowland$FRP)),to=max(na.omit(( lowland$soilN*lowland$FRP)/lowland$FRP)),length=500) lowlandgraphSN<-data.frame(cbind(soilNlowland)); names(lowlandgraphSN)<- c("soilN"); lowlandgraphSN$Nav<-mean(na.omit(graphsoilNP$Nav)); lowlandgraphSN$Pav<-mean(na.omit(graphsoilNP$Pav)); lowlandgraphSN$soilP<- mean(na.omit(graphsoilNP$soilP)) lowlandgraphSN$Y<- predict.gbm(lowlandsoilNPgraph,lowlandgraphSN,n.trees=lowlandsoilNPgraph$gbm.cal l$best.trees,type="response"); lowlandgraphSN<- data.frame(lowlandgraphSN$soilN,lowlandgraphSN$Y)

##lowland--soil P soilPlowland<- seq(from=min(na.omit((lowland$soilP*lowland$FRP)/lowland$FRP)),to=max(na.omit((l owland$soilP*lowland$FRP)/lowland$FRP)),length=500) lowlandgraphSP<-data.frame(cbind(soilPlowland)); names(lowlandgraphSP)<-c("soilP"); lowlandgraphSP$Nav<-mean(na.omit(graphsoilNP$Nav)); lowlandgraphSP$Pav<- mean(na.omit(graphsoilNP$Pav)); lowlandgraphSP$soilN<- mean(na.omit(graphsoilNP$soilN)) lowlandgraphSP$Y<- predict.gbm(lowlandsoilPgraph,lowlandgraphSP,n.trees=lowlandsoilPgraph$gbm.call$be

45 st.trees,type="response"); lowlandgraphSP<- data.frame(lowlandgraphSP$soilP,lowlandgraphSP$Y)

lowlandgraphsoilNP<-cbind(lowlandgraphSN, lowlandgraphSP)

#######montane tropical forests montanesoilNPgraph <- gbm.step(data=(subset(montane,!is.na(montane$FRP))), gbm.x=4:7, gbm.y=1, family="gaussian", var.monotone=c(1,1,1,1),

tree.complexity=1, learning.rate=0.005, bag.fraction=0.75) gbm.plot(montanesoilNPgraph, n.plots=4, write.title = FALSE)

##montane--soil N soilNmontane<- seq(from=min(na.omit((montane$soilN*montane$FRP)/montane$FRP)),to=max(na.omit ((montane$soilN*montane$FRP)/montane$FRP)),length=500) montanegraphSN<-data.frame(cbind(soilNmontane)); names(montanegraphSN)<- c("soilN"); montanegraphSN$Nav<-mean(na.omit(graphsoilNP$Nav)); montanegraphSN$Pav<-mean(na.omit(graphsoilNP$Pav)); montanegraphSN$soilP<- mean(na.omit(graphsoilNP$soilP)) montanegraphSN$Y<- predict.gbm(montanesoilNPgraph,montanegraphSN,n.trees=montanesoilNPgraph$gbm.c all$best.trees,type="response"); montanegraphSN<- data.frame(montanegraphSN$soilN,montanegraphSN$Y)

##montane--soil P soilPmontane<- seq(from=min(na.omit((montane$soilP*montane$FRP)/montane$FRP)),to=max(na.omit( (montane$soilP*montane$FRP)/montane$FRP)),length=500)

46 montanegraphSP<-data.frame(cbind(soilPmontane)); names(montanegraphSP)<- c("soilP"); montanegraphSP$Nav<-mean(na.omit(graphsoilNP$Nav)); montanegraphSP$Pav<-mean(na.omit(graphsoilNP$Pav)); montanegraphSP$soilN<- mean(na.omit(graphsoilNP$soilN)) montanegraphSP$Y<- predict.gbm(montanesoilNPgraph,montanegraphSP,n.trees=montanesoilNPgraph$gbm.ca ll$best.trees,type="response"); montanegraphSP<- data.frame(montanegraphSP$soilP,montanegraphSP$Y)

montanegraphsoilNP<-cbind(montanegraphSN, montanegraphSP)

######## temperate grassland

temgsoilNPgraph <- gbm.step(data=(subset(temg,!is.na(temg$FRP))), gbm.x=4:7, gbm.y=1, family="gaussian", var.monotone=c(1,1,1,1),

tree.complexity=2, learning.rate=0.005, bag.fraction=0.5) gbm.plot(temgsoilNPgraph, n.plots=4, write.title = FALSE)

temggraphsoilP<-read.csv(file.choose()) temgsoilPgraph <- gbm.step(data=(subset(temggraphsoilP,!is.na(temggraphsoilP$FRP))), gbm.x=5:6, gbm.y=1, family="gaussian", var.monotone=c(1,1),

tree.complexity=1, learning.rate=0.0000000000005, bag.fraction=1) gbm.plot(temgsoilPgraph, n.plots=4, write.title = FALSE)

##temg--soil N soilNtemg<- seq(from=min(na.omit((temg$soilN*temg$FRP)/temg$FRP)),to=max(na.omit((temg$soi lN*temg$FRP)/temg$FRP)),length=500)

47 temggraphSN<-data.frame(cbind(soilNtemg)); names(temggraphSN)<-c("soilN"); temggraphSN$Nav<-mean(na.omit(graphsoilNP$Nav)); temggraphSN$Pav<- mean(na.omit(graphsoilNP$Pav)); temggraphSN$soilP<- mean(na.omit(graphsoilNP$soilP)) temggraphSN$Y<- predict.gbm(temgsoilNPgraph,temggraphSN,n.trees=temgsoilNPgraph$gbm.call$best.tre es,type="response"); temggraphSN<- data.frame(temggraphSN$soilN,temggraphSN$Y)

##temg--soil P soilPtemg<- seq(from=min(na.omit((temggraphsoilP$soilP*temggraphsoilP$FRP)/temggraphsoilP$F RP)),to=max(na.omit((temggraphsoilP$soilP*temggraphsoilP$FRP)/temggraphsoilP$FR P)),length=500) temggraphSP<-data.frame(cbind(soilPtemg)); names(temggraphSP)<-c("soilP"); temggraphSP$Nav<-mean(na.omit(temggraphsoilP$Nav)) temggraphSP$Y<- predict.gbm(temgsoilPgraph,temggraphSP,n.trees=temgsoilPgraph$gbm.call$best.trees,t ype="response"); temggraphSP<- data.frame(temggraphSP$soilP,temggraphSP$Y)

temggraphsoilNP<-cbind(temggraphSN, temggraphSP) write.csv(temggraphSP,"temggraphSP.csv",row.names=F)

####### tropical grassland/savanna too small dataset size

######## tundra tusoilNPgraph <- gbm.step(data=(subset(tu,!is.na(tu$FRP))), gbm.x=4:6, gbm.y=1, family="gaussian", var.monotone=c(1,1,1),

tree.complexity=1, learning.rate=0.005, bag.fraction=1) gbm.plot(tusoilNPgraph, n.plots=4, write.title = FALSE)

48 ##tu--soil N soilNtu<- seq(from=min(na.omit((tu$soilN*tu$FRP)/tu$FRP)),to=max(na.omit((tu$soilN*tu$FRP) /tu$FRP)),length=500) tugraphSN<-data.frame(cbind(soilNtu)); names(tugraphSN)<-c("soilN"); tugraphSN$Nav<-mean(na.omit(graphsoilNP$Nav)); tugraphSN$Pav<- mean(na.omit(graphsoilNP$Pav)); tugraphSN$soilP<-mean(na.omit(graphsoilNP$soilP)) tugraphSN$Y<- predict.gbm(tusoilNPgraph,tugraphSN,n.trees=tusoilNPgraph$gbm.call$best.trees,type=" response"); tugraphSN<- data.frame(tugraphSN$soilN,tugraphSN$Y)

##tu--soil P soilPtu<- seq(from=min(na.omit((tu$soilP*tu$FRP)/tu$FRP)),to=max(na.omit((tu$soilP*tu$FRP)/t u$FRP)),length=500) tugraphSP<-data.frame(cbind(soilPtu)); names(tugraphSP)<-c("soilP"); tugraphSP$Nav<-mean(na.omit(graphsoilNP$Nav)); tugraphSP$Pav<- mean(na.omit(graphsoilNP$Pav)); tugraphSP$soilN<-mean(na.omit(graphsoilNP$soilN)) tugraphSP$Y<- predict.gbm(tusoilNPgraph,tugraphSP,n.trees=tusoilNPgraph$gbm.call$best.trees,type=" response"); tugraphSP<- data.frame(tugraphSP$soilP,tugraphSP$Y) tugraphsoilNP<-cbind(tugraphSN, tugraphSP)

######### wetlands too small datasize

wetsoilNPgraph <- gbm.step(data=(subset(wet,!is.na(wet$FRP))), gbm.x=4:5, gbm.y=1, family="gaussian", var.monotone=c(1,1),

tree.complexity=1, learning.rate=0.000005, bag.fraction=1) gbm.plot(wetsoilNPgraph, n.plots=4, write.title = FALSE)

49

##wet--soil N soilNwet<- seq(from=min(na.omit((wet$soilN*wet$FRP)/wet$FRP)),to=max(na.omit((wet$soilN*w et$FRP)/wet$FRP)),length=500) wetgraphSN<-data.frame(cbind(soilNwet)); names(wetgraphSN)<-c("soilN"); wetgraphSN$Nav<-mean(na.omit(graphsoilNP$Nav)); wetgraphSN$Pav<- mean(na.omit(graphsoilNP$Pav)); wetgraphSN$soilP<- mean(na.omit(graphsoilNP$soilP)) wetgraphSN$Y<- predict.gbm(wetsoilNPgraph,wetgraphSN,n.trees=wetsoilNPgraph$gbm.call$best.trees,ty pe="response"); wetgraphSN<- data.frame(wetgraphSN$soilN,wetgraphSN$Y)

##wet--soil P soilPwet<- seq(from=min(na.omit((wet$soilP*wet$FRP)/wet$FRP)),to=max(na.omit((wet$soilP*we t$FRP)/wet$FRP)),length=500) wetgraphSP<-data.frame(cbind(soilPwet)); names(wetgraphSP)<-c("soilP"); wetgraphSP$Nav<-mean(na.omit(graphsoilNP$Nav)); wetgraphSP$Pav<- mean(na.omit(graphsoilNP$Pav)); wetgraphSP$soilN<- mean(na.omit(graphsoilNP$soilN)) wetgraphSP$Y<- predict.gbm(wetsoilNPgraph,wetgraphSP,n.trees=wetsoilNPgraph$gbm.call$best.trees,ty pe="response"); wetgraphSP<- data.frame(wetgraphSP$soilP,wetgraphSP$Y)

wetgraphsoilNP<-cbind(wetgraphSN, wetgraphSP)

graphsoilNP<-cbind(bfgraphsoilNP, temfgraphsoilNP, lowlandgraphsoilNP, montanegraphsoilNP, temggraphsoilNP, tugraphsoilNP) write.csv(graphsoilNP,"Fig1&2gbm.csv",row.names=F)

50 ### Figure 2 soil P-biome rm(list=ls())

### read in data dat.ing<-read.csv(file.choose()) head(dat.ing)

### calculate mean and sd bf<-subset(dat.ing, dat.ing$biome=="1BF") temf<-subset(dat.ing, dat.ing$biome=="2temF") lowland<-subset(dat.ing, dat.ing$biome=="3lowland") montane<-subset(dat.ing, dat.ing$biome=="4montane") temg<-subset(dat.ing, dat.ing$biome=="5temG") trog<-subset(dat.ing, dat.ing$biome=="6troG") tu<-subset(dat.ing, dat.ing$biome=="7TU") wet<-subset(dat.ing, dat.ing$biome=="8wet") terr<-rbind(bf,temf,lowland,montane,temg,trog,tu) trof<-rbind(lowland,montane) mean(bf$FRP);sd(bf$FRP) mean(temf$FRP);sd(temf$FRP) mean(lowland$FRP);sd(lowland$FRP) mean(montane$FRP);sd(montane$FRP) mean(temg$FRP);sd(temg$FRP) mean(trog$FRP);sd(trog$FRP) mean(tu$FRP);sd(tu$FRP)

51 mean(terr$FRP);sd(terr$FRP) mean(dat.ing$FRP);sd(dat.ing$FRP) mean(trof$FRP);sd(trof$FRP)

### test assumption boxplot(split(dat.ing$FRP,dat.ing$biome),xlab="Ecosystem type",ylab="FRP",col="green") shapiro.test(dat.ing$FRP) shapiro.test(bf$FRP) shapiro.test(temf$FRP) shapiro.test(lowland$FRP) shapiro.test(montane$FRP) shapiro.test(temg$FRP) shapiro.test(trog$FRP) shapiro.test(tu$FRP) shapiro.test(terr$FRP) shapiro.test(trof$FRP) dat.ing$FRP<-log10(dat.ing$FRP+1) bf<-subset(dat.ing, dat.ing$biome=="1BF") temf<-subset(dat.ing, dat.ing$biome=="2temF") lowland<-subset(dat.ing, dat.ing$biome=="3lowland") montane<-subset(dat.ing, dat.ing$biome=="4montane") temg<-subset(dat.ing, dat.ing$biome=="5temG") trog<-subset(dat.ing, dat.ing$biome=="6troG") tu<-subset(dat.ing, dat.ing$biome=="7TU") wet<-subset(dat.ing, dat.ing$biome=="8wet")

52 terr<-rbind(bf,temf,lowland,montane,temg,trog,tu) trof<-rbind(lowland,montane) shapiro.test(dat.ing$FRP) shapiro.test(bf$FRP) shapiro.test(temf$FRP) shapiro.test(lowland$FRP) shapiro.test(montane$FRP) shapiro.test(temg$FRP) shapiro.test(trog$FRP) shapiro.test(tu$FRP) shapiro.test(terr$FRP) shapiro.test(trof$FRP) bartlett.test(dat.ing$FRP~dat.ing$biome)

### Regression library(ggplot2) dat.ing<-read.csv(file.choose()) sum(!is.na(bf$soilP)) sum(!is.na(temf$soilP)) sum(!is.na(lowland$soilP)) sum(!is.na(montane$soilP)) sum(!is.na(temg$soilP)) sum(!is.na(trog$soilP)) sum(!is.na(tu$soilP)) sum(!is.na(wet$soilP))

53 qplot(soilP, FRP, data=dat.ing, facets= . ~ biome, geom=c('point', 'smooth'), se=F, method='lm', formula=y ~ x) dat.ing$FRP<-log10(dat.ing$FRP+1) lmall<-lm(FRP~soilP, data=dat.ing) lmbf<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="1BF")) lmtemf<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="2temF")) lmlowland<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="3lowland")) lmmontane<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="4montane")) lmtemg<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="5temG")) lmtrog<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="6troG")) lmtu<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="7TU")) lmwet<-lm(FRP~soilP, data=subset(dat.ing, dat.ing$biome=="8wet")) lmterr<-lm(FRP~soilP, data=rbind(bf,temf,lowland,montane,temg,trog,tu)) lmtrof<-lm(FRP~soilP, data=rbind(lowland,montane)) summary(lmall) summary(lmbf) summary(lmtemf) summary(lmlowland) summary(lmmontane) summary(lmtemg) summary(lmtrog) summary(lmtu) summary(lmwet) summary(lmterr)

54 summary(lmtrof)

### test slope library(ggplot2) qplot(soilP, FRP, data=dat.ing, facets= . ~ biome, geom=c('point', 'smooth'), se=F, method='lm', formula=y ~ x) plot(FRP~soilP, data=bf,xlab="Soil N",ylab="FRP") abline(lmbf) plot(FRP~soilP, data=temf,xlab="Soil N",ylab="FRP") abline(lmtemf) plot(FRP~soilP, data=trof,xlab="Soil N",ylab="FRP") abline(lmtrof) plot(FRP~soilP, data=temg,xlab="Soil N",ylab="FRP") abline(lmtemg) plot(FRP~soilP, data=trog,xlab="Soil N",ylab="FRP") abline(lmtrog) plot(FRP~soilP, data=tu,xlab="Soil N",ylab="FRP") abline(lmtu) summary(inter<-glm(FRP~soilP+biome, data=dat.ing))

dat.ing<-read.csv(file.choose()) dat.ing$FRP<-log10(dat.ing$FRP+1) source("http://www.rforge.net/NCStats/InstallNCStats.R") library(NCStats)

?NCStats

55 lm1 <- lm(FRP~soilP+biome+soilP*biome, data=dat.ing)

# visualize the results fitPlot(lm1)

# compare all pairs of slopes using an FDR control compSlopes(lm1)

# compare all pairs of slopes using the Holm method of control compSlopes(lm1,control="holm")

############### Figure 3 meta-biome

###### nitrogen addition-bimome rm(list=ls()) library(metafor)

### read in data dat.Naddeco<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

### calculate log ratio of means and corresponding sampling variances dat.Naddeco <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.Naddeco, append=TRUE) dat.Naddeco

####or yiNaddeco <- with(dat.Naddeco, log(Xe/Xc))

56 viNaddeco <- with(dat.Naddeco, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco) resNaddeco

### get estimate of heterogeneity for each level of the level factor resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="01BF")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="02temF")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="03troF")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="04lowland")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="05montane")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="06temG")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="07troG")) round(resNaddeco$tau2, 4)

57 resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="08TU")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="09WL")) round(resNaddeco$tau2, 4) resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="10overall")) round(resNaddeco$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resNaddeco <- rma(yiNaddeco, viNaddeco, mods=~factor(level), method="DL", data=dat.Naddeco) resNaddeco

### get estimated average log response ratio for each level resNaddeco <- rma(yiNaddeco, viNaddeco, mods=~factor(level) - 1, method="DL", data=dat.Naddeco) resNaddeco

### back-transformed the estimated average log response ratios for each level predict(resNaddeco, transf=exp, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0),

58 c(0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,1)))

### forest plot of the estimated average response ratios for each level predsresNaddeco <- predict(resNaddeco, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,1))) predsresNaddeco resNaddeco <- rma(yiNaddeco, viNaddeco, method="DL", data=dat.Naddeco, subset=(level=="01BF")) nnumberresNaddeco <- subset(dat.Naddeco,level=="01BF" | level=="02temF"| level=="03troF"| level=="04lowland"| level=="05montane"| level=="06temG"|

level=="07troG"| level=="08TU"| level=="09WL"| level=="10overall") levels(nnumberresNaddeco$level) table(nnumberresNaddeco$level)

59 par(family = 'A', font.main=1) par(mfrow=c(1,3)) forest(predsresNaddeco$pred, sei=predsresNaddeco$se, atransf=exp, xlim=c(-3,3), at=log(c(.5, 1, 2)), pch=16, cex=1,

slab=c("Boreal forests", "Temperate/subtropical forests","Tropical forests",

" Lowland tropical forests"," Montane tropical forests",

"Temperate grasslands", "Tropical grasslands",

"Tundra", "Wetlands","Overall" ),

xlab="", psize=1.5) text(-3, 12, "Ecosystem type", cex=1, pos=4) text( 2.99, 12, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

## Random effects within each level rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="01BF")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="02temF")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="03troF")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="04lowland")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="05montane")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="06temG")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="07troG")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="08TU"))

60 rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="09WL")) rma(yiNaddeco, viNaddeco, data = dat.Naddeco, subset = (level=="10overall"))

##create dummy variables dat.Naddeco$a.01BF <- ifelse(dat.Naddeco$level == "01BF", 1, 0) dat.Naddeco$a.02temF <- ifelse(dat.Naddeco$level == "02temF", 1, 0) dat.Naddeco$a.03troF <- ifelse(dat.Naddeco$level == "03troF", 1, 0) dat.Naddeco$a.04lowland <- ifelse(dat.Naddeco$level == "04lowland", 1, 0)

dat.Naddeco$a.05montane <- ifelse(dat.Naddeco$level == "05montane", 1, 0) dat.Naddeco$a.06temG <- ifelse(dat.Naddeco$level == "06temG", 1, 0) dat.Naddeco$a.07troG <- ifelse(dat.Naddeco$level == "07troG", 1, 0) dat.Naddeco$a.08TU <- ifelse(dat.Naddeco$level == "08TU", 1, 0) dat.Naddeco$a.09WL <- ifelse(dat.Naddeco$level == "09WL", 1, 0) dat.Naddeco$a.10all <- ifelse(dat.Naddeco$level == "10overall", 1, 0)

##estimate separate effects for each factor level rma(yiNaddeco, viNaddeco, mods = cbind(a.01BF, a.02temF, a.03troF, a.04lowland, a.05montane, a.06temG, a.07troG, a.08TU, a.09WL,a.10all), intercept = FALSE, data = dat.Naddeco)

## or rma(yiNaddeco, viNaddeco, mods = ~ factor(level), data = dat.Naddeco)

### comparson between every 2 levels rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "01BF"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "02temF"), data = dat.Naddeco)

61 rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "03troF"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "04lowland"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "05montane"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "06temG"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "07troG"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "08TU"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "09WL"), data = dat.Naddeco) rma(yiNaddeco, viNaddeco, mods = ~ relevel(factor(level), ref = "10overall"), data = dat.Naddeco)

###### phosphorus addition-biome rm(list=ls()) library(metafor)

### read in data dat.Paddeco<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

62 ### calculate log ratio of means and corresponding sampling variances dat.Paddeco <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.Paddeco, append=TRUE) dat.Paddeco

####or yiPaddeco <- with(dat.Paddeco, log(Xe/Xc)) viPaddeco <- with(dat.Paddeco, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco) resPaddeco

### get estimate of heterogeneity for each level of the level factor resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="01BF")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="02temF")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="03troF")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="04lowland")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="05montane"))

63 round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="06temG")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="07troG")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="08TU")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="09WL")) round(resPaddeco$tau2, 4) resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="10overall")) round(resPaddeco$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resPaddeco <- rma(yiPaddeco, viPaddeco, mods=~factor(level), method="DL", data=dat.Paddeco) resPaddeco

### get estimated average log response ratio for each level resPaddeco <- rma(yiPaddeco, viPaddeco, mods=~factor(level) - 1, method="DL", data=dat.Paddeco) resPaddeco

### back-transformed the estimated average log response ratios for each level

64 predict(resPaddeco, transf=exp, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,1)))

### forest plot of the estimated average response ratios for each level predsresPaddeco <- predict(resPaddeco, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,1))) predsresPaddeco resPaddeco <- rma(yiPaddeco, viPaddeco, method="DL", data=dat.Paddeco, subset=(level=="01BF"))

65 nnumberresPaddeco <- subset(dat.Paddeco,level=="01BF" | level=="02temF"| level=="03troF"| level=="04lowland"| level=="05montane"| level=="06temG"|

level=="07troG"| level=="08TU"| level=="09WL"| level=="10overall") levels(nnumberresPaddeco$level) table(nnumberresPaddeco$level)

par(family = 'A', font.main=1) forest(predsresPaddeco$pred, sei=predsresPaddeco$se, atransf=exp, xlim=c(-3,3), at=log(c(.5, 1, 2)), pch=16, cex=1,

slab=c("", "","", "","", "", "", "", "","" ),

xlab="Response ratio", psize=1.5)

text(-3, 12, "Treatment", cex=1, pos=4) text(2.99, 12, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

## Random effects within each level rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="01BF")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="02temF")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="03troF")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="04lowland")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="05montane"))

66 rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="06temG")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="07troG")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="08TU")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="09WL")) rma(yiPaddeco, viPaddeco, data = dat.Paddeco, subset = (level=="10overall"))

##create dummy variables dat.Paddeco$a.01BF <- ifelse(dat.Paddeco$level == "01BF", 1, 0) dat.Paddeco$a.02temF <- ifelse(dat.Paddeco$level == "02temF", 1, 0) dat.Paddeco$a.03troF <- ifelse(dat.Paddeco$level == "03troF", 1, 0) dat.Paddeco$a.04lowland <- ifelse(dat.Paddeco$level == "04lowland", 1, 0)

dat.Paddeco$a.05montane <- ifelse(dat.Paddeco$level == "05montane", 1, 0) dat.Paddeco$a.06temG <- ifelse(dat.Paddeco$level == "06temG", 1, 0) dat.Paddeco$a.07troG <- ifelse(dat.Paddeco$level == "07troG", 1, 0) dat.Paddeco$a.08TU <- ifelse(dat.Paddeco$level == "08TU", 1, 0) dat.Paddeco$a.09WL <- ifelse(dat.Paddeco$level == "09WL", 1, 0) dat.Paddeco$a.10all <- ifelse(dat.Paddeco$level == "10overall", 1, 0)

##estimate separate effects for each factor level rma(yiPaddeco, viPaddeco, mods = cbind(a.01BF, a.02temF, a.03troF, a.04lowland, a.05montane, a.06temG, a.07troG, a.08TU, a.09WL,a.10all), intercept = FALSE, data = dat.Paddeco)

## or rma(yiPaddeco, viPaddeco, mods = ~ factor(level), data = dat.Paddeco)

### comparson between every 2 levels

67 rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "01BF"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "02temF"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "03troF"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "04lowland"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "05montane"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "06temG"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "07troG"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "08TU"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "09WL"), data = dat.Paddeco) rma(yiPaddeco, viPaddeco, mods = ~ relevel(factor(level), ref = "10overall"), data = dat.Paddeco)

###### nitrogen &phosphorus addition (N+P) -biome rm(list=ls()) library(metafor)

### read in data dat.NPaddeco<-read.csv(file.choose())

68 ### calculate log transformed response ratio and corresponding sampling variances

### calculate log ratio of means and corresponding sampling variances dat.NPaddeco <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.NPaddeco, append=TRUE) dat.NPaddeco

####or yiNPaddeco <- with(dat.NPaddeco, log(Xe/Xc)) viNPaddeco <- with(dat.NPaddeco, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco) resNPaddeco

### get estimate of heterogeneity for each level of the level factor resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="01BF")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="02temF")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="03troF")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="04lowland")) round(resNPaddeco$tau2, 4)

69 resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="05montane")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="06temG")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="07troG")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="08TU")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="09WL")) round(resNPaddeco$tau2, 4) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="10overall")) round(resNPaddeco$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resNPaddeco <- rma(yiNPaddeco, viNPaddeco, mods=~factor(level), method="DL", data=dat.NPaddeco) resNPaddeco

### get estimated average log response ratio for each level resNPaddeco <- rma(yiNPaddeco, viNPaddeco, mods=~factor(level) - 1, method="DL", data=dat.NPaddeco) resNPaddeco

70 ### back-transformed the estimated average log response ratios for each level predict(resNPaddeco, transf=exp, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,1)))

### forest plot of the estimated average response ratios for each level predsresNPaddeco <- predict(resNPaddeco, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,1))) predsresNPaddeco

71 resNPaddeco <- rma(yiNPaddeco, viNPaddeco, method="DL", data=dat.NPaddeco, subset=(level=="01BF")) nnumberresNPaddeco <- subset(dat.NPaddeco,level=="01BF" | level=="02temF"| level=="03troF"| level=="04lowland"| level=="05montane"| level=="06temG"|

level=="07troG"| level=="08TU"| level=="09WL"| level=="10overall") levels(nnumberresNPaddeco$level) table(nnumberresNPaddeco$level)

par(family = 'A', font.main=1)

forest(predsresNPaddeco$pred, sei=predsresNPaddeco$se, atransf=exp, xlim=c(-3,3), at=log(c(.5, 1, 2)), pch=16, cex=1,

slab=c("", "","", "","", "", "", "", "","" ),

xlab="Response ratio", psize=1.5)

text(-3, 12, "Treatment", cex=1, pos=4) text(2.99, 12, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

## Random effects within each level rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="01BF")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="02temF")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="03troF")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="04lowland"))

72 rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="05montane")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="06temG")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="07troG")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="08TU")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="09WL")) rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (level=="10overall"))

##create dummy variables dat.NPaddeco$a.01BF <- ifelse(dat.NPaddeco$level == "01BF", 1, 0) dat.NPaddeco$a.02temF <- ifelse(dat.NPaddeco$level == "02temF", 1, 0) dat.NPaddeco$a.03troF <- ifelse(dat.NPaddeco$level == "03troF", 1, 0) dat.NPaddeco$a.04lowland <- ifelse(dat.NPaddeco$level == "04lowland", 1, 0)

dat.NPaddeco$a.05montane <- ifelse(dat.NPaddeco$level == "05montane", 1, 0) dat.NPaddeco$a.06temG <- ifelse(dat.NPaddeco$level == "06temG", 1, 0) dat.NPaddeco$a.07troG <- ifelse(dat.NPaddeco$level == "07troG", 1, 0) dat.NPaddeco$a.08TU <- ifelse(dat.NPaddeco$level == "08TU", 1, 0) dat.NPaddeco$a.09WL <- ifelse(dat.NPaddeco$level == "09WL", 1, 0) dat.NPaddeco$a.10all <- ifelse(dat.NPaddeco$level == "10overall", 1, 0)

##estimate separate effects for each factor level rma(yiNPaddeco, viNPaddeco, mods = cbind(a.01BF, a.02temF, a.03troF, a.04lowland, a.05montane, a.06temG, a.07troG, a.08TU, a.09WL,a.10all), intercept = FALSE, data = dat.NPaddeco)

## or rma(yiNPaddeco, viNPaddeco, mods = ~ factor(level), data = dat.NPaddeco)

73 ### comparson between every 2 levels rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "01BF"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "02temF"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "03troF"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "04lowland"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "05montane"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "06temG"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "07troG"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "08TU"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "09WL"), data = dat.NPaddeco) rma(yiNPaddeco, viNPaddeco, mods = ~ relevel(factor(level), ref = "10overall"), data = dat.NPaddeco)

#### combine 3 for Fig 3 par(mfrow=c(1,3))

###### Figure S1: comparable data for NP meta analysis from same sites rm(list=ls())

74 library(metafor)

### read in data dat.NPsame<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

### calculate log ratio of means and corresponding sampling variances dat.NPsame <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.NPsame, append=TRUE) dat.NPsame

####or yiNPsame <- with(dat.NPsame, log(Xe/Xc)) viNPsame <- with(dat.NPsame, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resNPsame <- rma(yiNPsame, viNPsame, method="DL", data=dat.NPsame) resNPsame

### get estimate of heterogeneity for each level of the level factor resNPsame <- rma(yiNPsame, viNPsame, method="DL", data=dat.NPsame, subset=(Fert=="01N")) round(resNPsame$tau2, 4) resNPsame <- rma(yiNPsame, viNPsame, method="DL", data=dat.NPsame, subset=(Fert=="02P")) round(resNPsame$tau2, 4) resNPsame <- rma(yiNPsame, viNPsame, method="DL", data=dat.NPsame, subset=(Fert=="03NP"))

75 round(resNPsame$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resNPsame <- rma(yiNPsame, viNPsame, mods=~factor(Fert), method="DL", data=dat.NPsame) resNPsame

### get estimated average log response ratio for each level resNPsame <- rma(yiNPsame, viNPsame, mods=~factor(Fert) - 1, method="DL", data=dat.NPsame) resNPsame

### back-transformed the estimated average log response ratios for each level predict(resNPsame, transf=exp, newmods=rbind(c(1,0,0),

c(0,1,0),

c(0,0,1)))

### forest plot of the estimated average response ratios for each level predsresNPsame <- predict(resNPsame, newmods=rbind(c(1,0,0),

c(0,1,0),

c(0,0,1))) predsresNPsame resNPsame <- rma(yiNPsame, viNPsame, method="DL", data=dat.NPsame, subset=(Fert=="01N")) nnumberresNPsame <- subset(dat.NPsame,Fert=="01N" | Fert=="02P"| Fert=="03NP")

76 levels(nnumberresNPsame$Fert) table(nnumberresNPsame$Fert)

par(family = 'A', font.main=1) forest(predsresNPsame$pred, sei=predsresNPsame$se, atransf=exp, xlim=c(-0.5,2), at=log(c(.75, 1, 2)), pch=16, cex=1,

slab=c("N", "P","N+P"),

xlab="", psize=1.5) text(-0.5, 5, "Treatment", cex=1, pos=4) text( 1.5, 5, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

## Random effects within each level rma(yiNPsame, viNPsame, data = dat.NPsame, subset = (Fert=="01N")) rma(yiNPsame, viNPsame, data = dat.NPsame, subset = (Fert=="02P")) rma(yiNPsame, viNPsame, data = dat.NPsame, subset = (Fert=="03NP"))

##create dummy variables dat.NPsame$a.01N <- ifelse(dat.NPsame$Fert == "01N", 1, 0) dat.NPsame$a.02P <- ifelse(dat.NPsame$Fert == "02P", 1, 0) dat.NPsame$a.03NP <- ifelse(dat.NPsame$Fert == "03NP", 1, 0)

77 ##estimate separate effects for each factor level rma(yiNPsame, viNPsame, mods = cbind(a.01N, a.02P, a.03NP), intercept = FALSE, data = dat.NPsame)

## or rma(yiNPsame, viNPsame, mods = ~ factor(Fert), data = dat.NPsame)

### comparson between every 2 levels rma(yiNPsame, viNPsame, mods = ~ relevel(factor(Fert), ref = "01N"), data = dat.NPsame) rma(yiNPsame, viNPsame, mods = ~ relevel(factor(Fert), ref = "02P"), data = dat.NPsame) rma(yiNPsame, viNPsame, mods = ~ relevel(factor(Fert), ref = "03NP"), data = dat.NPsame)

########### Figure S2: lnRR--N&P amount rm(list=ls())

### read in data library(HH)

NPrate<-read.csv(file.choose()) head(NPrate) shapiro.test(NPrate$lnRRN) shapiro.test(NPrate$lnRRP)

Nratelm<-lm(lnRRN~Nrate, data=NPrate)

Pratelm<-lm(lnRRP~Prate, data=NPrate) summary(Nratelm) summary(Pratelm)

78

### Figure S3: meta-soil type

###### nitrogen addition-soil type rm(list=ls()) library(metafor)

### read in data dat.Naddsoiltype<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

### calculate log ratio of means and corresponding sampling variances dat.Naddsoiltype <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.Naddsoiltype, append=TRUE) dat.Naddsoiltype

####or yiNaddsoiltype <- with(dat.Naddsoiltype, log(Xe/Xc)) viNaddsoiltype <- with(dat.Naddsoiltype, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype) resNaddsoiltype

79 ### get estimate of heterogeneity for each level of the level factor resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Acrisol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Andosol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Arenosol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Calcisol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Cambisol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Ferralsol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Gleyisols")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Histosol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Leptosol")) round(resNaddsoiltype$tau2, 4)

80 resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Lixsol")) round(resNaddsoiltype$tau2, 4) esNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Luvisol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Nitisol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Phaeozem")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Podzol")) round(resNaddsoiltype$tau2, 4) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Vertisol")) round(resNaddsoiltype$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, mods=~factor(soiltype), method="DL", data=dat.Naddsoiltype) resNaddsoiltype

### get estimated average log response ratio for each level resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, mods=~factor(soiltype) - 1, method="DL", data=dat.Naddsoiltype)

81 resNaddsoiltype

### back-transformed the estimated average log response ratios for each level predict(resNaddsoiltype, transf=exp, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)))

### forest plot of the estimated average response ratios for each soiltype predsresNaddsoiltype <- predict(resNaddsoiltype, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),

82 c(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1))) predsresNaddsoiltype

resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype, subset=(soiltype=="Acrisol"))

nnumberNaddsoiltype <- subset(dat.Naddsoiltype,soiltype=="Acrisol" | soiltype=="Andosol"| soiltype=="Arenosol"| soiltype=="Calcisol"| soiltype=="Cambisol"|

soiltype=="Ferralsol"|soiltype=="Gleyisols"| soiltype=="Histosol"| soiltype=="Leptosol"| soiltype=="Lixsol" |

soiltype=="Luvisol"| soiltype=="Nitisol"| soiltype=="Phaeozem"| soiltype=="Podzol"| soiltype=="Vertisol") levels(nnumberNaddsoiltyper$soiltype) table(nnumberNaddsoiltype$soiltype)

83 par(family = 'A', font.main=1) par(mfrow=c(1,3)) forest(predsresNaddsoiltype$pred, sei=predsresNaddsoiltype$se, atransf=exp, xlim=c(- 3,3), at=log(c(.5, 1, 2, 4)), pch=16, cex=1,

slab=c("Acrisols", "Andosols", "Arenosols", "Calcisols", "Cambisols",

"Ferralsols", "Gleysols", "Histosols", "Leptosols", "Lixsols",

"Luvisols", "Nitisols", "Phaeozems", "Podzols", "Vertisols" ),

xlab="", psize=1.5) text(-3, 17, "Soil type", cex=1, pos=4) text( 2.99, 17, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

resNaddsoiltype <- rma(yiNaddsoiltype, viNaddsoiltype, method="DL", data=dat.Naddsoiltype)

rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (soiltype=="Acrisol"))

## Random effects within each level rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Acrisol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Andosol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Arenosol"))

84 rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Calcisol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Cambisol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Ferralsol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Gleyisols")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Histosol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Leptosol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Lixsol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Luvisol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Nitisol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Phaeozem")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Podzol")) rma(yiNaddsoiltype, viNaddsoiltype, data = dat.Naddsoiltype, subset = (soiltype=="Vertisol"))

##create dummy variables dat.Naddsoiltype$a.Acrisol <- ifelse(dat.Naddsoiltype$level == "Acrisol", 1, 0) dat.Naddsoiltype$a.Andosol <- ifelse(dat.Naddsoiltype$level == "Andosol", 1, 0) dat.Naddsoiltype$a.Arenosol <- ifelse(dat.Naddsoiltype$level == "Arenosol", 1, 0) dat.Naddsoiltype$a.Calcisol <- ifelse(dat.Naddsoiltype$level == "Calcisol", 1, 0)

85 dat.Naddsoiltype$a.Cambisol <- ifelse(dat.Naddsoiltype$level == "Cambisol", 1, 0) dat.Naddsoiltype$a.Ferralsol <- ifelse(dat.Naddsoiltype$level == "Ferralsol", 1, 0) dat.Naddsoiltype$a.Gleyisols <- ifelse(dat.Naddsoiltype$level == "Gleyisols", 1, 0) dat.Naddsoiltype$a.Histosol <- ifelse(dat.Naddsoiltype$level == "Histosol", 1, 0) dat.Naddsoiltype$a.Leptosol <- ifelse(dat.Naddsoiltype$level == "Leptosol", 1, 0) dat.Naddsoiltype$a.Lixsol <- ifelse(dat.Naddsoiltype$level == "Lixsol", 1, 0) dat.Naddsoiltype$a.Luvisol <- ifelse(dat.Naddsoiltype$level == "Luvisol", 1, 0) dat.Naddsoiltype$a.Nitisol <- ifelse(dat.Naddsoiltype$level == "Nitisol", 1, 0) dat.Naddsoiltype$a.Phaeozem <- ifelse(dat.Naddsoiltype$level == "Phaeozem", 1, 0) dat.Naddsoiltype$a.Podzol <- ifelse(dat.Naddsoiltype$level == "Podzol", 1, 0) dat.Naddsoiltype$a.Vertisol <- ifelse(dat.Naddsoiltype$level == "Vertisol", 1, 0)

##estimate separate effects for each factor level rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ factor(level), data = dat.Naddsoiltype)

### comparson between every 2 levels rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Acrisol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Andosol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Arenosol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Calcisol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Cambisol"), data = dat.Naddsoiltype)

86 rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Ferralsol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Gleyisols"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Histosol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Leptosol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Lixsol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Luvisol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Nitisol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Phaeozem"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Podzol"), data = dat.Naddsoiltype) rma(yiNaddsoiltype, viNaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Vertisol"), data = dat.Naddsoiltype)

###### P addition-soil type rm(list=ls()) library(metafor)

### read in data dat.Paddsoiltype<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

87 ### calculate log ratio of means and corresponding sampling variances dat.Paddsoiltype <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.Paddsoiltype, append=TRUE) dat.Paddsoiltype

####or yiPaddsoiltype <- with(dat.Paddsoiltype, log(Xe/Xc)) viPaddsoiltype <- with(dat.Paddsoiltype, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype) resPaddsoiltype

### get estimate of heterogeneity for each level of the level factor resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Acrisol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Andosol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Arenosol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Calcisol")) round(resPaddsoiltype$tau2, 4)

88 resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Cambisol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Ferralsol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Gleyisols")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Histosol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Leptosol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Lixsol")) round(resPaddsoiltype$tau2, 4) esPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Luvisol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Nitisol")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Phaeozem")) round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Podzol"))

89 round(resPaddsoiltype$tau2, 4) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Vertisol")) round(resPaddsoiltype$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, mods=~factor(soiltype), method="DL", data=dat.Paddsoiltype) resPaddsoiltype

### get estimated average log response ratio for each level resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, mods=~factor(soiltype) - 1, method="DL", data=dat.Paddsoiltype) resPaddsoiltype

### back-transformed the estimated average log response ratios for each level predict(resPaddsoiltype, transf=exp, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),

90 c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)))

### forest plot of the estimated average response ratios for each soiltype predsresPaddsoiltype <- predict(resPaddsoiltype, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)))

91 predsresPaddsoiltype

resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype, subset=(soiltype=="Acrisol"))

nnumberPaddsoiltype <- subset(dat.Paddsoiltype,soiltype=="Acrisol" | soiltype=="Andosol"| soiltype=="Arenosol"| soiltype=="Calcisol"| soiltype=="Cambisol"|

soiltype=="Ferralsol"|soiltype=="Gleyisols"| soiltype=="Histosol"| soiltype=="Leptosol"| soiltype=="Lixsol" |

soiltype=="Luvisol"| soiltype=="Nitisol"| soiltype=="Phaeozem"| soiltype=="Podzol"| soiltype=="Vertisol") levels(nnumberPaddsoiltyper$soiltype) table(nnumberPaddsoiltype$soiltype)

par(family = 'A', font.main=1)

forest(predsresPaddsoiltype$pred, sei=predsresPaddsoiltype$se, atransf=exp, xlim=c(- 3,3), at=log(c(.5, 1, 2, 4)), pch=16, cex=1,

slab=c("Acrisols", "Andosols", "Arenosols", "Calcisols", "Cambisols",

"Ferralsols", "Gleysols", "Histosols", "Leptosols", "Lixsols",

"Luvisols", "Nitisols", "Phaeozems", "Podzols", "Vertisols" ),

xlab="Response ratio", psize=1.5) text(-3, 17, "Soil type", cex=1.5, pos=4) text( 2.99, 17, "Response ratio [95% CI]", cex=1.5,pos=2)

92 title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

resPaddsoiltype <- rma(yiPaddsoiltype, viPaddsoiltype, method="DL", data=dat.Paddsoiltype)

rma(yiNPaddeco, viNPaddeco, data = dat.NPaddeco, subset = (soiltype=="Acrisol"))

## Random effects within each level rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Acrisol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Andosol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Arenosol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Calcisol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Cambisol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Ferralsol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Gleyisols")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Histosol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Leptosol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Lixsol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Luvisol"))

93 rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Nitisol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Phaeozem")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Podzol")) rma(yiPaddsoiltype, viPaddsoiltype, data = dat.Paddsoiltype, subset = (soiltype=="Vertisol"))

##create dummy variables dat.Paddsoiltype$a.Acrisol <- ifelse(dat.Paddsoiltype$level == "Acrisol", 1, 0) dat.Paddsoiltype$a.Andosol <- ifelse(dat.Paddsoiltype$level == "Andosol", 1, 0) dat.Paddsoiltype$a.Arenosol <- ifelse(dat.Paddsoiltype$level == "Arenosol", 1, 0) dat.Paddsoiltype$a.Calcisol <- ifelse(dat.Paddsoiltype$level == "Calcisol", 1, 0) dat.Paddsoiltype$a.Cambisol <- ifelse(dat.Paddsoiltype$level == "Cambisol", 1, 0) dat.Paddsoiltype$a.Ferralsol <- ifelse(dat.Paddsoiltype$level == "Ferralsol", 1, 0) dat.Paddsoiltype$a.Gleyisols <- ifelse(dat.Paddsoiltype$level == "Gleyisols", 1, 0) dat.Paddsoiltype$a.Histosol <- ifelse(dat.Paddsoiltype$level == "Histosol", 1, 0) dat.Paddsoiltype$a.Leptosol <- ifelse(dat.Paddsoiltype$level == "Leptosol", 1, 0) dat.Paddsoiltype$a.Lixsol <- ifelse(dat.Paddsoiltype$level == "Lixsol", 1, 0) dat.Paddsoiltype$a.Luvisol <- ifelse(dat.Paddsoiltype$level == "Luvisol", 1, 0) dat.Paddsoiltype$a.Nitisol <- ifelse(dat.Paddsoiltype$level == "Nitisol", 1, 0) dat.Paddsoiltype$a.Phaeozem <- ifelse(dat.Paddsoiltype$level == "Phaeozem", 1, 0) dat.Paddsoiltype$a.Podzol <- ifelse(dat.Paddsoiltype$level == "Podzol", 1, 0) dat.Paddsoiltype$a.Vertisol <- ifelse(dat.Paddsoiltype$level == "Vertisol", 1, 0)

##estimate separate effects for each factor level

94 rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ factor(level), data = dat.Paddsoiltype)

### comparson between every 2 levels rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Acrisol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Andosol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Arenosol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Calcisol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Cambisol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Ferralsol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Gleyisols"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Histosol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Leptosol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Lixsol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Luvisol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Nitisol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Phaeozem"), data = dat.Paddsoiltype)

95 rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Podzol"), data = dat.Paddsoiltype) rma(yiPaddsoiltype, viPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Vertisol"), data = dat.Paddsoiltype)

##### N+P addition-soil type rm(list=ls()) library(metafor)

### read in data dat.NPaddsoiltype<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

### calculate log ratio of means and corresponding sampling variances dat.NPaddsoiltype <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.NPaddsoiltype, append=TRUE) dat.NPaddsoiltype

####or yiNPaddsoiltype <- with(dat.NPaddsoiltype, log(Xe/Xc)) viNPaddsoiltype <- with(dat.NPaddsoiltype, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype) resNPaddsoiltype

96 ### get estimate of heterogeneity for each level of the level factor resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Acrisol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Andosol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Arenosol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Calcisol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Cambisol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Ferralsol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Gleyisols")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Histosol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Leptosol")) round(resNPaddsoiltype$tau2, 4)

97 resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Lixsol")) round(resNPaddsoiltype$tau2, 4) esNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Luvisol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Nitisol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Phaeozem")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Podzol")) round(resNPaddsoiltype$tau2, 4) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Vertisol")) round(resNPaddsoiltype$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, mods=~factor(soiltype), method="DL", data=dat.NPaddsoiltype) resNPaddsoiltype

### get estimated average log response ratio for each level resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, mods=~factor(soiltype) - 1, method="DL", data=dat.NPaddsoiltype)

98 resNPaddsoiltype

### back-transformed the estimated average log response ratios for each level predict(resNPaddsoiltype, transf=exp, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)))

### forest plot of the estimated average response ratios for each soiltype predsresNPaddsoiltype <- predict(resNPaddsoiltype, newmods=rbind(c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),

99 c(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0),

c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1))) predsresNPaddsoiltype

resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype, subset=(soiltype=="Acrisol"))

nnumberNPaddsoiltype <- subset(dat.NPaddsoiltype,soiltype=="Acrisol" | soiltype=="Andosol"| soiltype=="Arenosol"| soiltype=="Calcisol"| soiltype=="Cambisol"|

soiltype=="Ferralsol"|soiltype=="Gleyisols"| soiltype=="Histosol"| soiltype=="Leptosol"| soiltype=="Lixsol" |

soiltype=="Luvisol"| soiltype=="Nitisol"| soiltype=="Phaeozem"| soiltype=="Podzol"| soiltype=="Vertisol") levels(nnumberNPaddsoiltyper$soiltype) table(nnumberNPaddsoiltype$soiltype)

100 par(family = 'A', font.main=1) forest(predsresNPaddsoiltype$pred, sei=predsresNPaddsoiltype$se, atransf=exp, xlim=c(-3,3), at=log(c(.5, 1, 2, 4)), pch=16, cex=1,

slab=c("Acrisols", "Andosols", "Arenosols", "Calcisols", "Cambisols",

"Ferralsols", "Gleysols", "Histosols", "Leptosols", "Lixsols",

"Luvisols", "Nitisols", "Phaeozems", "Podzols", "Vertisols" ),

xlab="Response ratio", psize=1.5) text(-3, 17, "Soil type", cex=1.5, pos=4) text( 2.99, 17, "Response ratio [95% CI]", cex=1.5,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

resNPaddsoiltype <- rma(yiNPaddsoiltype, viNPaddsoiltype, method="DL", data=dat.NPaddsoiltype)

rma(yiNNPaddeco, viNNPaddeco, data = dat.NNPaddeco, subset = (soiltype=="Acrisol"))

## Random effects within each level rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Acrisol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Andosol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Arenosol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Calcisol"))

101 rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Cambisol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Ferralsol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Gleyisols")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Histosol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Leptosol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Lixsol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Luvisol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Nitisol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Phaeozem")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Podzol")) rma(yiNPaddsoiltype, viNPaddsoiltype, data = dat.NPaddsoiltype, subset = (soiltype=="Vertisol"))

##create dummy variables dat.NPaddsoiltype$a.Acrisol <- ifelse(dat.NPaddsoiltype$level == "Acrisol", 1, 0) dat.NPaddsoiltype$a.Andosol <- ifelse(dat.NPaddsoiltype$level == "Andosol", 1, 0) dat.NPaddsoiltype$a.Arenosol <- ifelse(dat.NPaddsoiltype$level == "Arenosol", 1, 0) dat.NPaddsoiltype$a.Calcisol <- ifelse(dat.NPaddsoiltype$level == "Calcisol", 1, 0) dat.NPaddsoiltype$a.Cambisol <- ifelse(dat.NPaddsoiltype$level == "Cambisol", 1, 0)

102 dat.NPaddsoiltype$a.Ferralsol <- ifelse(dat.NPaddsoiltype$level == "Ferralsol", 1, 0) dat.NPaddsoiltype$a.Gleyisols <- ifelse(dat.NPaddsoiltype$level == "Gleyisols", 1, 0) dat.NPaddsoiltype$a.Histosol <- ifelse(dat.NPaddsoiltype$level == "Histosol", 1, 0) dat.NPaddsoiltype$a.Leptosol <- ifelse(dat.NPaddsoiltype$level == "Leptosol", 1, 0) dat.NPaddsoiltype$a.Lixsol <- ifelse(dat.NPaddsoiltype$level == "Lixsol", 1, 0) dat.NPaddsoiltype$a.Luvisol <- ifelse(dat.NPaddsoiltype$level == "Luvisol", 1, 0) dat.NPaddsoiltype$a.Nitisol <- ifelse(dat.NPaddsoiltype$level == "Nitisol", 1, 0) dat.NPaddsoiltype$a.Phaeozem <- ifelse(dat.NPaddsoiltype$level == "Phaeozem", 1, 0) dat.NPaddsoiltype$a.Podzol <- ifelse(dat.NPaddsoiltype$level == "Podzol", 1, 0) dat.NPaddsoiltype$a.Vertisol <- ifelse(dat.NPaddsoiltype$level == "Vertisol", 1, 0)

##estimate separate effects for each factor level rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ factor(level), data = dat.NPaddsoiltype)

### comparson between every 2 levels rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Acrisol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Andosol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Arenosol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Calcisol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Cambisol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Ferralsol"), data = dat.NPaddsoiltype)

103 rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Gleyisols"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Histosol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Leptosol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Lixsol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Luvisol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Nitisol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Phaeozem"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Podzol"), data = dat.NPaddsoiltype) rma(yiNPaddsoiltype, viNPaddsoiltype, mods = ~ relevel(factor(soiltype), ref = "Vertisol"), data = dat.NPaddsoiltype)

### Figure S4: meta-BC

###### nitrogen addition-BC rm(list=ls()) library(metafor)

### read in data dat.NaddBC<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

104 ### calculate log ratio of means and corresponding sampling variances dat.NaddBC <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.NaddBC, append=TRUE) dat.NaddBC

####or yiNaddBC <- with(dat.NaddBC, log(Xe/Xc)) viNaddBC <- with(dat.NaddBC, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resNaddBC <- rma(yiNaddBC, viNaddBC, method="DL", data=dat.NaddBC) resNaddBC

### get estimate of heterogeneity for each level of the level factor resNaddBC <- rma(yiNaddBC, viNaddBC, method="DL", data=dat.NaddBC, subset=(BC=="B")) round(resNaddBC$tau2, 4) resNaddBC <- rma(yiNaddBC, viNaddBC, method="DL", data=dat.NaddBC, subset=(BC=="C")) round(resNaddBC$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resNaddBC <- rma(yiNaddBC, viNaddBC, mods=~factor(BC), method="DL", data=dat.NaddBC) resNaddBC

105 ### get estimated average log response ratio for each level resNaddBC <- rma(yiNaddBC, viNaddBC, mods=~factor(BC) - 1, method="DL", data=dat.NaddBC) resNaddBC

### back-transformed the estimated average log response ratios for each level predict(resNaddBC, transf=exp, newmods=rbind(c(1,0), c(0,1)))

### forest plot of the estimated average response ratios for each level predsresNaddBC <- predict(resNaddBC, newmods=rbind(c(1,0), c(0,1))) predsresNaddBC resNaddBC <- rma(yiNaddBC, viNaddBC, method="DL", data=dat.NaddBC, subset=(BC=="B")) nnumberresNaddBC <- subset(dat.NaddBC,BC=="B"| BC=="C") levels(nnumberresNaddBC$BC) table(nnumberresNaddBC$BC)

par(family = 'A', font.main=1) par(mfrow=c(1,3)) forest(predsresNaddBC$pred, sei=predsresNaddBC$se, atransf=exp, xlim=c(-3,3), at=log(c(.5, 1, 2)), pch=16, cex=1,

slab=c("Broadleaves", "Coniferous"),

xlab="", psize=1.5) text(-2.3, 3.5, "leaf type", cex=1, pos=2) text( 2.99, 3.5, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

106 ### Categorical moderator variables

## Random effects within each level rma(yiNaddBC, viNaddBC, data = dat.NaddBC, subset = (BC=="B")) rma(yiNaddBC, viNaddBC, data = dat.NaddBC, subset = (BC=="C"))

##create dummy variables dat.NaddBC$B <- ifelse(dat.NaddBC$BC == "B", 1, 0) dat.NaddBC$C <- ifelse(dat.NaddBC$BC == "C", 1, 0)

##estimate separate effects for each factor level rma(yiNaddBC, viNaddBC, mods = cbind(B, C), intercept = FALSE, data = dat.NaddBC)

## or rma(yiNaddBC, viNaddBC, mods = ~ factor(BC), data = dat.NaddBC)

### comparson between every 2 levels rma(yiNaddBC, viNaddBC, mods = ~ relevel(factor(BC), ref = "B"), data = dat.NaddBC) rma(yiNaddBC, viNaddBC, mods = ~ relevel(factor(BC), ref = "C"), data = dat.NaddBC)

###### P addition-BC rm(list=ls())

107 library(metafor)

### read in data dat.PaddBC<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

### calculate log ratio of means and corresponding sampling variances dat.PaddBC <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.PaddBC, append=TRUE) dat.PaddBC

####or yiPaddBC <- with(dat.PaddBC, log(Xe/Xc)) viPaddBC <- with(dat.PaddBC, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resPaddBC <- rma(yiPaddBC, viPaddBC, method="DL", data=dat.PaddBC) resPaddBC

### get estimate of heterogeneity for each level of the level factor resPaddBC <- rma(yiPaddBC, viPaddBC, method="DL", data=dat.PaddBC, subset=(BC=="B")) round(resPaddBC$tau2, 4) resPaddBC <- rma(yiPaddBC, viPaddBC, method="DL", data=dat.PaddBC, subset=(BC=="C")) round(resPaddBC$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

108 ### (see results of Test of Moderators) resPaddBC <- rma(yiPaddBC, viPaddBC, mods=~factor(BC), method="DL", data=dat.PaddBC) resPaddBC

### get estimated average log response ratio for each level resPaddBC <- rma(yiPaddBC, viPaddBC, mods=~factor(BC) - 1, method="DL", data=dat.PaddBC) resPaddBC

### back-transformed the estimated average log response ratios for each level predict(resPaddBC, transf=exp, newmods=rbind(c(1,0), c(0,1)))

### forest plot of the estimated average response ratios for each level predsresPaddBC <- predict(resPaddBC, newmods=rbind(c(1,0), c(0,1))) predsresPaddBC resPaddBC <- rma(yiPaddBC, viPaddBC, method="DL", data=dat.PaddBC, subset=(BC=="B")) nnumberresPaddBC <- subset(dat.PaddBC,BC=="B"| BC=="C") levels(nnumberresPaddBC$BC) table(nnumberresPaddBC$BC)

par(family = 'A', font.main=1) forest(predsresPaddBC$pred, sei=predsresPaddBC$se, atransf=exp, xlim=c(-3,3), at=log(c(.5, 1, 2)), pch=16, cex=1,

slab=c("Broadleaves", "Coniferous"),

xlab="", psize=1.5)

109 text(-2.3, 3.5, "life type", cex=1, pos=2) text( 2.99, 3.5, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

## Random effects within each level rma(yiPaddBC, viPaddBC, data = dat.PaddBC, subset = (BC=="B")) rma(yiPaddBC, viPaddBC, data = dat.PaddBC, subset = (BC=="C"))

##create dummy variables dat.PaddBC$B <- ifelse(dat.PaddBC$BC == "B", 1, 0) dat.PaddBC$C <- ifelse(dat.PaddBC$BC == "C", 1, 0)

##estimate separate effects for each factor level rma(yiPaddBC, viPaddBC, mods = cbind(B, C), intercept = FALSE, data = dat.PaddBC)

## or rma(yiPaddBC, viPaddBC, mods = ~ factor(BC), data = dat.PaddBC)

### comparson between every 2 levels rma(yiPaddBC, viPaddBC, mods = ~ relevel(factor(BC), ref = "B"), data = dat.PaddBC) rma(yiPaddBC, viPaddBC, mods = ~ relevel(factor(BC), ref = "C"), data = dat.PaddBC)

110 ###### N+P addition-BC rm(list=ls()) library(metafor)

### read in data dat.NPaddBC<-read.csv(file.choose())

### calculate log transformed response ratio and corresponding sampling variances

### calculate log ratio of means and corresponding sampling variances dat.NPaddBC <- escalc(m1i=Xe, sd1i=Se, n1i=Ne, m2i=Xc, sd2i=Sc, n2i=Nc, measure="ROM", data=dat.NPaddBC, append=TRUE) dat.NPaddBC

####or yiNPaddBC <- with(dat.NPaddBC, log(Xe/Xc)) viNPaddBC <- with(dat.NPaddBC, (1/Ne)*(Se/Xe)^2 + (1/Nc)*(Sc/Xc)^2)

### meta-analysis of log ratio of means using a random-effects model resNPaddBC <- rma(yiNPaddBC, viNPaddBC, method="DL", data=dat.NPaddBC) resNPaddBC

### get estimate of heterogeneity for each level of the level factor resNPaddBC <- rma(yiNPaddBC, viNPaddBC, method="DL", data=dat.NPaddBC, subset=(BC=="B")) round(resNPaddBC$tau2, 4) resNPaddBC <- rma(yiNPaddBC, viNPaddBC, method="DL", data=dat.NPaddBC, subset=(BC=="C"))

111 round(resNPaddBC$tau2, 4)

### examine if the level factor actually has an influence on the average log response ratio

### (see results of Test of Moderators) resNPaddBC <- rma(yiNPaddBC, viNPaddBC, mods=~factor(BC), method="DL", data=dat.NPaddBC) resNPaddBC

### get estimated average log response ratio for each level resNPaddBC <- rma(yiNPaddBC, viNPaddBC, mods=~factor(BC) - 1, method="DL", data=dat.NPaddBC) resNPaddBC

### back-transformed the estimated average log response ratios for each level predict(resNPaddBC, transf=exp, newmods=rbind(c(1,0), c(0,1)))

### forest plot of the estimated average response ratios for each level predsresNPaddBC <- predict(resNPaddBC, newmods=rbind(c(1,0), c(0,1))) predsresNPaddBC resNPaddBC <- rma(yiNPaddBC, viNPaddBC, method="DL", data=dat.NPaddBC, subset=(BC=="B")) nnumberresNPaddBC <- subset(dat.NPaddBC,BC=="B"| BC=="C") levels(nnumberresNPaddBC$BC) table(nnumberresNPaddBC$BC)

par(family = 'A', font.main=1)

112 forest(predsresNPaddBC$pred, sei=predsresNPaddBC$se, atransf=exp, xlim=c(-3,3), at=log(c(.5, 1, 2)), pch=16, cex=1,

slab=c("Broadleaves", "Coniferous"),

xlab="", psize=1.5) text(-2.3, 3.5, "life type", cex=1, pos=2) text( 2.99, 3.5, "Response ratio [95% CI]", cex=1,pos=2) title("Forest Plot of Esimted Average Reponse Ratios for Each Level")

### Categorical moderator variables

## Random effects within each level rma(yiNPaddBC, viNPaddBC, data = dat.NPaddBC, subset = (BC=="B")) rma(yiNPaddBC, viNPaddBC, data = dat.NPaddBC, subset = (BC=="C"))

##create dummy variables dat.NPaddBC$B <- ifelse(dat.NPaddBC$BC == "B", 1, 0) dat.NPaddBC$C <- ifelse(dat.NPaddBC$BC == "C", 1, 0)

##estimate separate effects for each factor level rma(yiNPaddBC, viNPaddBC, mods = cbind(B, C), intercept = FALSE, data = dat.NPaddBC)

## or rma(yiNPaddBC, viNPaddBC, mods = ~ factor(BC), data = dat.NPaddBC)

### comparson between every 2 levels

113 rma(yiNPaddBC, viNPaddBC, mods = ~ relevel(factor(BC), ref = "B"), data = dat.NPaddBC) rma(yiNPaddBC, viNPaddBC, mods = ~ relevel(factor(BC), ref = "C"), data = dat.NPaddBC)

soilType biome BC pH SOM C N P NO3 NH4 Nav Pav

####### Table S1 ANCOVA of biome and N or P

### read in data rm(list=ls()) library(HH) biomeNP<-read.csv(file.choose()) biomeNP$FRP<-log10(biomeNP$FRP) shapiro.test(biomeNP$FRP) bartlett.test(FRP~biome, data=biomeNP)

ancova(FRP~soilN*biome, data=biomeNP) ancova(FRP~soilP*biome, data=biomeNP) biomeNancova <- ancova(FRP~soilN*biome, data=biomeNP) biomePancova <- ancova(FRP~soilP*biome, data=biomeNP) attr(biomeNancova, "trellis") attr(biomePancova, "trellis")

114 summary(aov(FRP~soilN*biome, data=biomeNP)) summary(aov(FRP~soilP*biome, data=biomeNP))

lmbiomeN<-(lm(FRP~soilN*biome, data=biomeNP)) lmbiomeP<-(lm(FRP~soilP*biome, data=biomeNP)) summary(lmbiomeN) summary(lmbiomeP)

glmin<-glm(FRP~soilN*biome, data=dat.ing) summary(glmin) summary(aov(glmin))

### Table S2 Relative importance rm(list=ls()) library(gbm) library(dismo)

### read in data mydata<-read.csv(file.choose()) head(mydata) bf<-subset(mydata, mydata$biome=="1BF") temf<-subset(mydata, mydata$biome=="2temF") lowland<-subset(mydata, mydata$biome=="3lowland")

115 montane<-subset(mydata, mydata$biome=="4montane") temg<-subset(mydata, mydata$biome=="5temG") trog<-subset(mydata, mydata$biome=="6troG") tu<-subset(mydata, mydata$biome=="7TU") wet<-subset(mydata, mydata$biome=="8wet") trof<-rbind(lowland,montane) forest<-rbind(bf,temf,trof) grassland<-rbind(temg, trog)

#### data size length(which(!is.na(mydata$FRP)))

####### overall

FRP0.gbm <- gbm.step(data=(subset(mydata,!is.na(mydata$FRP))), gbm.x=2:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0,0,0,0,0,0),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

FRP1.gbm <- gbm.step(data=(subset(mydata,!is.na(mydata$FRP))), gbm.x=2:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,1,1,1,1,1,1),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

### how much explantation

FRP<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

116 SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRP<-1-SSerror/SStotal

return(FRP)

}

FRP(FRP1.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRP0.gbm);text(10,6.2, "FRP", adj=0) summary(FRP1.gbm); text(10,6.2, "FRP", adj=0)## relative importance

gbm.plot(FRP0.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRP1.gbm, n.plots=5, write.title = FALSE) ## plot

#####boreal forests

FRP0bf.gbm <- gbm.step(data=(subset(bf,!is.na(bf$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0,0,0,0,0),

tree.complexity=3, learning.rate=0.0005, bag.fraction=0.5)

FRP1bf.gbm <- gbm.step(data=(subset(bf,!is.na(bf$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,1,1,1,1,1,1),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

### how much explantation

FRPbf1<-function(BRTmodel)

117 { #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPbf1<-1-SSerror/SStotal

return(FRPbf1)

}

FRPbf1(FRP1bf.gbm) ## % explanation

FRP0bf<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRP0bf<-1-SSerror/SStotal

return(FRP0bf)

}

FRP0bf(FRP0bf.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRP0bf.gbm);text(10,6.2, "bf FRP", adj=0) summary(FRP1bf.gbm); text(10,6.2, "bf FRP", adj=0)## relative importance

gbm.plot(FRP0bf.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRP1bf.gbm, n.plots=5, write.title = FALSE) ## plot

118 #### temperate forests

FRP0temf.gbm <- gbm.step(data=(subset(temf,!is.na(temf$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0,0,0,0,0),

tree.complexity=3, learning.rate=0.0005, bag.fraction=0.5)

FRP1temf.gbm <- gbm.step(data=(subset(temf,!is.na(temf$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,1,1,1,1,1,1),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

### how much explantation

FRPtemf1<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPtemf1<-1-SSerror/SStotal

return(FRPtemf1)

}

FRPtemf1(FRP1temf.gbm) ## % explanation

FRP0temf<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

119 SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRP0temf<-1-SSerror/SStotal

return(FRP0temf)

}

FRP0temf(FRP0temf.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRP0temf.gbm);text(10,6.2, "temf FRP", adj=0) summary(FRP1temf.gbm); text(10,6.2, "temf FRP", adj=0)## relative importance

gbm.plot(FRP0temf.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRP1temf.gbm, n.plots=5, write.title = FALSE)

#### temperate grasslands

FRP0temg.gbm <- gbm.step(data=(subset(temg,!is.na(temg$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0,0,0,0,0),

tree.complexity=3, learning.rate=0.0005, bag.fraction=0.5)

FRP1temg.gbm <- gbm.step(data=(subset(temg,!is.na(temg$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,1,1,1,1,1,1),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

### how much explantation

FRPtemg1<-function(BRTmodel)

{ #source("brt.functions.R")

120 #library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPtemg1<-1-SSerror/SStotal

return(FRPtemg1)

}

FRPtemg1(FRP1temg.gbm) ## % explanation

FRP0temg<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRP0temg<-1-SSerror/SStotal

return(FRP0temg)

}

FRP0temg(FRP0temg.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRP0temg.gbm);text(10,6.2, "temg FRP", adj=0) summary(FRP1temg.gbm); text(10,6.2, "temg FRP", adj=0)## relative importance

gbm.plot(FRP0temg.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRP1temg.gbm, n.plots=5, write.title = FALSE)

121 #### lowland tropical forests

FRP0lowland.gbm <- gbm.step(data=(subset(lowland,!is.na(lowland$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0,0,0,0,0),

tree.complexity=3, learning.rate=0.0005, bag.fraction=0.5)

FRP1lowland.gbm <- gbm.step(data=(subset(lowland,!is.na(lowland$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,1,1,1,1,1,1),

tree.complexity=3, learning.rate=0.0005, bag.fraction=0.5)

### how much explantation

FRPlowland1<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPlowland1<-1-SSerror/SStotal

return(FRPlowland1)

}

FRPlowland1(FRP1lowland.gbm) ## % explanation

FRP0lowland<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

122 FRP0lowland<-1-SSerror/SStotal

return(FRP0lowland)

}

FRP0lowland(FRP0lowland.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRP0lowland.gbm);text(10,6.2, "lowland FRP", adj=0) summary(FRP1lowland.gbm); text(10,6.2, "lowland FRP", adj=0)## relative importance

gbm.plot(FRP0lowland.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRP1lowland.gbm, n.plots=5, write.title = FALSE)

#### montane tropical forests

FRP0montane.gbm <- gbm.step(data=(subset(montane,!is.na(montane$FRP))), gbm.x=3:7, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0),

tree.complexity=2, learning.rate=0.005, bag.fraction=0.75)

FRP1montane.gbm <- gbm.step(data=(subset(montane,!is.na(montane$FRP))), gbm.x=3:7, gbm.y=1, family="gaussian", var.monotone=c(0,1,1,1,1),

tree.complexity=2, learning.rate=0.0005, bag.fraction=0.75)

### how much explantation

FRPmontane1<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

123 SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPmontane1<-1-SSerror/SStotal

return(FRPmontane1)

}

FRPmontane1(FRP1montane.gbm) ## % explanation

FRP0montane<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRP0montane<-1-SSerror/SStotal

return(FRP0montane)

}

FRP0montane(FRP0montane.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRP0montane.gbm);text(10,6.2, "montane FRP", adj=0) summary(FRP1montane.gbm); text(10,6.2, "montane FRP", adj=0)## relative importance

gbm.plot(FRP0montane.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRP1montane.gbm, n.plots=5, write.title = FALSE)

### tropical grasslands

124 ###small data size

### tundra

FRP0tu.gbm <- gbm.step(data=(subset(tu,!is.na(tu$FRP))), gbm.x=3:5, gbm.y=1, family="gaussian", var.monotone=c(0,0,0),

tree.complexity=2, learning.rate=0.0005, bag.fraction=1)

FRP1tu.gbm <- gbm.step(data=(subset(tu,!is.na(tu$FRP))), gbm.x=3:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,1,1,1,1,1,1),

tree.complexity=2, learning.rate=0.0005, bag.fraction=1)

### how much explantation

FRPtu1<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPtu1<-1-SSerror/SStotal

return(FRPtu1)

}

FRPtu1(FRP1tu.gbm) ## % explanation

FRP0tu<-function(BRTmodel)

{ #source("brt.functions.R")

125 #library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRP0tu<-1-SSerror/SStotal

return(FRP0tu)

}

FRP0tu(FRP0tu.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRP0tu.gbm);text(10,6.2, "tu FRP", adj=0) summary(FRP1tu.gbm); text(10,6.2, "tu FRP", adj=0)## relative importance

gbm.plot(FRP0tu.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRP1tu.gbm, n.plots=5, write.title = FALSE)

###### all forests

FRPfor0.gbm <- gbm.step(data=(subset(forest,!is.na(forest$FRP))), gbm.x=2:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0,0,0,0,0,0),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

FRPfor1.gbm <- gbm.step(data=(subset(forest,!is.na(forest$FRP))), gbm.x=2:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,1,1,1,1,1,1),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

126 ### how much explantation

FRPfor<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPfor<-1-SSerror/SStotal

return(FRPfor)

}

FRPfor(FRPfor1.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRPfor0.gbm);text(10,6.2, "FRP", adj=0) summary(FRPfor1.gbm); text(10,6.2, "FRP", adj=0)## relative importance

gbm.plot(FRPfor0.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRPfor1.gbm, n.plots=5, write.title = FALSE) ## plot

###### all grasslands

FRPfor0.gbm <- gbm.step(data=(subset(grassland,!is.na(grassland$FRP))), gbm.x=2:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,0,0,0,0,0,0),

tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

FRPfor1.gbm <- gbm.step(data=(subset(grassland,!is.na(grassland$FRP))), gbm.x=2:11, gbm.y=1, family="gaussian", var.monotone=c(0,0,0,0,1,1,1,1,1,1),

127 tree.complexity=3, learning.rate=0.005, bag.fraction=0.5)

### how much explantation

FRPfor<-function(BRTmodel)

{ #source("brt.functions.R")

#library(gbm)

SStotal<-sum((BRTmodel$data$y-mean(BRTmodel$data$y))^2)

SSerror<-sum((BRTmodel$data$y-BRTmodel$fitted)^2)

FRPfor<-1-SSerror/SStotal

return(FRPfor)

}

FRPfor(FRPfor1.gbm) ## % explanation

par(mfrow=c(1,2)) summary(FRPfor0.gbm);text(10,6.2, "FRP", adj=0) summary(FRPfor1.gbm); text(10,6.2, "FRP", adj=0)## relative importance

gbm.plot(FRPfor0.gbm, n.plots=5, write.title = FALSE) gbm.plot(FRPfor1.gbm, n.plots=5, write.title = FALSE) ## plot

########## Tablse S3

### read in data whole<-read.csv(file.choose())

128 head(whole) library(psych)

FRP <-log10(whole$FRP)

FRPbiomelm <- lm(FRP ~ biome, data=whole)

FRPsoiltypelm <- lm(FRP ~ soilType, data=whole)

FRPBClm <- lm(FRP ~ BC, data=whole)

FRPsoilNlm <- lm(FRP ~soilN, data=whole)

FRPsoilPlm <- lm(FRP ~(!is.na(soilP)), data=whole)

FRPavNlm <- lm(FRP ~(!is.na(Nav)), data=whole)

FRPavPlm <- lm(FRP ~(!is.na(Pav)), data=whole)

FRPpHlm <- lm(FRP ~(!is.na(pH)), data=whole)

FRPsomlm <- lm(FRP ~(!is.na(SOM)), data=whole)

FRPsoilClm <- lm(FRP ~(!is.na(soilC)), data=whole)

FRPbiomeFAOlm <- lm(FRP ~ biome*soilType, data=whole)

FRPsoilNPlm <- lm(FRP ~ soilN*(!is.na(soilP)), data=whole)

FRPsoilNPbiomelm <- lm(FRP ~ soilN*(!is.na(soilP))*biome, data=whole)

FRPsoilNPbiomeFAOlm <- lm(FRP ~ soilN*(!is.na(soilP))*biome*soilType, data=whole)

FRPsoilNPbiomeFAOBClm <- lm(FRP ~ soilN*(!is.na(soilP))*biome*soilType*BC, data=whole)

summary(FRPbiomelm) summary(FRPsoiltypelm) summary(FRPBClm) summary(FRPsoilNlm)

129 summary(FRPsoilPlm) summary(FRPpHlm) summary(FRPavNlm) summary(FRPavPlm) summary(FRPsomlm) summary(FRPsoilClm) summary(FRPsoilNPlm) summary(FRPsoilNPbiomelm) summary(FRPsoilNPbiomeFAOlm) summary(FRPsoilNPbiomeFAOBClm)

detach(frbrepeat)

########## Table S4

### read in data

NaddRR<-read.csv(file.choose()) head(NaddRR)

NaddRRdata <- subset(NaddRR,level=="01BF" | level=="02temF"| level=="03troF"| level=="04lowland"| level=="05montane"| level=="06temG"|

level=="07troG"| level=="08TU"| level=="09WL")

RR <-log10(NaddRRdata$RR)

NaddRRlm <- lm(RR ~ Nrate*(as.factor(level))*(as.factor(soiltype)), data=NaddRRdata) summary(NaddRRlm); summary(aov(NaddRRlm))

130 PaddRR<-read.csv(file.choose()) head(PaddRR)

PaddRRdata <- subset(PaddRR,level=="01BF" | level=="02temF"| level=="03troF"| level=="04lowland"| level=="05montane"| level=="06temG"|

level=="07troG"| level=="08TU"| level=="09WL")

RR <-log10(PaddRRdata$RR)

PaddRRlm <- lm(RR ~ Prate*(as.factor(level))*(as.factor(soiltype)), data=PaddRRdata) summary(PaddRRlm); summary(aov(PaddRRlm))

131

Recommended publications