Bibliography Report

Author
Affiliation

Rainer M. Krug

Abstract

Reports analysing the IPBES Libraries on Zotero.

Introduction

This report assesses the PAND Bibliography in regards to different measures and shows some information of the content. It does not assess the content of the sources but rather the bibliometric data.

Bibliographic analysis

In most cases, the bibliographic analysis is done on the OpenAlex library. In some cases, we can also do it using the Zenodo data. This is mentioned in the beginning of each subsection

Publication types

Analysis: Zenodo and OpenAlex

OpenAlex and Zotero use different tyoes. These are not directly compable, which is whu=y both are shown.

Show the code
bib_data$figure_types_data |>
  dplyr::arrange(
    from,
    desc(count)
  ) |>
  knitr::kable(
    caption = "Types of documents from the Zotero bibliography as well as from OpenApex."
  )
Types of documents from the Zotero bibliography as well as from OpenApex.
type count from
article 337 OpenAlex
review 100 OpenAlex
letter 17 OpenAlex
preprint 6 OpenAlex
editorial 4 OpenAlex
book-chapter 2 OpenAlex
erratum 1 OpenAlex
journalArticle 604 Zotero
report 30 Zotero
book 22 Zotero
webpage 19 Zotero
bookSection 14 Zotero
conferencePaper 3 Zotero
bill 1 Zotero
blogPost 1 Zotero
document 1 Zotero
newspaperArticle 1 Zotero
Show the code
bib_data$figure_types

Zenodo versus OpenAlex Types

Analysis: Zenodo and OpenAlex

The types entered in the Zenodo library and the types as retrieved from OpenAlex are not linked, therefore they can differ. This can indicate faulty data entering in Zenodo but not necessarily has to. These cases need to be carefully evaluated and here only given as a starting point.

NA in OpenAlex is likely caused by the doi not found in OpenAlex (not in there, not valid, non-standard DOI in Zenodo). NA in Zotero is linked to non-standard DOI entries (i.e. with http) which can therefore not be linked to OpenAlex data. If all DOIs are in standard format, there should be no NAs in this Table in the column Ferom Zenodo.

TODO: Improvements should be done after feedback.

Show the code
bib_data$metrics$types$comparison |>
  knitr::kable(
    col.names = c("Type from Zenodo", "Type from [OpenAlex](https://OpenAlex.org){target='_blank'}", "count"),
    caption = "Table giving the combination of types from Zenodo as well as [OpenAlex](https://OpenAlex.org){target='_blank'} and their frequency"
  )
Table giving the combination of types from Zenodo as well as OpenAlex and their frequency
Type from Zenodo Type from OpenAlex count
journalArticle article 302
journalArticle NA 189
journalArticle review 88
NA article 37
report NA 30
book NA 22
webpage NA 19
journalArticle letter 16
bookSection NA 14
NA review 12
journalArticle preprint 6
journalArticle editorial 4
conferencePaper NA 3
journalArticle book-chapter 1
blogPost NA 1
bill NA 1
document NA 1
newspaperArticle NA 1
NA letter 1
NA book-chapter 1
NA erratum 1

Year of Publication

Analysis: Zenodo and OpenAlex

The following ranges of publication years can be found in the data.

Show the code
bib_data$figure_pub_year_data |>
  dplyr::summarize(
    min = min(publication_year, na.rm = TRUE),
    max = max(publication_year, na.rm = TRUE),
    .by = c(from)
  ) |>
  knitr::kable()
from min max
Zenodo 1976 2021
OpenAlex 1976 2020
Show the code
bib_data$figure_pub_year
Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_col()`).

Access Status of References

Analysis: OpenAlex

Show the code
bib_data$figure_oa_status

50 Most often cited Journals

Analysis: Zenodo

TODO: OpenAlex should be added

Show the code
bib_data$figure_top_journals

This table contains all Journals as specified in the Zotero database.

Show the code
bib_data$figure_top_journals_data |>
  IPBES.R::table_dt("cited_journals")

Coutries of Institutes of all authors

Analysis: OpenAlex

In this section we will take a closer look at the countries from which ih the authors ot the publication come. THe data includes all authoirs without weighting.

Show the code
#|
#| fig-height: 10
#| fig-width: 10

bib_data$figure_top_country_map

This plot only contains the countries with more than 10 references.

Show the code
#|
#| fig-height: 10
#| fig-width: 10

bib_data$figure_top_country

This table contains all countries and the number of authorship.

Show the code
bib_data$figure_top_country_data |>
  IPBES.R::table_dt("top_countries")

Cleanliness of the Bibliography

Cleanliness of a bibliography is defined here as the quality of the bibliografic data in the bibliography. It does not concern any topical measures, only measures related to the bibliografic data in the bibliography.

The analysis is at the moment only done for DOIs as corresponding measures are not available at the moment for ISBNs and ISSNs and duplicate ISBNs and ISSNs can be rcorrect as different chapters of a book might be in the bibliography.

Entries with DOIs, ISBNs or ISSNs in Zotero

To identify a reference, the most widely used identifier is the DOI. The following table shows the number of references with a DOI and the number of unique DOIs.

To consider duplicate ISBNs or ISSNs as duplicates entries in the library is not waranted as e.g. differenc chapters of a book can be separate entries in the library and therefore lead to duplicates.

  • DOIs: 500 (71.84%) - 2 duplicates
  • ISBNss: 28 (4.02%)
  • ISBNss: 448 (64.37%)

DOIs in Zotero

The following sections provide some more detailed analysis of the bibliography in Zenodo. The tables all contain clickable links which, shwen clicked, show the respective article in the Zotero bibliograpohy.

Duplicates

The following DOIs are duplicates in the bibliography. This table should be empty.

Show the code
if (length(bib_data$metrics$zotero_dois$duplicate) > 0) {
  data.frame(
    doi = bib_data$metrics$zotero_dois$duplicate,
    link = paste0(bib_data$bibliography$url, "/items/", names(bib_data$metrics$zotero_dois$duplicate))
  ) |>
    dplyr::mutate(
      sort = doi,
      doi = paste0('<a href="', link, '" target="_blank">', doi, "</a>"),
    ) |>
    dplyr::arrange(
      sort
    ) |>
    dplyr::mutate(
      sort = NULL
    ) |>
    knitr::kable(
      caption = "DOIs in Zenodo which are duplicated",
      escape = FALSE
    )
}
DOIs in Zenodo which are duplicated
doi link
UQXN7TPN 10.1038/39057 https://www.zotero.org/groups/2499181/items/UQXN7TPN
I35JTJVU 10.1038/39057 https://www.zotero.org/groups/2499181/items/I35JTJVU

Non Standard

All DOIs should be given as only the DOI without the resolver, i.e. not starting with http. The following table shows all entries which do have a non-conform DOI:

Show the code
#|

http <- grep("http", bib_data$metrics$zotero_dois$id_raw)
data.frame(
  doi = bib_data$metrics$zotero_dois$id_raw[http],
  link = paste0(bib_data$bibliography$url, "/items/", names(bib_data$metrics$zotero_dois$id_raw)[http])
) |>
  dplyr::mutate(
    doi = paste0('<a href="', link, '" target="_blank">', doi, "</a>"),
    link = NULL
  ) |>
  knitr::kable(
    caption = "DOIs in Zenodo which include a `http`",
    escape = FALSE
  )

Not Valid

Here we do acheck for the structural validity of the dois. This check needs to be improved. Of these 85 are not valid. These are:

Show the code
#|

if (length(bib_data$metrics$zotero_dois$not_valid) > 0) {
  data.frame(
    doi = bib_data$metrics$zotero_dois$not_valid,
    link = paste0(bib_data$bibliography$url, "/items/", names(bib_data$metrics$zotero_dois$not_valid))
  ) |>
    dplyr::mutate(
      doi = paste0('<a href="', link, '" target="_blank">', doi, "</a>"),
      link = NULL
    ) |>
    knitr::kable(
      caption = "DOIs in Zenodo which ar not valid",
      escape = FALSE
    )
} else {
  print("All DOIs in Zenodo are valid.")
}

Not in OpenAlex

To validate the existence and validity of the DOIs, we check if the DOIs are in the OpenAlex database.

Of the 500 unique DOIs in the library, 85 (17%) are in not in OpenAlex. This includes the non-valid DOIS, which are filtered out in the table below.

Show the code
data.frame(
  doi = bib_data$metrics$zotero_dois$not_in_oa,
  link = paste0(bib_data$bibliography$url, "/items/", names(bib_data$metrics$zotero_dois$not_in_oa))
) |>
  dplyr::mutate(
    doi = paste0('<a href="', link, '" target="_blank">', doi, "</a>"),
    link = NULL
  ) |>
  knitr::kable(
    caption = "DOIs in Zenodo which ar not in [OpenAlex](https://OpenAlex.org){target='_blank'}",
    escape = FALSE
  )
DOIs in Zenodo which ar not in OpenAlex
doi
YNMPABCX 10.1172/JCI34706
4EUCGTGE 10.1111/j.1755-263X.2010.00121.x
5HWG4BQA 10.1016/S0140-6736(03)14630-2
BTGTHEMD 10.1016/S2542-5196(19)30070-1
YERNE287 10.1016/S0140-6736(20)30185-9
6P69GS3Z 10.1017/S0031182000086121
WF2G7HFS 10.1579/0044-7447(2007)36[545:CBBCAH]2.0.CO;2
AST97QBL 10.1644/07-MAMM-A-015R1.1
YLVPPAWC 10.1128/CMR.00002-11
JHETNMAW 10.1016/S0169-5347(99)01665-1
NZYILREX 10.1016/S0140-6736(07)61256-2
UFREHS9E 10.1017/S0030605317001247
2XRQ9GRV 10.1016/S1473-3099(15)00502-2
N9N83L8B 10.2105/AJPH.2014.302236r
MTRQFYHI 10.1017/S0031182012000200
7EQRR22Y 10.1016/S1473-3099(13)70164-6
G2G9N85D 10.1016/S0140-6736(85)92556-5
XPZXN3Z9 10.2807/1560-7917.ES.2020.25.23.2001005
LQJLBCQD 10.1016/S0140-6736(20)31027-8
4SHKT7H3 10.1016/S0065-308X(05)62006-4
B6VVTJNL 10.1023/A:1009930313242
XDKA4UFJ 10.1016/S0169-5347(03)00123-X
ZF8V6TPP 10.1016/B978-1-4557-4801-3.00322-2
7ABJ9DAJ 10.1016/S2542-5196(17)30010-4
NCNEV5AJ 10.1016/S0140-6736(12)61684-5
UZ8AKLUI 10.1017/S0030605314000234
Q7X2W2C8 10.1017/S0950268820002046
65GJSFXU 10.1186/1476-072X-12-49
CURZ3PFV 10.1111/j.1365-294X.2012.05710.x
JXJHPRD5 10.1637/7554-033106R.1
B9V8HX88 10.5751/ES-00605-090105
QXH5DEYM 10.1056/NEJMp2002106
6SBZVHPL 10.1016/S0140-6736(13)61904-2
7I9NQTB7 10.1016/S0140-6736(12)61678-X
S6QB98QK 10.1056/NEJMoa2001316
S76ABASK 10.1016/S2542-5196(19)30045-2
2NXANHJG 10.1016/S2542-5196(20)30123-6
IWPJBS3K 10.1056/NEJMoa030747
FVRERCHE 10.1017/S0031182018001397
XRLM2RKW 10.1016/S0140-6736(20)31242-3
J6ATTHW5 10.1637/7564-033106R.1
HUQ5STFJ 10.1128/JVI.01498-14
VEPPUJK9 10.1017/S0030605306000056
J9UT783A 10.1016/S0140-6736(99)05128-4
SX9EAGPW 10.1071/WR9880651
Y7287I99 10.1016/S0140-6736(99)04299-3
4GDHH7LN 10.1016/S2542-5196(20)30178-9
TRX5YTM5 10.1056/NEJMoa1401505
WISHL5GH 10.1016/S0140-6736(03)15313-5
C4Q3HC4P 10.1128/JVI.01600-13
N3MMCF6Q 10.1637/8970-062609-Reg.1
T9NAQLV9 10.1128/mBio.01146-1429
CQUFDDMI 10.1016/j.biocon.2011.10.002
5WGNCD4N 10.1016/j.marpol.2017.06.036
W7C34G7L 10.1016/j.gecco.2016.03.007
AA4H2YRW 10.1016/j.marpol.2015.04.006
WCE5B8XK 10.1016/j.biocon.2014.12.019
W332D6Q2 10.1016/j.biocon.2012.02.009
J5VSEZQD 10.1016/j.tree.2020.02.005
7NY9SWAQ 10.1016/j.marpol.2017.10.031
VPKTCZE9 10.1016/j.scitotenv.2020.142919
Z2GCC8IX 10.1016/j.biocon.2020.108503
KY7APTMV 10.1016/j.pecon.2019.03.001
B8GMZTFW 10.1016/j.biocon.2010.07.030
PJBMNET5 10.1016/j.ecolecon.2009.11.010
IFMFNTFN 10.1016/j.gecco.2014.11.010
WVNQ9T8D 10.1016/j.biocon.2020.108596
7ZNJLF5N 10.1016/j.ecolecon.2006.07.007
BE2TDGP4 10.1016/j.jebo.2016.06.007
3VH5RBL4 10.1016/j.gecco.2018.e00486
IT4N6IJV 10.1016/j.ecolind.2017.07.002
K94YUNIN 10.1016/j.biocon.2017.11.007
HQ76S4IR 10.1098/rstb.2016.0123
M4ZM43RA 10.1128/mBio.00812-20
4TAN4QII 10.1098/rsos.181577
VY88LCVW 10.1016/j.onehlt.2015.11.002
VG4FX9UM 10.1016/j.cosust.2017.08.005
YFV5DLMK 10.17605/OSF.IO/5JX3G
ZKA5Z2JF 10.1017/S0031182014001796
PJ8GBW6S 10.1111/cobi.12785
IU6LC9FQ 10.1016/S0140-6736(20)30183-5
DAVYFADP 10.1098/rstb.2016.0131
S89M9Z5P 10.1098/rstb.2016.0173
UARICS8K 10.4269/ajtmh.2011.10-0041
CCEKBKIN 10.1645/0022-3395(2000)086[1135:Eocrih]2.0.Co;2

TODO Do Exist

TODO Finally we check, if these dois exist but are not ingested into OpenAlex. This is done using the doi.org resolver This is disabled at the moment and still needs to be implemented.

Reuse

Citation

BibTeX citation:
@report{krug,
  author = {Krug, Rainer M.},
  title = {Bibliography {Report}},
  langid = {en},
  abstract = {Reports analysing the IPBES Libraries on Zotero.}
}
For attribution, please cite this work as:
Krug, Rainer M. n.d. “Bibliography Report.”