Chapter 1 Evidence Causes - Technical Background Report

IPBES Transformative Change Assessment

Authors

Rainer M, Krug

Julia Leventon

Janita Gurung

Fern Wickson

Doi

DOI GitHub release License: CC BY 4.0

Part of the Data Management Report DOI

Disclaimer

This is a technical background document for the IPBES Thematic assessment of the underlying causes of biodiversity loss, determinants of transformative change and options for achieving the 2050 vision for biodiversity. It provides technical details and implementation settings for the data management report of the Transformative Change Assessment Corpus and its usage. The sole purpose of this document is to document the workflows used to produce statistics, figures and maps, to document the source of the data and to make the process transparent and reproducible.

Contributors

Data and Knowledge tsu

  • Niamir, Aidin ORCID
  • Gudde, Renske ORCID

Download of Data Files from Zenodo

The data folder is also available in a separate deposit at 10.5281/zenodo.11389148.

To guarantee reproducibility, it will be downloaded and extracted when the folder ch1_evidence_causes/data does not exist

All code to re-generate the data is included but might take a long time to run and produce different numbers as OpenAlex is updated continously.

Disable this block and delete all content in the folder ch1_evidence_causes/data to re-generate the data. The folder ch1_evidence_causes/data has to exist.

This code will only work after the approval of the assessment by the plenary as the repository will remain confidential before.

Show the code
dn <- file.path("ch1_evidence_causes", "data")
if (!dir.exists(dn)) {
    dir.create(dn)
    url <- paste0("https://zenodo.org/record/", "11389148", "/files/data.zip")
    destfile <- tempfile(fileext = ".zip")
    download.file(url, destfile)

    unzip(destfile, exdir = "data")
}

Working Title

IPBES_TCA_Ch1_evidence_causes

Code repo

Build No: 430

The BuidNo is automatically increased by one each time the report is rendered. It is used to indicate different renderings when the version stays the same.

Introduction

Overview Diagram

LegendSearch TermLink to search termNumber of Worksn = number of works fron searchessection numberinternal name of variableOpenAlexSearch TermNATURENumber of Worksn = 26,239,0660.1nature_corpusSearch TermNATUREANDTFCNumber of Worksn = 4,746,308-0.2-tca_corpusSearch TermNATUREANDTFCSearch TermETHITCALNumber of Worksn = 1,595,8141ethicalSearch TermCONCEPTS 1Number of Worksn = 3,753,7132.1concepts_1Search TermCONCEPTS 2Number of Worksn = 2,635,1522.2concepts_2Number of Worksn = 675,4122.3concepts_1_2Search TermNARROWED TCANumber of Worksn = 1,063,5134.1narrowed_tca_tcaNumber of Worksn = 5,656,3384.2narrowed_tcaSearch TermCRITERIA 1Number of Worksn = 284,9135.1narrowed_tca_c1Search TermCRITERIA 2Number of Worksn = 412,6385.2narrowed_tca_c2Search TermCRITERIA 3Number of Worksn = 577,7735.3narrowed_tca_c3Search TermCRITERIA 4Number of Worksn = 869,8595.4narrowed_tca_c4Search TermBIODIV LOSS 1Search TermBIODIV LOSS 2Number of Worksn = 1,5786.1st_1_natNumber of Worksn = 4546.2st_2_tcaNumber of Worksn = 3846.3st_3_natSearch TermBIODIV LOSS 3 1Search TermBIODIV LOSS 3 2Search TermBIODIV LOSS 3 3Search TermBIODIV LOSS 3 4Search TermBIODIV LOSS 3 5Number of Worksn = 2316.1.1biodiv_loss_nat_s_1Number of Worksn = 316.1.2biodiv_loss_nat_s_2Number of Worksn = 646.1.3biodiv_loss_nat_s_3Number of Worksn = 1966.1.4biodiv_loss_nat_s_4Number of Worksn = 2206.1.5biodiv_loss_nat_s_5Number of Worksn = 1006.2.1biodiv_loss_narrowed_s_1Number of Worksn = 206.2.2biodiv_loss_narrowed_s_2Number of Worksn = 376.2.3biodiv_loss_narrowed_s_3Number of Worksn = NULL6.2.4biodiv_loss_narrowed_s_4Number of Worksn = 956.2.5biodiv_loss_narrowed_s_5Number of Worksn = 906.3.1biodiv_loss_nat_narrowed_s_1Number of Worksn = 206.3.2biodiv_loss_nat_narrowed_s_2Number of Worksn = 346.3.3biodiv_loss_nat_narrowed_s_3Number of Worksn = 1006.3.4biodiv_loss_nat_narrowed_s_4Number of Worksn = 886.3.5biodiv_loss_nat_narrowed_s_5

Overview of the analysis and results.

All searches are done on OpenAlex directly. The downloaded TCA Corpus is not used directly due to methodological and technical limitations.

The following steps will be done in documented in this report:

See Google Doc with search terms and questions for details.

Methods

Show the code
count$nature_corpus <- openalexR::oa_fetch(
    title_and_abstract.search = nature_st,
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

count$tca_corpus <- openalexR::oa_fetch(
    title_and_abstract.search = compact(tca_corpus_st),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

1. Ethical arguments for transformative change

The search terms is ethical on OpenAlex.

Show the code
count$ethical <- openalexR::oa_fetch(
    title_and_abstract.search = ethical_st,
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

The second search terms is ethical ethical on TCA Corpus.

Show the code
#|

count$ethical_tca <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", ethical_st, ") AND (", tca_corpus_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

2. Assessing broader biodiversity concepts

The search terms is concepts_1 Open Alex search.

The concepts_1 search returns a subset of the nature corpus as biodiversity is a subset of the nature corpus. Therefore, it is not nbecessary to subset the nature corpus and the search can be done on the complete OpenAlex corpus .

Show the code
#|

count$concepts_1 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", nature_st, ") AND (", concepts_1_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
Show the code
#|

count$concepts_2 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", nature_st, ") AND (", concepts_2_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

Assessing the broader biodiversity concepts by searching for concepts_1 corpus AND concepts_2 corpus

Show the code
#|

count$concepts_1_2 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", nature_st, ") AND (", concepts_1_st, ") AND (", concepts_2_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

3. Assessing disciplinary bias in the nature corpus

Skipped

4. Narrowed transformative change corpus

Here the term narrowed_tca is used to narrow down the TCA corpus.

Show the code
#|

count$narrowed_tca <- openalexR::oa_fetch(
    title_and_abstract.search = compact(narrowed_tca_st),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

count$narrowed_tca_tca <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", tca_corpus_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

##########

set.seed(13)
data <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", tca_corpus_st, ")")),
    options = list(
        select = c(
            "id",
            "doi",
            "authorships",
            "publication_year",
            "display_name",
            "abstract_inverted_index"
        ),
        sample = 250,
        seed = 13
    ),
    count_only = FALSE,
    output = "tibble",
    verbose = TRUE
) |> dplyr::mutate(
    ab = substr(ab, 1, 5000)
)

data$author_abbr <- IPBES.R::abbreviate_authors(data)

data |>
    dplyr::select(
        id,
        doi,
        author = author_abbr,
        title = display_name,
        abstract = ab
    ) |>
    writexl::write_xlsx(path = file.path("ch1_evidence_causes", "data", "samples_4.2_narrowed_tca.xlsx"))
rm(data)

##########


count$narrowed_tca_nature <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", nature_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

5. Assessing criteria in the narrowed TFC corpus

Here the terms about criteria are used: - criteria_1 - criteria_2 - criteria_3 - criteria_4

Show the code
#|

count$narrowed_tca_c1 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", criteria_1_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

##########

set.seed(13)
data <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", criteria_1_st, ")")),
    options = list(
        select = c(
            "id",
            "doi",
            "authorships",
            "publication_year",
            "display_name",
            "abstract_inverted_index"
        ),
        sample = 250,
        seed = 13
    ),
    count_only = FALSE,
    output = "tibble",
    verbose = TRUE
) |> dplyr::mutate(
    ab = substr(ab, 1, 5000)
)

data$author_abbr <- IPBES.R::abbreviate_authors(data)

data |>
    dplyr::select(
        id,
        doi,
        author = author_abbr,
        title = display_name,
        abstract = ab
    ) |>
    writexl::write_xlsx(path = file.path("ch1_evidence_causes", "data", "samples_5.1_narrowed_criteria1.xlsx"))
rm(data)

##########

count$narrowed_tca_c2 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", criteria_2_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

##########

set.seed(13)
data <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", criteria_2_st, ")")),
    options = list(
        select = c(
            "id",
            "doi",
            "authorships",
            "publication_year",
            "display_name",
            "abstract_inverted_index"
        ),
        sample = 250,
        seed = 13
    ),
    count_only = FALSE,
    output = "tibble",
    verbose = TRUE
) |> dplyr::mutate(
    ab = substr(ab, 1, 5000)
)

data$author_abbr <- IPBES.R::abbreviate_authors(data)

data |>
    dplyr::select(
        id,
        doi,
        author = author_abbr,
        title = display_name,
        abstract = ab
    ) |>
    writexl::write_xlsx(path = file.path("ch1_evidence_causes", "data", "samples_5.2_narrowed_criteria2.xlsx"))
rm(data)

##########

count$narrowed_tca_c3 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ")  AND (", criteria_3_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

##########

set.seed(13)
data <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", criteria_3_st, ")")),
    options = list(
        select = c(
            "id",
            "doi",
            "authorships",
            "publication_year",
            "display_name",
            "abstract_inverted_index"
        ),
        sample = 250,
        seed = 13
    ),
    count_only = FALSE,
    output = "tibble",
    verbose = TRUE
) |> dplyr::mutate(
    ab = substr(ab, 1, 5000)
)

data$author_abbr <- IPBES.R::abbreviate_authors(data)

data |>
    dplyr::select(
        id,
        doi,
        author = author_abbr,
        title = display_name,
        abstract = ab
    ) |>
    writexl::write_xlsx(path = file.path("ch1_evidence_causes", "data", "samples_5.3_narrowed_criteria3.xlsx"))
rm(data)

##########

count$narrowed_tca_c4 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", criteria_4_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

##########

set.seed(13)
data <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", narrowed_tca_st, ") AND (", criteria_4_st, ")")),
    options = list(
        select = c(
            "id",
            "doi",
            "authorships",
            "publication_year",
            "display_name",
            "abstract_inverted_index"
        ),
        sample = 250,
        seed = 13
    ),
    count_only = FALSE,
    output = "tibble",
    verbose = TRUE
) |> dplyr::mutate(
    ab = substr(ab, 1, 5000)
)

data$author_abbr <- IPBES.R::abbreviate_authors(data)

data |>
    dplyr::select(
        id,
        doi,
        author = author_abbr,
        title = display_name,
        abstract = ab
    ) |>
    writexl::write_xlsx(path = file.path("ch1_evidence_causes", "data", "samples_5.4_narrowed_criteria4.xlsx"))
rm(data)

##########

6. Assessing the literature that discusses the causes of biodiversity loss

(using the full Nature corpus, the narrowed TFC corpus and the overlap between the full nature corpus and the narrowed TFC corpus) – for thematic analysis

Here the terms about criteria are used:

These need to be AND with - Nature Corpus - Narrowed TFC Corpus - Nature Corpus AND Narrowed TFC Corpus

Show the code
#|


count$st_1_nat <- openalexR::oa_fetch(
    title_and_abstract.search = st_1_nat,
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

count$st_2_tca <- openalexR::oa_fetch(
    title_and_abstract.search = st_2_tca,
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

count$st_3_nat <- openalexR::oa_fetch(
    title_and_abstract.search = st_3_nat,
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count



count$biodiv_loss_nat_s_1 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_1_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_s_2 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_2_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_s_3 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_3_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_s_4 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_4_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_s_5 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_5_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count



count$biodiv_loss_narrowed_s_1 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_1_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_narrowed_s_2 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_2_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_narrowed_s_3 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_3_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_narrowed_s_1 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_4_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_narrowed_s_5 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_5_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count


count$biodiv_loss_nat_narrowed_s_1 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_1_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_narrowed_s_2 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_2_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_narrowed_s_3 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_3_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_narrowed_s_4 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_4_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count
count$biodiv_loss_nat_narrowed_s_5 <- openalexR::oa_fetch(
    title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_5_st, ")")),
    count_only = TRUE,
    output = "list",
    verbose = TRUE
)$count

Download Corpora

Show the code
#|

if (!file.exists(params$fn_corpus_6)) {
    corpus_6$st_1_nat <- openalexR::oa_fetch(
        title_and_abstract.search = st_1_nat,
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)

    corpus_6$st_2_tca <- openalexR::oa_fetch(
        title_and_abstract.search = st_2_tca,
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)

    corpus_6$st_3_nat <- openalexR::oa_fetch(
        title_and_abstract.search = st_3_nat,
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)

    corpus_6$biodiv_loss_nat_s_1 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_1_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_s_2 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_2_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_s_3 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_3_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_s_4 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_4_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_s_5 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_1_nat, ") AND (", biodiv_loss_3_5_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)

    corpus_6$biodiv_loss_narrowed_s_1 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_1_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_narrowed_s_2 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_2_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_narrowed_s_3 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_3_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_narrowed_s_4 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_4_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_narrowed_s_5 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_2_tca, ") AND (", biodiv_loss_3_5_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)

    corpus_6$biodiv_loss_nat_narrowed_s_1 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_1_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_narrowed_s_2 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_2_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_narrowed_s_3 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_3_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_narrowed_s_4 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_4_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)
    corpus_6$biodiv_loss_nat_narrowed_s_5 <- openalexR::oa_fetch(
        title_and_abstract.search = compact(paste0("(", st_3_nat, ") AND (", biodiv_loss_3_5_st, ")")),
        output = "dataframe",
        verbose = TRUE
    ) |>
        dplyr::distinct(id, .keep_all = TRUE)

    saveRDS(corpus_6, file = params$fn_corpus_6)
}

Save the Counts

Show the code
#|

saveRDS(count, params$fn_count)

Export data

export Part 6 to Excel

Show the code
if (!file.exists(params$fn_corpus_6_xlsx)) {
    corpus_6 <- readRDS(params$fn_corpus_6)[-1]

    for (nm in names(corpus_6)) {
        corpus_6[[nm]] <- corpus_6[[nm]] |>
            dplyr::select(
                id,
                doi,
                title = display_name,
                abstract = ab,
                author,
                publication_year
            ) |>
            dplyr::mutate(
                abstract = substr(abstract, 1, 5000),
                set = nm
            )
        corpus_6[[nm]]$author_abbr <- IPBES.R::abbreviate_authors(corpus_6[[nm]])
        corpus_6[[nm]] <- corpus_6[[nm]] |>
            dplyr::select(
                id,
                doi,
                author_abbr,
                title,
                abstract,
                set
            )
    }

    all <- do.call(rbind, corpus_6) |>
        dplyr::mutate(
            set = NULL
        ) |>
        dplyr::distinct(
            id,
            .keep_all = TRUE
        )

    for (nm in names(corpus_6)) {
        corpus_6[[nm]] <- corpus_6[[nm]] |>
            dplyr::select(
                id
            ) |>
            dplyr::mutate(
                set = "X"
            )
        names(corpus_6[[nm]])[2] <- nm
    }

    all <- all |>
        dplyr::full_join(
            corpus_6$st_1_nat,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$st_2_tca,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$st_3_nat,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_s_1,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_s_2,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_s_3,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_s_4,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_s_5,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_narrowed_s_1,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_narrowed_s_2,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_narrowed_s_3,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_narrowed_s_4,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_narrowed_s_5,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_narrowed_s_1,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_narrowed_s_2,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_narrowed_s_3,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_narrowed_s_4,
            by = "id"
        ) |>
        dplyr::full_join(
            corpus_6$biodiv_loss_nat_narrowed_s_5,
            by = "id"
        )

    names(all)[-(1:5)] <- c(
        "6.1", "6.2", "6.3",
        "6.1.1", "6.1.2", "6.1.3", "6.1.4", "6.1.5",
        "6.2.1", "6.2.2", "6.2.3", "6.2.4", "6.2.5",
        "6.3.1", "6.3.2", "6.3.3", "6.3.4", "6.3.5"
    )

    writexl::write_xlsx(all, path = params$fn_corpus_6_xlsx)
    rm(all, corpus_6)
}

Greate Graph

Show the code
#|

basename <- file.path("ch1_evidence_causes", "figures", "Ch1_evidence_causes")

nf <- list.files(
    path = dirname(basename),
    pattern = basename(basename)
) |>
    length()

if (nf < 3) {
    puml <- readLines(file.path("ch1_evidence_causes", "input", "Ch1_evidence_causes.plantuml"))

    ## 0.[1:2]]
    puml <- gsub(
        pattern = "%$%0.1%$%",
        replacement = paste0("**n = ", count$nature_corpus |> format(big.mark = ","), "**\\n---\\nnature_corpus"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%0.2%$%",
        replacement = paste0("**n = ", count$tca_corpus |> format(big.mark = ","), "**\\n---\\ntca_corpus"),
        x = puml,
        fixed = TRUE
    )

    ## 1
    puml <- gsub(
        pattern = "%$%1%$%",
        replacement = paste0("**n = ", count$ethical |> format(big.mark = ","), "**\\n---\\nethical"),
        x = puml,
        fixed = TRUE
    )

    ## 2.[1:2]
    puml <- gsub(
        pattern = "%$%2.1%$%",
        replacement = paste0("**n = ", count$concepts_1 |> format(big.mark = ","), "**\\n---\\nconcepts_1"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%2.2%$%",
        replacement = paste0("**n = ", count$concepts_2 |> format(big.mark = ","), "**\\n---\\nconcepts_2"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%2.3%$%",
        replacement = paste0("**n = ", count$concepts_1_2 |> format(big.mark = ","), "**\\n---\\nconcepts_1_2"),
        x = puml,
        fixed = TRUE
    )

    ## 3 OUTSTANDING

    ## 4.[1:2]
    puml <- gsub(
        pattern = "%$%4.1%$%",
        replacement = paste0("**n = ", count$narrowed_tca_tca |> format(big.mark = ","), "**\\n---\\nnarrowed_tca_tca"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%4.2%$%",
        replacement = paste0("**n = ", count$narrowed_tca |> format(big.mark = ","), "**\\n---\\nnarrowed_tca"),
        x = puml,
        fixed = TRUE
    )

    ## 5.[1:4]
    puml <- gsub(
        pattern = "%$%5.1%$%",
        replacement = paste0("**n = ", count$narrowed_tca_c1 |> format(big.mark = ","), "**\\n---\\nnarrowed_tca_c1"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%5.2%$%",
        replacement = paste0("**n = ", count$narrowed_tca_c2 |> format(big.mark = ","), "**\\n---\\nnarrowed_tca_c2"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%5.3%$%",
        replacement = paste0("**n = ", count$narrowed_tca_c3 |> format(big.mark = ","), "**\\n---\\nnarrowed_tca_c3"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%5.4%$%",
        replacement = paste0("**n = ", count$narrowed_tca_c4 |> format(big.mark = ","), "**\\n---\\nnarrowed_tca_c4"),
        x = puml,
        fixed = TRUE
    )

    ## 6.[1:3]
    puml <- gsub(
        pattern = "%$%6.1%$%",
        replacement = paste0("**n = ", count$st_1_nat |> format(big.mark = ","), "**\\n---\\nst_1_nat"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.2%$%",
        replacement = paste0("**n = ", count$st_2_tca |> format(big.mark = ","), "**\\n---\\nst_2_tca"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.3%$%",
        replacement = paste0("**n = ", count$st_3_nat |> format(big.mark = ","), "**\\n---\\nst_3_nat"),
        x = puml,
        fixed = TRUE
    )

    ## 6.1.[1:5]
    puml <- gsub(
        pattern = "%$%6.1.1%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_s_1 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_s_1"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.1.2%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_s_2 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_s_2"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.1.3%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_s_3 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_s_3"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.1.4%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_s_4 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_s_4"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.1.5%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_s_5 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_s_5"),
        x = puml,
        fixed = TRUE
    )

    ## 6.2.[1:5]
    puml <- gsub(
        pattern = "%$%6.2.1%$%",
        replacement = paste0("**n = ", count$biodiv_loss_narrowed_s_1 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_narrowed_s_1"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.2.2%$%",
        replacement = paste0("**n = ", count$biodiv_loss_narrowed_s_2 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_narrowed_s_2"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.2.3%$%",
        replacement = paste0("**n = ", count$biodiv_loss_narrowed_s_3 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_narrowed_s_3"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.2.4%$%",
        replacement = paste0("**n = ", count$biodiv_loss_narrowed_s_4 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_narrowed_s_4"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.2.5%$%",
        replacement = paste0("**n = ", count$biodiv_loss_narrowed_s_5 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_narrowed_s_5"),
        x = puml,
        fixed = TRUE
    )

    ## 6.3.[1:5]
    puml <- gsub(
        pattern = "%$%6.3.1%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_narrowed_s_1 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_narrowed_s_1"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.3.2%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_narrowed_s_2 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_narrowed_s_2"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.3.3%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_narrowed_s_3 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_narrowed_s_3"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.3.4%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_narrowed_s_4 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_narrowed_s_4"),
        x = puml,
        fixed = TRUE
    )
    puml <- gsub(
        pattern = "%$%6.3.5%$%",
        replacement = paste0("**n = ", count$biodiv_loss_nat_narrowed_s_5 |> format(big.mark = ","), "**\\n---\\nbiodiv_loss_nat_narrowed_s_5"),
        x = puml,
        fixed = TRUE
    )

    puml |>
        paste(collapse = "\n") |>
        plantuml::plantuml() |>
        plantuml::get_graph(
            file = file.path("ch1_evidence_causes", "figures", "Ch1_evidence_causes.pdf")
        )

    puml |>
        paste(collapse = "\n") |>
        plantuml::plantuml() |>
        plantuml::get_graph(
            file = file.path("ch1_evidence_causes", "figures", "Ch1_evidence_causes.svg")
        )

    puml |>
        paste(collapse = "\n") |>
        plantuml::plantuml() |>
        plantuml::get_graph(
            file = file.path("ch1_evidence_causes", "figures", "Ch1_evidence_causes.png")
        )
}

Results

1. Ethical arguments for transformative change

Subset of TCA Corpus

How many, what percentage, and what papers in the full TC corpus?

The Ethics Corpus consists of 135581 works, which is 2.86% of the TCA Corpus

2. Assessing broader biodiversity concepts

Subset of OpenAlex Corpus

The Concepts 1 Corpus (talking about biodiversity in relation to conservation, management, policy, or governance ) consists of 3753713 works, which is 14.31% of the Nature Corpus. Of these, 675412 (% of Nature Corpus and % of the Concept 1 Corpus) works also talk about broader than non-human species and ecosystems.

3. Assessing disciplinary bias in the nature corpus

To be discussed

4. Narrowed TFC corpus

Subset of TCA Corpus

The Narrowed TFC Corpus consists of 1063513 works, which is 22.41% of the TCA Corpus.

Subset of Nature Corpus

The Narrowed Nature Corpus consists of 1179551 works, which is 4.5% of the Nature Corpus.

5. Assessing criteria in the Narrowed TFC corpus

Criteria 1

284913 works in the narrowed TCA Corpus, which is 26.79% of the Narrowed TCA Corpus.

Criteria 2

412638 works in the narrowed TCA Corpus, which is 38.8% of the Narrowed TCA Corpus.

Criteria 3

577773 works in the narrowed TCA Corpus, which is 54.33% of the Narrowed TCA Corpus.

Criteria 4

869859 works in the narrowed TCA Corpus, which is 81.79% of the Narrowed TCA Corpus.

6. Assessing the literature that discusses the causes of biodiversity loss

Nature Corpus AND Step 1 AND Step 2

  • 1578 works in the Nature Corpus crossed with Step 1 and Step 2 terms, which is 0.01% of the Nature Corpus

There are the following numbers of wotks in the Nature Corpus:

  • 231 works in the Nature Corpus that discuss the Topic 1, which is 0%
  • 31 works in the Nature Corpus that discuss the Topic 2, which is 0%
  • 64 works in the Nature Corpus that discuss the Topic 3, which is 0%
  • 196 works in the Nature Corpus that discuss the Topic 4, which is 0%
  • 220 works in the Nature Corpus that discuss the Topic 5, which is 0%

Narrowed TCA Corpus AND Step 1 AND Step 2

  • 384 works in the Narrowed TCA Corpus crossed the NAture Corpus and with Step 1 and Step 2 terms, which is 0.04% of the Narrowed TCA Corpus

There are the following numbers of wotks in the Narrowed TCA Corpus:

  • 100 works in the Narrowed TFC Corpus that discuss the Topic 1, which is 0.01%
  • 20 works in the Narrowed TFC Corpus that discuss the Topic 2, which is 0%
  • 37 works in the Narrowed TFC Corpus that discuss the Topic 3, which is 0%
  • **** works in the Narrowed TFC Corpus that discuss the Topic 4, which is %
  • 95 works in the Narrowed TFC Corpus that discuss the Topic 5, which is 0.01%

Nature Corpus AND Narrowed TCA Corpus AND Step 1 AND Step 2

  • 454 works in the Narrowed TCA Corpus crossed with Step 1 and Step 2 terms, which is 0.04% of the Narrowed TCA Corpus

There are the following numbers of wotks in the Nature Corpus AND Narrowed TCA Corpus:

  • 90 works in the Nature Corpus AND Narrowed TFC Corpus that discuss the Topic 1, which is 0.01%
  • 20 works in the Nature Corpus AND Narrowed TFC Corpus that discuss the Topic 2, which is 0%
  • 34 works in the Nature Corpus AND Narrowed TFC Corpus that discuss the Topic 3, which is 0%
  • 100 works in the Nature Corpus AND Narrowed TFC Corpus that discuss the Topic 4, which is 0.01%
  • 88 works in the Nature Corpus AND Narrowed TFC Corpus that discuss the Topic 5, which is 0.01%

Reuse

Citation

BibTeX citation:
@report{krug,
  author = {Krug , Rainer M and Leventon, Julia and Gurung, Janita and
    Wickson, Fern},
  title = {Chapter 1 {Evidence} {Causes} - {Technical} {Background}
    {Report}},
  doi = {10.5281/zenodo.11389482},
  langid = {en}
}
For attribution, please cite this work as:
Krug, Rainer M, Julia Leventon, Janita Gurung, and Fern Wickson. n.d. “Chapter 1 Evidence Causes - Technical Background Report.” IPBES Transformative Change Assessment. https://doi.org/10.5281/zenodo.11389482.