Analysis for Ossanna & Gornish (2022), “Efficacy of labile carbon addition to reduce fast-growing, invasive non-native plants: A review and meta-analysis”, Journal of Applied Ecology.

Introduction

  • This systematic review is to survey what types of experiments have been done using C addition.
    • It only looks at experimental setup and conditions and no results (to avoid a vote count).
  • This includes 83 papers in total, which are not divided up as “experiments” by study location like the meta-analysis (each given an exp_ID).
    • 47 papers were included in both the review and the meta-analysis.
      • 1 paper was not included in the review but was included in the meta-analysis (Haubensak 2004). This is because it is the same study from Haubensak 2006, but both papers provided data for the meta-analysis. This is a unique situation.
    • 21 papers were included in the review and not the meta-analysis because they lacked reports of variance (SD or SE).
    • 13 papers were included in the review and not the meta-analysis because they were not statistically suitable for the meta-analysis (lacked 3 true replicates in the same location; reported data pooled across years or treatments).
    • 2 papers were included in the review and not the meta-analysis because they did not measure biomass, density, or cover of plants.
  • Only simple analysis has been done to find the percentage of studies for each level of relevant categorical variables, or averages for continuous variables. Values in the summary section are rounded to the nearest whole percent.

Summary

  • 73% of papers were of studies conducted in the USA; this is not a global study.
  • Median study duration (of longest study duration possible, based on experimental setup) was 20 months.
  • 51% of papers used sucrose for C application, but sucrose is generally noted as one of the more expensive C types.
  • Median C rate was 420 g C m-2.
    • This translates to about 1000 g m-2 sucrose, or about 900 g m-2 sawdust (although this conversion varies).
  • 83% of papers tested a single C application rate.
  • 70% of papers applied C more than once.
  • 37% of papers tested only C application; 40% of papers tested 1 other management strategy in conjunction with C application; 18% of papers tested 2 other management strategies; 5% tested 3 management strategies.
    • It’s still difficult to use meta-analytic methods to summarize the effects, though.
  • Of the papers that tested multiple treatments with C addition, 29% tested seeding native species; 24% tested burning; 11% tilling (or ground disturbance); 9% tested water manipulation.
    • In absolute terms (out of all the papers), this translates to: 16% tested seeding native species; 13% tested burning; 6% tilling (or ground disturbance); 5% tested water manipulation.
  • 61% of papers made no mention of cost; 22% made a brief mention of cost (no more than a couple sentences); 11% discussed cost at greater length, and with relation to their study results; 6% gave actual numbers or attempted some kind of quantitative estimate of cost.
  • Median plot size was 4 m2.
  • 76% of papers came from peer-reviewed journals; 17% were masters theses or doctoral dissertations.

Setup

library(tidyverse)

# Load data ---------------------------------------------------------------

review <- read.csv("data/raw/Table-S1_review.csv")

Biome

bio <- review %>%
  filter(!is.na(biome)) %>% 
  count(biome)
bio <- bio %>% 
  mutate(perc = n / sum(bio$n) * 100)

bio
## # A tibble: 27 x 3
##    biome                                 n  perc
##    <chr>                             <int> <dbl>
##  1 coastal grassland                     4  5.26
##  2 coastal sage scrub                    2  2.63
##  3 coastal sandplain grassland           1  1.32
##  4 cold desert                           1  1.32
##  5 creosote scrub                        2  2.63
##  6 fescue prairie                        1  1.32
##  7 fynbos                                2  2.63
##  8 grassy woodland                       9 11.8 
##  9 gulf coastal prairie                  1  1.32
## 10 Idaho fescue/bluebunch wheatgrass     2  2.63
## # ... with 17 more rows

Region

reg <- review %>%
  filter(!is.na(region)) %>% 
  count(region)
reg <- reg %>% 
  mutate(perc = n / sum(reg$n) * 100)
reg
## # A tibble: 15 x 3
##    region                     n  perc
##    <chr>                  <int> <dbl>
##  1 central Canada             6  7.23
##  2 coastal CA, USA            8  9.64
##  3 Europe                     3  3.61
##  4 Great Basin, USA          11 13.3 
##  5 Great Plains, USA          5  6.02
##  6 Gulf of Mexico, USA        1  1.20
##  7 HI, USA                    3  3.61
##  8 Himalaya                   1  1.20
##  9 Midwest, USA               9 10.8 
## 10 northeast USA              2  2.41
## 11 Pacific Northwest, USA     8  9.64
## 12 Rocky Mountains, USA      12 14.5 
## 13 South Africa               2  2.41
## 14 southeast Australia       10 12.0 
## 15 southwest USA              2  2.41
# Just USA
reg.usa <- reg %>% 
  filter(str_detect(region, "USA"))
sum(reg.usa$n)
## [1] 61
sum(reg.usa$perc)
## [1] 73.49398

Study duration

  • Longest possible time range from when C was first applied to when measurements were last taken to capture maximum study duration, since many restoration studies are not generally long enough.
summary(review$dur, na.rm = TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##     3.0    14.0    20.0    30.6    32.0   266.0       2
hist(review$dur, breaks = 40)

# To better see first part of histogram
dur.majority <- review %>% 
  filter(dur < 60)
hist(dur.majority$dur, breaks = 20)

C type

Types

# Combine counts of studies that tested multiple C types
ctypa.s <- review %>%
  filter(ctypm == "single") %>% 
  count(ctyp1)

ctypa.m <- review %>%
  filter(ctypm == "multiple") %>% 
  select(ctyp2, ctyp3, ctyp4) %>% 
  pivot_longer(everything(), names_to = "col", values_to = "ctyp1") %>% 
  filter(!is.na(ctyp1)) %>% 
  select(ctyp1) %>% 
  count(ctyp1)

ctypa.int <- intersect(ctypa.s$ctyp1, ctypa.m$ctyp1)
ctypa.add.s <- ctypa.s %>% 
  filter(ctyp1 %in% ctypa.int) %>% 
  select(order(colnames(.)))
ctypa.add.m <- ctypa.m %>% 
  filter(ctyp1 %in% ctypa.int) %>% 
  select(order(colnames(.))) %>% 
  mutate(n2 = ctypa.add.s$n) %>% 
  select(-ctyp1) %>% 
  mutate(n = n + n2) %>% 
  select(-n2)
ctypa.add.s <- ctypa.add.s[ , -2]
ctypa.add.s <- cbind(ctypa.add.s, ctypa.add.m)

ctypa.s <- ctypa.s %>% 
  filter(!ctyp1 %in% ctypa.int)
ctypa <- rbind(ctypa.add.s, ctypa.s)

rm(ctypa.add.m, ctypa.add.s, ctypa.m, ctypa.s, ctypa.int)

# Percentages
ctypa <- ctypa %>% 
  mutate(perc = n / sum(ctypa$n) * 100)
ctypa
##                  ctyp1  n      perc
## 1     activated carbon  2  2.409639
## 2                mulch  2  2.409639
## 3              sawdust 19 22.891566
## 4                straw  2  2.409639
## 5              sucrose 42 50.602410
## 6  sucrose AND sawdust 11 13.253012
## 7             woodchip  2  2.409639
## 8             dextrose  1  1.204819
## 9           wood mulch  1  1.204819
## 10      woodchip mulch  1  1.204819

Number of types

ctypm <- review %>%
  filter(!is.na(ctypm)) %>% 
  count(ctypm)
ctypm.sum <- sum(ctypm["n"])
ctypm <- ctypm %>% 
  mutate(perc = n / ctypm.sum * 100)
ctypm
## # A tibble: 2 x 3
##   ctypm        n  perc
##   <chr>    <int> <dbl>
## 1 multiple     6  7.41
## 2 single      75 92.6

C rate

Averaged when paper tested multiple C rates.

cratav.na <- review %>% 
  filter(!is.na(cratav))
summary(cratav.na$cratav)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    21.0   176.5   420.0   590.7   630.0  4191.6
hist(cratav.na$cratav, breaks = 40)

# To better see first part of histogram
cratav.majority <- cratav.na %>% 
  filter(cratav < 1000)
hist(cratav.majority$cratav, breaks = 30)

Percent of papers that tested multiple C rates:

cratm <- review %>%
  filter(!is.na(cratm)) %>% 
  count(cratm)
cratm.sum <- sum(cratm["n"])
cratm <- cratm %>% 
  mutate(perc = n / cratm.sum * 100)

cratm[10, ]
## # A tibble: 1 x 3
##   cratm      n  perc
##   <chr>  <int> <dbl>
## 1 single    64  83.1

Reapplication (yes/no)

capr <- review %>%
  filter(!is.na(capr)) %>% 
  count(capr)
capr.sum <- sum(capr["n"])
capr <- capr %>% 
  mutate(perc = n / capr.sum * 100)
capr
## # A tibble: 2 x 3
##   capr          n  perc
##   <chr>     <int> <dbl>
## 1 1            25  30.1
## 2 reapplied    58  69.9

Multiple treatments

Treatment types (relative)

# Combine counts of studies that tested multiple treatments
mtrt.s <- review %>%
  filter(mtrtn == 1) %>% 
  count(mtrt1)

mtrt.m <- review %>%
  filter(mtrtn != 1) %>% 
  select(mtrt2, mtrt3) %>% 
  pivot_longer(everything(), names_to = "col", values_to = "mtrt1") %>% 
  filter(!is.na(mtrt1)) %>% 
  select(mtrt1) %>% 
  count(mtrt1)

mtrt.int <- intersect(mtrt.s$mtrt1, mtrt.m$mtrt1)
mtrt.add.s <- mtrt.s %>% 
  filter(mtrt1 %in% mtrt.int) %>% 
  select(order(colnames(.)))
mtrt.add.m <- mtrt.m %>% 
  filter(mtrt1 %in% mtrt.int) %>% 
  select(order(colnames(.))) %>% 
  mutate(n2 = mtrt.add.s$n) %>% 
  select(-mtrt1) %>% 
  mutate(n = n + n2) %>% 
  select(-n2)
mtrt.add.s <- mtrt.add.s[ , -2]
mtrt.add.s <- cbind(mtrt.add.s, mtrt.add.m)

mtrt.s <- mtrt.s %>% 
  filter(!mtrt1 %in% mtrt.int)
mtrt <- rbind(mtrt.add.s, mtrt.s)

rm(mtrt.add.m, mtrt.add.s, mtrt.m, mtrt.s, mtrt.int)

mtrt <- mtrt %>% 
  mutate(perc = n / sum(mtrt$n) * 100)
mtrt
##                 mtrt1  n      perc
## 1                burn 11 24.444444
## 2       native seeded 13 28.888889
## 3  water manipulation  4  8.888889
## 4             cutting  2  4.444444
## 5          fertilizer  2  4.444444
## 6             grazing  2  4.444444
## 7        hand-pulling  2  4.444444
## 8      litter removal  1  2.222222
## 9      soil amendment  3  6.666667
## 10            tilling  5 11.111111

Treatment types (absolute)

mtrt.absolute <- mtrt %>% 
  mutate(perc = n / dim(review)[1] * 100)
mtrt.absolute
##                 mtrt1  n      perc
## 1                burn 11 13.253012
## 2       native seeded 13 15.662651
## 3  water manipulation  4  4.819277
## 4             cutting  2  2.409639
## 5          fertilizer  2  2.409639
## 6             grazing  2  2.409639
## 7        hand-pulling  2  2.409639
## 8      litter removal  1  1.204819
## 9      soil amendment  3  3.614458
## 10            tilling  5  6.024096

Number of multiple/additional treatments

mtrtn <- review %>%
  filter(!is.na(mtrtn)) %>% 
  count(mtrtn)
mtrtn.sum <- sum(mtrtn["n"])
mtrtn <- mtrtn %>% 
  mutate(perc = n / mtrtn.sum * 100)
mtrtn
## # A tibble: 4 x 3
##   mtrtn     n  perc
##   <dbl> <int> <dbl>
## 1     0    31 37.3 
## 2     1    33 39.8 
## 3     2    15 18.1 
## 4     3     4  4.82

Cost

cost <- review %>%
  filter(!is.na(cost)) %>% 
  count(cost)
cost.sum <- sum(cost["n"])
cost <- cost %>% 
  mutate(perc = n / cost.sum * 100)
cost
## # A tibble: 4 x 3
##   cost                  n  perc
##   <chr>             <int> <dbl>
## 1 absent               51 61.4 
## 2 discussed             9 10.8 
## 3 mentioned briefly    18 21.7 
## 4 numbers               5  6.02

Plot size

plot.na <- review %>% 
  filter(!str_detect(plot, "not")) %>% 
  mutate(plot = round(as.numeric(plot), 2))
summary(plot.na$plot)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.01    1.50    4.00   27.23   25.00  350.00
hist(plot.na$plot, breaks = 30)

# To better see first part of histogram
plot.majority <- plot.na %>% 
  filter(plot < 30)
hist(plot.majority$plot, breaks = 20)

Peer review

peer <- review %>%
  count(peer)
peer.sum <- sum(peer["n"])
peer <- peer %>% 
  mutate(perc = n / peer.sum * 100)
peer
## # A tibble: 5 x 3
##   peer                 n  perc
##   <chr>            <int> <dbl>
## 1 conference           1  1.20
## 2 dissertation         3  3.61
## 3 peer-reviewed       63 75.9 
## 4 technical report     5  6.02
## 5 thesis              11 13.3