# Introduction to birddog

## Overview

`birddog` helps you detect emergence and trace trajectories in scientific literature and patents. It reads datasets from OpenAlex and Web of Science (WoS), builds citation-based networks, identifies groups, and summarizes their dynamics.

The stable release is on CRAN. The development version is available on GitHub: https://github.com/roneyfraga/birddog.

### Methodological workflow

## Installation

    # stable version (CRAN)
    install.packages("birddog")

    # development version (GitHub)
    # install.packages("remotes")
    remotes::install_github("roneyfraga/birddog")

    library(birddog)

## Data sources

`birddog` supports two main data sources:

- OpenAlex: browser search with CSV export, or API via `{openalexR}`.
- Web of Science: multiple export formats (`.bib`, `.ris`, plain-text `.txt`, tab-delimited `.txt`).

### OpenAlex via API or CSV

    library(openalexR)

    # Fetch works from OpenAlex API
    url_api <- "https://api.openalex.org/works?page=1&filter=primary_location.source.id:s121026525"

    openalexR::oa_request(query_url = url_api) |>
      openalexR::oa2df(entity = "works") |>
      birddog::read_openalex(format = "api") ->
      M

    # Or from a CSV export
    M <- birddog::read_openalex("path/to/openalex-export.csv", format = "csv")

### Web of Science (WoS)

    # BibTeX
    M <- birddog::read_wos("path/to/savedrecs.bib", format = "bib")

    # RIS
    M <- birddog::read_wos("path/to/savedrecs.ris", format = "ris")

    # Plain text
    M <- birddog::read_wos("path/to/savedrecs.txt", format = "txt-plain-text")

    # Tab-delimited
    M <- birddog::read_wos("path/to/savedrecs.txt", format = "txt-tab-delimited")

## Example dataset

We use a biogas dataset from OpenAlex with 57,734 documents as a running example.

    # Download from OpenAlex (~15 min)
    query_oa <- "( biogas )"

    openalexR::oa_fetch(
      entity = "works",
      title_and_abstract.search = query_oa,
      verbose = TRUE
    ) ->
      papers

    M <- birddog::read_openalex(papers, format = "api")

    # Pre-computed dataset
    url_m <- "https://roneyfraga.com/volume/keep_it/biogas-data/M.rds"
    M <- readRDS(url(url_m))

    dplyr::glimpse(M)
    #> Rows: 57,734
    #> Columns: 55
    #> $ id                          <chr> "https://openalex.org/W2072823483", "https…
    #> $ id_short                    <chr> "W2072823483", "W2109587007", "W2032792259…
    #> $ SR                          <chr> "W2072823483", "W2109587007", "W2032792259…
    #> $ PY                          <int> 2009, 2008, 2009, 2011, 2018, 2015, 2006, …
    #> $ TC                          <int> 2672, 2542, 1616, 1228, 1111, 1540, 667, 9…
    #> $ TI                          <chr> "Biogas production: current state and pers…
    #> $ DI                          <chr> "https://doi.org/10.1007/s00253-009-2246-7…
    #> $ AB                          <chr> NA, "Lignocelluloses are often a major or …
    #> $ CR                          <chr> "W1417235137;W1503353321;W1506760845;W1529…
    #> $ DE                          <chr> "biogas;digestate;renewable natural gas", …
    #> $ AU                          <chr> "PETER WEILAND", "MOHAMMAD J. TAHERZADEH;K…
    #> $ DB                          <chr> "openalex_api", "openalex_api", "openalex_…
    #> $ title                       <chr> "Biogas production: current state and pers…
    #> $ display_name                <chr> "Biogas production: current state and pers…
    #> $ authorships                 <list> [<tbl_df[1 x 7]>], [<tbl_df[2 x 7]>], [<t…
    #> $ abstract                    <chr> NA, "Lignocelluloses are often a major or …
    #> $ doi                         <chr> "https://doi.org/10.1007/s00253-009-2246-7…
    #> $ publication_date            <date> 2009-09-23, 2008-09-01, 2009-02-14, 2011-…
    #> $ publication_year            <int> 2009, 2008, 2009, 2011, 2018, 2015, 2006, …
    #> $ relevance_score             <dbl> 1861.7662, 1781.5554, 1455.7186, 1270.2125…
    #> $ fwci                        <dbl> 12.110, 6.397, 17.615, 22.271, 68.880, 115…
    #> $ cited_by_count              <int> 2672, 2542, 1616, 1228, 1111, 1540, 667, 9…
    #> $ counts_by_year              <list> [<data.frame[14 x 2]>], [<data.frame[14 x…
    #> $ cited_by_api_url            <chr> "https://api.openalex.org/works?filter=cit…
    #> $ ids                         <list> <"https://openalex.org/W2072823483", "htt…
    #> $ type                        <chr> "review", "review", "review", "article", "…
    #> $ is_oa                       <lgl> FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FA…
    #> $ is_oa_anywhere              <lgl> FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FA…
    #> $ oa_status                   <chr> "closed", "gold", "closed", "closed", "hyb…
    #> $ oa_url                      <chr> NA, "https://www.mdpi.com/1422-0067/9/9/16…
    #> $ any_repository_has_fulltext <lgl> FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, F…
    #> $ source_display_name         <chr> "Applied Microbiology and Biotechnology", …
    #> $ source_id                   <chr> "https://openalex.org/S70979998", "https:/…
    #> $ issn_l                      <chr> "0175-7598", "1422-0067", "0960-8524", "09…
    #> $ host_organization           <chr> "https://openalex.org/P4310319900", "https…
    #> $ host_organization_name      <chr> "Springer Science+Business Media", "Multid…
    #> $ landing_page_url            <chr> "https://doi.org/10.1007/s00253-009-2246-7…
    #> $ pdf_url                     <chr> NA, "https://www.mdpi.com/1422-0067/9/9/16…
    #> $ license                     <chr> NA, NA, NA, NA, "cc-by", NA, NA, NA, NA, N…
    #> $ version                     <chr> NA, "publishedVersion", NA, NA, "published…
    #> $ referenced_works            <list> <"https://openalex.org/W1417235137", "htt…
    #> $ referenced_works_count      <int> 55, 193, 9, 10, 14, 145, 16, 0, 211, 50, 1…
    #> $ related_works               <list> <"https://openalex.org/W4387315092", "htt…
    #> $ concepts                    <list> [<data.frame[21 x 5]>], [<data.frame[18 x…
    #> $ topics                      <list> [<tbl_df[12 x 5]>], [<tbl_df[12 x 5]>], […
    #> $ keywords                    <list> [<data.frame[3 x 3]>], [<data.frame[5 x 3…
    #> $ is_paratext                 <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, …
    #> $ is_retracted                <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, …
    #> $ language                    <chr> "en", "en", "en", "en", "en", "en", "en", …
    #> $ grants                      <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, <…
    #> $ apc                         <list> [<data.frame[2 x 5]>], [<data.frame[2 x 5…
    #> $ first_page                  <chr> "849", "1621", "5478", "1633", "457", "540…
    #> $ last_page                   <chr> "860", "1651", "5484", "1645", "472", "555…
    #> $ volume                      <chr> "85", "9", "100", "35", "129", "45", "32",…
    #> $ issue                       <chr> "4", "9", "22", "5", NA, NA, "8", "05", NA…

## Citation network

Build a citation network to map the relationships between documents. Direct citation captures time-ordered influence; bibliographic coupling groups papers that share references.

    net <- birddog::sniff_network(M, type = "direct citation")

    net |>
      tidygraph::activate(nodes) |>
      dplyr::select(name, AU, PY, TI, TC) |>
      dplyr::arrange(dplyr::desc(TC))
    #> # A tbl_graph: 29490 nodes and 197059 edges
    #> #
    #> # A directed simple graph with 297 components
    #> #
    #> # Node Data: 29,490 × 5 (active)
    #>    name        AU                                                 PY TI       TC
    #>    <chr>       <chr>                                           <int> <chr> <int>
    #>  1 W2072823483 PETER WEILAND                                    2009 Biog…  2672
    #>  2 W2109587007 MOHAMMAD J. TAHERZADEH;KEIKHOSRO KARIMI          2008 Pret…  2542
    #>  3 W2125363721 DAVID SCHMEIDLER                                 1969 The …  1873
    #>  4 W2089274821 İRINI ANGELIDAKI;M. M. ALVES;DAVID BOLZONELLA;…  2009 Defi…  1857
    #>  5 W2075740579 PERRY L. MCCARTY;JAEHO BAE;JEONGHWAN KIM         2011 Dome…  1670
    #>  6 W2032792259 JENS BO HOLM‐NIELSEN;TEODORITA AL SEADI;PIOTR …  2009 The …  1616
    #>  7 W2024397118 CHUNLAN MAO;YONGZHONG FENG;XIAOJIAO WANG;GUANG…  2015 Revi…  1540
    #>  8 W2043402970 YI ZHENG;JIA ZHAO;FUQING XU;YEBO LI              2014 Pret…  1238
    #>  9 W2018893323 ELINE RYCKEBOSCH;MARGRIET DROUILLON;HAN VERVAE…  2011 Tech…  1228
    #> 10 W2111419835 CUNSHENG ZHANG;HAIJIA SU;JAN BAEYENS;TIANWEI T…  2014 Revi…  1173
    #> # ℹ 29,480 more rows
    #> #
    #> # Edge Data: 197,059 × 2
    #>    from    to
    #>   <int> <int>
    #> 1     1    48
    #> 2     1    80
    #> 3     1    77
    #> # ℹ 197,056 more rows

## Components

Identify connected components to eliminate disconnected documents that do not share the same bibliographic references.

    comps <- birddog::sniff_components(net)

    comps$components |>
      dplyr::slice_head(n = 5) |>
      gt::gt()

component | quantity_publications | average_age
--- | --- | ---
c1 | 28820 | 2016.840
c2 | 27 | 2018.444
c3 | 7 | 2014.857
c4 | 7 | 2011.857
c5 | 7 | 2019.286

## Groups (community detection)

Detect research communities within the citation network. Each group represents a cluster of related publications.

    groups <- birddog::sniff_groups(
      comps,
      algorithm = "fast_greedy",
      min_group_size = 30,
      seed = 888L
    )

    groups$aggregate |>
      gt::gt()

group | quantity_papers | average_age
--- | --- | ---
c1g1 | 6448 | 2017.027
c1g2 | 4157 | 2015.351
c1g3 | 2960 | 2016.728
c1g4 | 2893 | 2017.972
c1g5 | 1937 | 2017.712
c1g6 | 1805 | 2015.425
c1g7 | 1588 | 2017.868
c1g8 | 1529 | 2017.650
c1g9 | 1289 | 2016.700
c1g10 | 924 | 2017.745
c1g11 | 853 | 2017.613
c1g12 | 818 | 2017.555
c1g13 | 598 | 2015.572
c1g14 | 442 | 2017.713
c1g15 | 295 | 2011.854
c1g16 | 47 | 2013.319
c1g17 | 31 | 2019.548

### Group attributes

Summarize group-level statistics including publication trends and growth rates.

    # ~2 min
    groups_attributes <- birddog::sniff_groups_attributes(
      groups,
      growth_rate_period = 2010:2024,
      show_results = FALSE
    )

    groups_attributes$attributes_table

Groups Attributes
Group | Publications | Average age1 | Growth rate2 | Doubling time3 | Horizon plot4
--- | --- | --- | --- | --- | ---
c1g1 | 6448 | 2017+0m | 6.5 | 11y+1m |
c1g2 | 4157 | 2015+4m | 4.9 | 15y+7m |
c1g3 | 2960 | 2016+9m | 3.7 | 19y+2m |
c1g4 | 2893 | 2017+12m | 9.0 | 8y |
c1g5 | 1937 | 2017+9m | 10.0 | 7y+4m |
c1g6 | 1805 | 2015+5m | 2.9 | 24y+6m |
c1g7 | 1588 | 2017+10m | 8.6 | 8y+5m |
c1g8 | 1529 | 2017+8m | 11.2 | 7y+7m |
c1g9 | 1289 | 2016+8m | 6.0 | 12y+11m |
c1g10 | 924 | 2017+9m | 7.1 | 10y+1m |
c1g11 | 853 | 2017+7m | 6.9 | 10y+5m |
c1g12 | 818 | 2017+7m | 8.4 | 9y+7m |
c1g13 | 598 | 2015+7m | 4.6 | 15y+4m |
c1g14 | 442 | 2017+9m | 11.3 | 6y+6m |
c1g15 | 295 | 2011+10m | 4.8 | 15y+8m |
c1g16 | 47 | 2013+4m | 1.3 | 54y+6m |
c1g17 | 31 | 2019+7m | 16.3 | 5y+7m |
1 Average publication year: For example, '2016+7m' means that the articles were published, on average, in 2016 plus seven months.
2 Growth rate percentage year. Calculated by exp(b1)-1 where b1 is the econometric model coefficient. Time span, 2010 until 2024.
3 y = years, m = months. Calculated by ln(2)/b1 where b1 is the econometric model coefficient.
4 Publications between 2010 and 2024. Chart type horizon plot.
Source: OpenAlex. Data extracted, organized and estimated by the authors.

### Group keywords

Explore the most frequent keywords in each group.

    groups_keywords <- birddog::sniff_groups_keywords(groups)

    groups_keywords |>
      dplyr::filter(group %in% c('c1g1', 'c1g2', 'c1g3')) |>
      gt::gt()

group | term_freq | term_tfidf
--- | --- | ---
c1g1 | biogas (5702); biogas production (2089); digestion (942); mesophile (785); food waste (644); biodegradable waste (563); cow dung (515); sewage sludge (498); hydraulic retention time (336); digestate (308); lignocellulosic biomass (261); total dissolved solids (228); hemicellulose (203); (188); hyacinth (168) | food waste [0.004] (644); gompertz function [0.004] (150); hyacinth [0.0036] (168); lignocellulosic biomass [0.0035] (261); steam explosion [0.003] (69); total dissolved solids [0.003] (228); digestion [0.0028] (942); hemicellulose [0.0027] (203); mesophile [0.0024] (785); enzymatic hydrolysis [0.0023] (88); sodium hydroxide [0.0023] (60); corn stover [0.0022] (82); stalk [0.0022] (49); sonication [0.0021] (55); eichhornia crassipes [0.002] (76)
c1g2 | biogas (3485); biogas production (847); cow dung (261); (212); biodegradable waste (193); energy source (156); animal waste (146); renewable resource (134); mesophile (120); firewood (109); digestion (102); digestate (99); stove (95); food waste (93); investment (85) | firewood [0.0069] (109); stove [0.0051] (95); diesel generator [0.0048] (46); emergy [0.0048] (33); rural electrification [0.0046] (44); dome (geology) [0.0045] (31); microgrid [0.0044] (50); kerosene [0.0036] (41); liquefied petroleum gas [0.0036] (56); hybrid power [0.0035] (34); energy poverty [0.003] (14); payback period [0.0029] (82); deforestation [0.0028] (27); promotion (chess) [0.0025] (24); consumption [0.0024] (46)
c1g3 | biogas (2368); biogas production (588); energy crop (281); silage (221); (217); digestate (213); food waste (97); biodegradable waste (87); cogeneration (84); renewable resource (75); digestion (68); manure management (66); investment (65); hectare (58); sewage sludge (58) | hectare [0.0072] (58); energy crop [0.0049] (281); sweet sorghum [0.0044] (22); arable land [0.0043] (41); silage [0.0039] (221); phalaris arundinacea [0.0033] (11); agricultural land [0.0031] (13); arundo donax [0.0027] (11); manure management [0.0025] (66); crop rotation [0.0024] (12); externality [0.0024] (10); supply chain optimization [0.0024] (10); fodder [0.0024] (19); triticale [0.0023] (22); cogeneration [0.0023] (84)

### Group NLP terms

Extract key phrases from abstracts using natural language processing.

    # ~30 min
    groups_terms <- birddog::sniff_groups_terms(groups, algorithm = "phrase")

    groups_terms$terms_table |>
      dplyr::slice_head(n = 3) |>
      gt::gt()

group | term_freq | term_tfidf
--- | --- | ---
c1g1 | biogas production (6713); anaerobic digestion (5247); methane production (1419); food waste (1344); anaerobic co-digestion (1005); methane yield (922); biogas yield (879); cow dung (818); solid waste (804); sewage sludge (759); volatile solids (668); renewable energy (638); water hyacinth (633); retention time (624); digestion process (567) | water hyacinth [0.0017] (633); anaerobic digestion [0.0016] (5247); thermal pretreatment [0.0013] (123); wheat straw [0.0010] (382); anaerobic co-digestion [0.0010] (1005); hydrodynamic cavitation [0.0009] (66); gompertz model [0.0009] (174); coffee pulp [0.0009] (82); production from rice [0.0008] (59); naoh pretreatment [0.0008] (58); sugarcane bagasse [0.0008] (132); mixing ratios [0.0008] (107); rumen fluid [0.0008] (147); orange peel [0.0007] (53); crude glycerol [0.0007] (84)
c1g2 | biogas production (1747); renewable energy (1348); anaerobic digestion (988); biogas plants (726); biogas plant (654); biogas technology (638); cow dung (572); energy sources (512); rural areas (388); organic waste (360); case study (343); biogas digester (331); solid waste (328); waste management (318); energy source (290) | technology adoption [0.0022] (83); rural households [0.0021] (102); household biogas [0.0020] (241); domestic biogas [0.0018] (91); biogas digesters [0.0018] (253); cassava peels [0.0018] (87); biogas technology adoption [0.0017] (62); household energy [0.0016] (81); biogas technology [0.0016] (638); rural biogas [0.0015] (73); rural household [0.0014] (84); biogas adoption [0.0014] (51); hybrid system [0.0013] (115); adoption of biogas [0.0013] (81); adoption of biogas technology [0.0013] (47)
c1g3 | biogas production (1711); anaerobic digestion (1040); biogas plants (1010); renewable energy (656); biogas plant (638); life cycle (420); greenhouse gas (351); agricultural biogas (321); energy production (301); cycle assessment (300); life cycle assessment (274); energy crops (266); energy sources (261); case study (247); dry matter (217) | cross ref [0.0072] (191); lt ;w [0.0053] (140); lt ;w :lsdexception [0.0041] (109); ;w :lsdexception [0.0041] (109); 2021 cross [0.0031] (82); cup plant [0.0030] (78); 2020 cross [0.0025] (67); agricultural biogas plants [0.0021] (151); 2022 cross [0.0021] (55); operations research [0.0021] (55); silage maize [0.0020] (69); 2019 cross [0.0019] (50); 2021 cross ref [0.0018] (47); energy crops [0.0015] (266); agricultural biogas [0.0015] (321)

### Hubs

Classify documents by their role in the network using the Zi-Pi method. Hub documents connect different research communities.

    # ~20 min
    groups_hubs <- birddog::sniff_groups_hubs(groups)

    groups_hubs |>
      dplyr::filter(zone != "noHub") |>
      dplyr::mutate(Zi = round(Zi, 2), Pi = round(Pi, 2)) |>
      dplyr::arrange(dplyr::desc(zone), dplyr::desc(Zi)) |>
      dplyr::slice_head(n = 15) |>
      gt::gt() |>
      gt::text_transform(
        locations = gt::cells_body(columns = name),
        fn = function(x) {
          glue::glue('<a href="https://openalex.org/{x}" target="_blank">{x}</a>')
        }
      )

group | name | TC | Ki | ki | Zi | Pi | zone
--- | --- | --- | --- | --- | --- | --- | ---
c1g1 | W2024397118 | 1540 | 524 | 243 | 17.45 | 0.75 | R7
c1g6 | W2072823483 | 2672 | 1101 | 217 | 17.20 | 0.87 | R7
c1g3 | W1972749747 | 737 | 344 | 138 | 13.67 | 0.78 | R7
c1g3 | W2794649776 | 1111 | 523 | 127 | 12.54 | 0.86 | R7
c1g1 | W1606100078 | 939 | 410 | 154 | 10.90 | 0.81 | R7
c1g5 | W2032792259 | 1616 | 551 | 97 | 9.03 | 0.88 | R7
c1g13 | W1985829371 | 227 | 89 | 34 | 8.20 | 0.78 | R7
c1g1 | W2730727434 | 527 | 208 | 79 | 5.38 | 0.79 | R7
c1g12 | W2029511769 | 308 | 96 | 34 | 5.04 | 0.78 | R7
c1g13 | W2338842862 | 132 | 50 | 21 | 4.83 | 0.78 | R7
c1g1 | W2049325764 | 385 | 163 | 64 | 4.27 | 0.79 | R7
c1g5 | W2156879463 | 437 | 119 | 45 | 3.96 | 0.78 | R7
c1g3 | W2798048710 | 329 | 160 | 43 | 3.93 | 0.82 | R7
c1g1 | W2276289647 | 292 | 131 | 59 | 3.90 | 0.76 | R7
c1g8 | W1912164921 | 488 | 132 | 34 | 3.82 | 0.85 | R7

## Indexes: Citations Cycle Time

Measure the pace of change in each group by tracking how old the cited references are over time.

    # ~1.5 min
    groups_cct <- birddog::sniff_citations_cycle_time(
      groups,
      scope = "groups",
      start_year = 2000,
      end_year = 2024
    )

    groups_cct$plots[["c1g3"]]

## Indexes: Entropy

Track keyword diversity within each group over time. Increasing entropy signals thematic diversification; decreasing entropy signals convergence.

    groups_entropy <- birddog::sniff_entropy(
      groups,
      scope = "groups",
      start_year = 2000,
      end_year = 2024
    )

    groups_entropy$plots[["c1g3"]]

## Group trajectories

Track how research communities evolve over time by building cumulative networks at each year and following groups through consecutive periods.

    # ~2 min
    groups_cumulative <- birddog::sniff_groups_cumulative(groups)

    suppressMessages({
      groups_cumulative_trajectories <- birddog::sniff_groups_trajectories(groups_cumulative)
    })

    birddog::plot_group_trajectories_2d(
      groups_cumulative_trajectories,
      group = "c1g3",
      label_vertical_position = -2
    )

    birddog::plot_group_trajectories_3d(
      groups_cumulative_trajectories,
      group = "c1g3"
    )

### Trajectory detection and variable-width lines

Automatically detect the highest-scoring temporal paths within a group using dynamic programming, then display them as variable-width lines that grow with cumulative paper counts.

    traj_data <- birddog::detect_main_trajectories(
      groups_cumulative_trajectories,
      group = "c1g3"
    )

    traj_filtered <- birddog::filter_trajectories(
      traj_data$trajectories,
      top_n = 3
    )

    birddog::plot_group_trajectories_lines_2d(
      traj_data = traj_data,
      traj_filtered = traj_filtered,
      title = "c1g3"
    )

    birddog::plot_group_trajectories_lines_3d(
      traj_data = traj_data,
      traj_filtered = traj_filtered,
      group_id = "c1g3"
    )

## Citation growth per document

Track how individual documents accumulate citations over time to identify fast-growing papers.

    # ~11 min
    groups_cumulative_citations <- birddog::sniff_groups_cumulative_citations(
      groups,
      min_citations = 2
    )

## Main Path Analysis

Identify the key route through the citation network, revealing the most influential chain of documents over time.

    groups_key_route <- birddog::sniff_key_route(groups, scope = "groups")

    groups_key_route[["c1g3"]]$plot

    groups_key_route[["c1g3"]]$data |>
      dplyr::select(-name) |>
      gt::gt()

    key_route_c1g3_data |>
      dplyr::select(document = name, name2, title = TI) |>
      gt::gt() |>
      gt::text_transform(
        locations = gt::cells_body(columns = document),
        fn = function(x) {
          glue::glue('<a href="https://openalex.org/{x}" target="_blank">{x}</a>')
        }
      )

document | name2 | title
--- | --- | ---
W2008561700 | GRUBER_2006 | Biogas production from maize and dairy cattle manure—Influence of biomass composition on the methane yield
W2033886695 | SCHNEEBERGER_2008 | The optimal size for biogas plants
W2158862659 | NEFF_2009 | Utilization of semi‐natural grassland through integrated generation of solid fuel and biogas from biomass. I. Effects of hydrothermal conditioning and mechanical dehydration on mass flows of organic and mineral plant compounds, and nutrient balances
W2019905517 | WACHENDORF_2009 | Utilization of semi‐natural grassland through integrated generation of solid fuel and biogas from biomass. II. Effects of hydrothermal conditioning and mechanical dehydration on anaerobic digestion of press fluids
W1972749747 | OWENDE_2010 | Evaluation of energy efficiency of various biogas production and utilization pathways
W2134179273 | WACHENDORF_2010 | Utilization of semi‐natural grassland through integrated generation of solid fuel and biogas from biomass. III. Effects of hydrothermal conditioning and mechanical dehydration on solid fuel properties and on energy and greenhouse gas balances
W2003509580 | OWENDE_2011 | Environmental impacts of biogas deployment – Part II: life cycle assessment of multiple production and utilization pathways
W1997982003 | OWENDE_2011 | Environmental impacts of biogas deployment – Part I: life cycle inventory for evaluation of production process emissions to air
W2023450208 | WACHENDORF_2011 | Integrated generation of solid fuel and biogas from green cut material from landscape conservation and private households
W3124542086 | MORETTO_2011 | Investing in biogas: Timing, technological choice and the value of flexibility from input mix
W2075790500 | WACHENDORF_2011 | Influence of sward maturity and pre-conditioning temperature on the energy production from grass silage through the integrated generation of solid fuel and biogas from biomass (IFBB): 1. The fate of mineral compounds
W2091870505 | WACHENDORF_2011 | Influence of sward maturity and pre-conditioning temperature on the energy production from grass silage through the integrated generation of solid fuel and biogas from biomass (IFBB): 2. Properties of energy carriers and energy yield
W2078934777 | SONG_2012 | Life-cycle energy production and emissions mitigation by comprehensive biogas–digestate utilization
W2051151463 | LOMBARDI_2012 | Environmental analysis of biogas production systems
W2044886835 | WACHENDORF_2013 | Review of concepts for a demand-driven biogas supply for flexible power generation
W2064487381 | GONZÁLEZ‐GARCÍA_2013 | Anaerobic digestion of different feedstocks: Impact on energetic and environmental balances of biogas process
W2046271618 | CARROSIO_2013 | Energy production from biogas in the Italian countryside: Policies and organizational models
W2010747108 | WACHENDORF_2013 | Energetic conversion of European semi-natural grassland silages through the integrated generation of solid fuel and biogas from biomass: Energy yields and the fate of organic compounds
W2065522991 | WACHENDORF_2014 | Cost analysis of concepts for a demand oriented biogas supply for flexible power generation
W2191399137 | NIKOLAUSZ_2015 | Changing Feeding Regimes To Demonstrate Flexible Biogas Production: Effects on Process Performance, Microbial Community Structure, and Methanogenesis Pathways
W2048561114 | NORDBERG_2015 | Demand-Orientated Power Production from Biogas: Modeling and Simulations under Swedish Conditions
W1126637212 | FIALA_2015 | CARBON FOOTPRINT OF ELECTRICITY FROM ANAEROBIC DIGESTION PLANTS IN ITALY
W2312683967 | AZAPAGIC_2016 | Life Cycle Environmental Impacts of Electricity from Biogas Produced by Anaerobic Digestion
W2556832018 | KRÜMPEL_2016 | Demand-driven biogas production in anaerobic filters
W2592402297 | NELLES_2017 | Demand-driven biogas production by flexible feeding in full-scale – Process stability and flexibility potentials
W2724845225 | BOZZETTO_2017 | Greenhouse gas emissions of electricity and biomethane produced using the Biogasdoneright™ system: four case studies from Italy
W2768561067 | DALE_2017 | Sequential crops for food, energy, and economic development in rural areas: the case of Sicily
W2805047418 | LIAO_2018 | Anaerobic co-digestion of multiple agricultural residues to enhance biogas production in southern Italy
W2794973208 | THRÄN_2018 | Flexible Biogas in Future Energy Systems—Sleeping Beauty for a Cheaper Power Generation
W2888708623 | LIAO_2018 | Spatial analysis of feedstock supply and logistics to establish regional biogas power generation: A case study in the region of Sicily
W2790521460 | PORTO_2018 | A GIS‐based spatial index of feedstock‐mixture availability for anaerobic co‐digestion of Mediterranean by‐products and agricultural residues
W2914822267 | PROCHNOW_2019 | The Future Agricultural Biogas Plant in Germany: A Vision
W2988479878 | EUVERINK_2019 | Rambling facets of manure-based biogas production in Europe: A briefing
W2969910225 | CLANCY_2019 | Promoting agricultural biogas and biomethane production: Lessons from cross-country studies
W2907370432 | HUISINGH_2019 | Investigating energy and environmental issues of agro-biogas derived energy systems: A comprehensive review of Life Cycle Assessments
W2941197762 | BLENGINI_2019 | Life Cycle Assessment of a Biogas-Fed Solid Oxide Fuel Cell (SOFC) Integrated in a Wastewater Treatment Plant
W3004153001 | PILARSKI_2020 | 15 Years of the Polish agricultural biogas plants: their history, current status, biogas potential and perspectives
W3102984777 | DACH_2020 | Biogas Plant Exploitation in a Middle-Sized Dairy Farm in Poland: Energetic and Economic Aspects
W4205695009 | MAZURKIEWICZ_2022 | Energy and Economic Balance between Manure Stored and Used as a Substrate for Biogas Production
W4309852604 | MAZURKIEWICZ_2022 | Analysis of the Energy and Material Use of Manure as a Fertilizer or Substrate for Biogas Production during the Energy Crisis
W4386850198 | MAZURKIEWICZ_2023 | Loss of Energy and Economic Potential of a Biogas Plant Fed with Cow Manure due to Storage Time
W4321781369 | DACH_2023 | Reduction of Greenhouse Gas Emissions by Replacing Fertilizers with Digestate
W4386913257 | MAZURKIEWICZ_2023 | The Impact of Manure Use for Energy Purposes on the Economic Balance of a Dairy Farm
W4405283529 | KUSZ_2024 | The Capacity of Power of Biogas Plants and Their Technical Efficiency: A Case Study of Poland

## Topic modeling (STM)

Detect topics within a group using Structural Topic Modeling, creating sub-groups based on linguistic similarities.

    # Prepare STM data (~30 min)
    groups_stm_prepare <- birddog::sniff_groups_stm_prepare(
      groups,
      group_to_stm = "c1g3"
    )

17 topics is the best fit.

    groups_stm_prepare$plots[['metrics_by_k']]
    groups_stm_prepare$plots[['exclusivity_vs_coherence']]

    # Run STM (~35 sec)
    groups_stm_run <- birddog::sniff_groups_stm_run(
      groups_stm_prepare,
      k_topics = 17,
      n_top_documents = 20
    )

    groups_stm_run$topic_proportion |>
      dplyr::mutate(topic_proportion = round(topic_proportion, 3)) |>
      gt::gt()

    groups_stm_run$top_documents |>
      dplyr::group_by(topic) |>
      dplyr::arrange(dplyr::desc(gamma)) |>
      dplyr::slice_head(n = 3) |>
      dplyr::select(-DI) |>
      gt::gt() |>
      gt::text_transform(
        locations = gt::cells_body(columns = document),
        fn = function(x) {
          glue::glue('<a href="https://openalex.org/{x}" target="_blank">{x}</a>')
        }
      )

## Session info

    sessionInfo()
    #> R version 4.5.2 (2025-10-31)
    #> Platform: x86_64-pc-linux-gnu
    #> Running under: Manjaro Linux
    #>
    #> Matrix products: default
    #> BLAS:   /usr/lib/libblas.so.3.12.0
    #> LAPACK: /usr/lib/liblapack.so.3.12.0  LAPACK version 3.12.0
    #>
    #> locale:
    #>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
    #>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
    #>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
    #>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
    #>  [9] LC_ADDRESS=C               LC_TELEPHONE=C
    #> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
    #>
    #> time zone: America/Cuiaba
    #> tzcode source: system (glibc)
    #>
    #> attached base packages:
    #> [1] stats     graphics  grDevices utils     datasets  methods   base
    #>
    #> other attached packages:
    #> [1] birddog_1.0.4
    #>
    #> loaded via a namespace (and not attached):
    #>  [1] gtable_0.3.6        xfun_0.56           bslib_0.10.0
    #>  [4] ggplot2_4.0.2       htmlwidgets_1.6.4   ggrepel_0.9.6
    #>  [7] lattice_0.22-7      vctrs_0.7.1         tools_4.5.2
    #> [10] generics_0.1.4      tibble_3.3.1        janeaustenr_1.0.0
    #> [13] tokenizers_0.3.0    pkgconfig_2.0.3     Matrix_1.7-4
    #> [16] data.table_1.18.2.1 RColorBrewer_1.1-3  S7_0.2.1
    #> [19] gt_1.1.0            lifecycle_1.0.5     compiler_4.5.2
    #> [22] farver_2.1.2        stringr_1.6.0       ggforce_0.5.0
    #> [25] graphlayouts_1.2.2  litedown_0.7        openalexR_3.0.1
    #> [28] SnowballC_0.7.1     htmltools_0.5.9     sass_0.4.10
    #> [31] tidytext_0.4.3      yaml_2.3.12         lazyeval_0.2.2
    #> [34] plotly_4.12.0       pillar_1.11.1       jquerylib_0.1.4
    #> [37] tidyr_1.3.2         MASS_7.3-65         cachem_1.1.0
    #> [40] viridis_0.6.5       commonmark_2.0.0    tidyselect_1.2.1
    #> [43] digest_0.6.39       stringi_1.8.7       dplyr_1.2.0
    #> [46] purrr_1.2.1         polyclip_1.10-7     fastmap_1.2.0
    #> [49] grid_4.5.2          cli_3.6.5           magrittr_2.0.4
    #> [52] dichromat_2.0-0.1   ggraph_2.2.2        tidygraph_1.3.1
    #> [55] utf8_1.2.6          withr_3.0.2         scales_1.4.0
    #> [58] rmarkdown_2.30      httr_1.4.8          igraph_2.2.2
    #> [61] otel_0.2.0          gridExtra_2.3       memoise_2.0.1
    #> [64] evaluate_1.0.5      knitr_1.51          viridisLite_0.4.3
    #> [67] markdown_2.0        rlang_1.1.7         Rcpp_1.1.1
    #> [70] glue_1.8.0          tweenr_2.0.3        xml2_1.4.0
    #> [73] jsonlite_2.0.0      R6_2.6.1            fs_1.6.6

## Hardware

- Hostname: lisa
- Processor: AMD Ryzen 9 5900X 12-Core Processor
- RAM: 125.7 GB
- Storage: 2 SSD’s in `raid0` for data and 1 SSD for the OS.