The famous fish beds of Lebanon: the Upper Cretaceous Lagerstätten of Haqel, Hjoula, Nammoura, and Sahel Aalma

Supplementary File

Bibliometric data assessment
Author
Affiliation
Published

2024-02-24

Introduction

Here we adopt a bibliometric approach to elucidate publishing practices in scholarly journals on the topic of Upper Cretaceous Lagersätten from Lebanon. Our main aim is to explore levels of collaboration between Lebanese and international organisations/institutions as a way to measure degrees of ‘inclusivity’ or ‘participation’ by local researchers. We also look at primary text languages, availability of Arabic abstracts, and open access status of publications. We argue that the regular inclusion of Lebanese researchers on these subjects is critical for student, academic, and institutional advancement in Lebanon and across the Middle East region.

KTH bibliometric database server

The KTH Library database Bibmet, is a relational database that constitutes a bibliometric version of Web of Science (WoS).

Bibmet contains the following indexes:

  • Science Citation Index Expended (SCIE)
  • Social Sciences Citation Index (SSCI)
  • Arts & Humanities Citation Index (AHCI)
  • Conference Proceedings Citation Index - Scivences (CPCI-S)
  • Conference Proceedings Citation Index - Social Sciences & Humanities (CPCI -SSH)).

SCIE, SSCI, AHCI from 1980 and CPCI-S and CPCI-SSH from 1990.

Code
# con_bibmet <- bibliotools::con_bib_mssql(db = "bibmet")
# con_bibsta <- bibliotools::con_bib_mssql(db = "bibstat")

Data scraping (Google scholar)

Manual web scraping from Google scholar (Gs) was performed to collect publications on Upper Cretaceous Lebanese Lagersätten that are absent in the Web of Science and Scopus databases. These encompass a range of document types, such as book chapters and articles, written in English, French, Italian, and German, covering the period from 1903 to 2017.

The following publication attributes were recorded:

  • Title, Year, Authors, Country, Language, DOI, Other Abstracts (i.e., abstracts written in a second language), and Authors with Lebanese affiliations (=ALA)
Code
GS <- 
  openxlsx::read.xlsx(xlsxFile = "gs_list.xlsx") |> 
  mutate(PY = as.character(PY))
  # mutate(TI = stringr::str_to_title(Title),
  #        TI = iconv(TI, from = 'UTF-8', to = 'ASCII//TRANSLIT')) |> 
  # arrange(desc(TI)) |> 
  # rename("TI" = "Title") |> 
  # distinct(TI) # 42 distinct publications not found in WoS.

Web of Science Data (WoS)

We downloaded available publications from WoS using the following advanced searches:

  • Q1. (TS=Hakel OR TS=Haqel OR TS=Hâqel) AND TS=Lebanon
  • Q2. (TS=Hjoula OR TS=Hajula OR TS=Hazhüla OR TS=Hjoûla OR TS=Hadjoula) AND TS=Lebanon
  • Q3. (TS=Nammoura OR TS=Nammoûra OR TS=“En Nammoura” OR TS=“Al Nammoura”) AND TS=Lebanon
  • Q4. (TS=“Sahel Alma” OR TS=“Sâhel Aalma” OR TS=“Sahel Aalma”) AND TS=Lebanon

Data download: 2013-10-15

Publication details accessed via Bibmet include WoS Subject Categories, Languages, and Countries.

Code
# Network data (WoS)

# WoS_network <- 
#   WoS <- 
#   list.files(path = "WoS/",pattern = "wos-",full.names = T) |> 
#   purrr::map_dfr(~ readr::read_delim(.x, col_types = cols(.default = "c"), show_col_types = FALSE)) |> 
#   mutate(UT = gsub("WOS:","", UT)) |> 
#   distinct(UT, .keep_all = T)

# write.table(WoS_network, file = "wos-network.txt", sep = "\t",
#             row.names = F, col.names = T,quote = FALSE)
Code
WoS <- 
  list.files(path = "WoS/",pattern = "wos-",full.names = T) |> 
  purrr::map_dfr(~ readr::read_delim(.x, col_types = cols(.default = "c"), show_col_types = FALSE)) |> 
  mutate(UT = gsub("WOS:","", UT)) |> 
  distinct(UT, .keep_all = T) |> 
  as.data.frame() |> 
  mutate(TI = stringr::str_to_title(TI),
         TI = iconv(TI, from = 'UTF-8', to = 'ASCII//TRANSLIT')) |> 
  # Add new fields: AA = Arabic Abstract and OA = Other_Abstract
  mutate(AA = NA,
         OA = NA) |> 
  select(any_of(c("AU","TI","SO","LA","DT","C1","C3","SN","EI","PY","DI","WC","SC","DA","UT","AA","OA")))

# Fetch additional details for WoS records with UT numbers.
WoS_biblioinfo <- openxlsx::read.xlsx(xlsxFile = "WoS_biblioinfo.xlsx")

# WoS_biblioinfo <-
#   con_bibmet |> tbl("BestResAddr") |> select(-Org_type_code, -Org_type_correction) |> 
#   inner_join(con_bibmet |> tbl("Lang_Doc") |> select("Doc_id","Language"), by = "Doc_id") |> 
#   inner_join(WoS |> select(UT), by = "UT", copy = T) |> 
#   collect() |> 
#   # Determine the number of countries and languages per UT.
#   group_by(UT) |> 
#   reframe(CU = paste(Country_name, collapse = "; "),
#           LA = paste(Language)) |> 
#   distinct(UT,.keep_all = T)

# Merge in new field data.
WoS_enriched <- 
  WoS |> select(everything()) |> 
  left_join(WoS_biblioinfo, by = "UT", suffix=c("",".y")) |> 
  mutate(AA = "No") |> 
  # Add filed with the number of authors with a Lebanese affiliation per article.
  mutate(ALA = c(2,rep(0,15),1,rep(0,9),1,rep(0,7),1,0,1,0,1,0,1,rep(0,6))) |> 
  select(-ends_with(".y"))

# Title overlap between WoS and Google scholar publication data?
# Fuzzy matching using OSA ≥ 15 was shown to be a mismatch.

# WoGo <- 
#   WoS |> 
#   fuzzyjoin::stringdist_inner_join(y = GspL,
#                                    by = "TI",
#                                    max_dist = 30, method = "osa",
#                                    distance_col = "osa_dist") |> 
#   select("TI.x","TI.y","osa_dist") |> 
#   rename("TI_WoS" = "TI.x",
#          "TI_Google" = "TI.y") |> 
#   mutate(levenshtein_score = stringdist("TI_WoS", "TI_Google", method = "lv"),
#          jarowinkler_score = stringdist("TI_WoS", "TI_Google", method = "jw")) |> 
#   filter(osa_dist < 16) |> 
#   select("TI_WoS", "TI_Google") |> 
#   as_tibble()

WosGs <-
  # SU = Source
  WoS_enriched |> mutate(SU = "WoS") |> 
  bind_rows(GS |> mutate(SU = "Google scholar")) |>
  # Remove non-Lebanese based studies.
  filter(!grepl("Southern Germany|Tunisia",TI)) |> 
  mutate(CU = strsplit(CU, "; ")) |> 
  rowwise() |> 
  mutate(CU = paste(unique(unlist(CU)), collapse = "; ")) |> 
  arrange(desc(TI)) |> 
  # UT-number, Year, Authors, Source, Country, Title, Language, Arabic Abstract, Other abstract, DOI
  select(any_of(c("UT","PY","AU","SU","CU","TI","LA","AA","OA","DI","ALA"))) |> 
  arrange(desc(SU)) # 88 articles.

A total of (n = 88) unique publication from WoS and Google scholar.

Code
# Publication volume: WoS and Google Scholar.
p1 <- 
  WosGs |> 
  rename("Year" = "PY") |> 
  group_by(Year) |> 
  count(sort = T) |> 
  ungroup() |> 
  ggplot(mapping = aes(x = Year, y = n,group=1)) +
  geom_line(colour = "#2b2b2b", lwd = 1) +
  geom_point(shape = 21, colour = "#2b2b2b",fill = "white", size = 4) +
  geom_hline(aes(yintercept = mean(n)), linetype = 1, colour = "#DE3163",show.legend = T) +
  geom_hline(aes(yintercept = median(n)), linetype = 2, colour = "#1BB6AFFF",show.legend = T) +
  labs(x = "Year",y = "Number of publications",
       title = "Academic publishing over time",
       subtitle = "Data from WoS and Google Scholar: N = 88") +
  theme_bw() +
  theme(plot.title = element_text(face = "bold"),
        axis.title = element_text(face = "bold"),
        axis.text.x = element_text(angle = 45,hjust = 1,vjust = 1,size = 7),
        aspect.ratio = 1/2)

p2 <- 
  WosGs |>
  # Total number of authors per article.
  mutate(author_count = stringr::str_count(AU, pattern = ";") + 1) |>
  # Author linked to Lebanon? CL = Count Lebanese.
  mutate(CL = str_count(CU, "Lebanon")) |> 
  select(AU,CL) |>
  mutate(CL = ifelse(CL == 0, "Excludes LB-affilation","Includes LB-affiliation")) |> 
  # Group by Country.
  group_by(CL) |> 
  count() |> 
  ggplot(aes(x = as.factor(CL), y = n, fill = as.factor(CL))) +
  geom_bar(stat="identity",colour = "#2E2D29",show.legend = F) +
  geom_text(aes(label = n),position = position_stack(vjust = .5), colour = "white") +
  scale_color_manual(values = c("#006B81","#B83A4B")) +
  scale_fill_manual(values =  c("#006B81","#B83A4B")) +
  # scale_fill_brewer(palette = "Pastel1") +
  labs(x = "", y = "Number of publications",
       title = "Publications with a Lebanese affilation",
       subtitle = "Data from WoS and Google Scholar: N = 88",
       fill = "") +
  theme_bw() +
  theme(plot.title = element_text(face = "bold"),
        axis.title = element_text(face = "bold"))

# WoS Categories.
p3 <- 
  WoS |> 
  group_by(WC) |>
  count(sort = F) |> 
  ggplot(aes(x = sort(WC), y = n)) +
  geom_col() +
  labs(x = NULL,y = NULL, title = "WoS categories",subtitle = "Publications from WoS-only") +
  coord_flip() +
  theme_bw() +
  theme(plot.title = element_text(face = "bold"))

ggpubr::ggarrange(p3,ggarrange(p2,p1,ncol = 1,align = "v"))
Figure 1

Scopus

Advanced searches in Scopus made use of the following fields: Article title, Abstract and Keywords. Method note: Removal of duplicated titles was achieved using approximate string matching with optimal string alignment to identify overlapping title names with smaller variations.

Code
Scopus <- 
  list.files(path = "Scopus",pattern = "scopus-",full.names = T) |> 
  purrr::map_dfr(~ readr::read_csv(.x,col_types = cols(.default = "c"), show_col_types = FALSE)) |> 
  distinct(Title, .keep_all = T) |> 
  as.data.frame() |> 
  mutate(Title = stringr::str_to_title(Title)) |> 
  mutate(EID = gsub("2-s2.0-","",EID),
         EID = as.character(EID))

# Which articles in Scopus are not found in WoS and Google Scholar?
scwo_missing <- 
  Scopus |> 
  fuzzyjoin::stringdist_inner_join(y = WosGs,
                                   by = c("Title" = "TI"),
                                   max_dist = 10, method = "osa",
                                   distance_col = "osa_dist") |>
  select(Title) |> 
  as_tibble()

# Unique Scopus records not found in WoS and Google scholar.
Scopus_Clean <- 
  Scopus |>
  filter(!Title %in% scwo_missing$Title) |> 
  filter(!EID %in% c("0027455834","85110699396","0036068081","84864051536","84994036026","85106438855")) |> 
  filter(!grepl("Germany|Tunisia",Title)) |> 
  mutate(SU = "Scopus") |> 
  mutate(Language = `Language of Original Document`) |> 
  mutate(CU = c("Italy; United States","Germany","France; Lebanon","United Kingdom")) |> 
  rename("PY" = "Year") |> 
  # Add ALA
  mutate(ALA = c(0,0,2,0)) |> 
  select(any_of(c("Title","ISSN","EID","ISBN","DOI","SU", "Language", "PY","CU","ALA")))

# Organisms
clades <- 
  openxlsx::read.xlsx(xlsxFile = "publicationList-clades.xlsx") |> 
  select(-1)

# Merge all data sources.
LBLS <- 
  bind_rows(WosGs,
            Scopus_Clean |> rename("TI" = "Title")) |>
  mutate(TI = stringr::str_to_title(TI)) |> 
  # distinct(Title, .keep_all = T) |> 
  mutate(DOI = ifelse(is.na(DOI), DI, DOI)) |> 
  mutate(Language = ifelse(is.na(Language),LA,Language)) |> 
  mutate(CU = case_when(
    UT == "000905235800007" ~ "Lebanon; China; France",
    UT == "A1993KJ98800017" ~ "France",
    UT == "000231210900001" ~ "United Kingdom",
    UT == "001038126700001" ~ "Switzerland",
    TRUE ~ CU)) |>
  # Organism group.
  bind_cols(clades) |> 
  select(any_of(c("TI","ISSN","ISBN","DOI","UT","SU","Language","PY","CU","ALA","Clade","Group")))

Historical overview

Accounts on the Upper Cretaceous Lebanese Lagersätten have been reported on at least since 1883 and till this day. Viewed over the complete, albeit, non-consequential time-range, an average 2.7 articles have been published based on our downloaded data. Limited to the 21st century, the average publication count is 3.4 articles/annually. 2004 stands outs with 10 articles published on Lebanese fossils from the lagersätten deposits. Notably, our time-series does not yield an increase in publishing over time.

Code
p4 <- 
  LBLS |>
  group_by(PY) |> 
  count(sort = T) |> 
  ggplot(mapping = aes(x = PY, y = n,group=1)) +
  geom_line(colour = "#2b2b2b", lwd = 1) +
  geom_point(shape = 21, colour = "#2b2b2b",fill = "white", size = 4) +
  geom_hline(aes(yintercept = mean(n)), linetype = 1, colour = "#DE3163") +
  geom_hline(aes(yintercept = median(n)), linetype = 2, colour = "#1BB6AFFF") +
  # Annotate legends.
  geom_segment(aes(x = 3, y = 7.5, xend = 5, yend = 7.5), colour = "#DE3163") +
  geom_segment(aes(x = 3, y = 7.0, xend = 5, yend = 7.0),colour = "#1BB6AFFF",linetype =2) +
  # Annotate text
  # annotate("text",x = c(6.0,6.0),y = c(7.5,7.0),label = c("Mean","Median")) +
  labs(title = "Academic publishing over time",
       subtitle = "Upper Cretaceous Lebanese Lagersätten: Data sourced from WoS, Google Scholar & Scopus",
       x = "Year",y = "Number of publications",caption = "Solid line = Mean; Dashed-line = Median") +
  theme_classic() +
  theme(plot.title = element_text(face = "bold"),
        axis.title = element_text(face = "bold"),
        axis.text.x = element_text(angle = 45,hjust = 1,vjust = 1,size = 7),
        aspect.ratio = 1/2)

plotly::ggplotly(p = p4) |> 
  layout(title = list(text = paste0('Publications over time',
                                    '<br>',
                                    '<sup>',
                                    'Upper Cretaceous Lebanese Lagersätten: Data sourced from WoS, Google Scholar & Scopus',
                                    '</sup>')))

Figure 2. Academic publishing over time

Code
# Authors with Lebanese institutions per publication
p5 <-
  LBLS |>
  group_by(ALA) |> 
  count(sort = T) |> 
  ggplot(mapping = aes(x = ALA, y = n)) +
  geom_col() +
  labs(x = "Count", y = "Publications", title = "Lebanese affiliated authors") +
  theme_classic() +
  theme(plot.title = element_text(face = "bold"),
        axis.title = element_text(face = "bold"),
        axis.text.x = element_text(angle = 0,hjust = 1,vjust = 1,size = 7),
        aspect.ratio = 1/2)

print(p5)

National collaborations

This section explores co-publishing partners with and without Lebanese institutional affiliations. Our data reveal 16 publications involving Lebanese institutions. This accounts for only 17.39% of all publications. Yet, when compared to other countries involvement, Lebanon ranks fourth among nations with the highest degree of engagement in Lagersätten research. Unsurprisingly, France and Italy rank highest in their respective involvement on Lebanese paleontology (more specifically, Upper Cretaceous Lagersätten).

Code
# Co-publishing countries involving Lebanon.
LBLS |>
  filter(grepl("Lebanon", CU)) |> 
  group_by(CU) |>
  count(sort = T) |> # 16 unique publications.
  ggplot(aes(x = sort(CU),y = n)) +
  geom_bar(stat = "identity",color = "#006A8EFF", fill = "white") +
  coord_flip() +
  labs(x = "", y = "Number of publications",
       title = "Co-publishing nations involving Lebanon",
       subtitle = "WoS, Google Scholar, and Scopus Data",
       caption = "The bar chart illustrates the number of publications on Upper Cretaceous Lebanese Lagersätten
       were a Lebanese affiliate is involved. Only 16 out of 92 publication documents (17.39%) have a Lebanese
       research institution involved") +
  theme_classic() +
  theme(axis.text.y = element_text(size = 7),
        axis.text.x = element_text(size = 7),
        axis.title.x = element_text(face = "bold"),
        plot.title = element_text(face = "bold"))

Code
# What countries are most involved in the collaboration with Lebanese researchers? 
LBLS |>
  filter(grepl("Lebanon", CU)) |> 
  group_by(CU) |>
  count(sort = T) |> 
  mutate(CU = strsplit(CU, "; ")) |> 
  unnest(cols = CU) |> 
  group_by(CU) |> 
  summarise(count = sum(n)) |> 
  filter(CU != "Lebanon") |> # France is the main national collaborator with Lebanon.
  # Plot.
  ggplot(aes(x = reorder(CU,-count),y = count)) +
  geom_bar(stat = "identity",color = "#006A8EFF", fill = "white") +
  coord_flip() +
  labs(x = "", y = "Number of publications",
       title = "Co-publishing partners",
       subtitle = "WoS, Google Scholar, and Scopus Data",
       caption = "The bar chart illustrates the countries most frequently engaged in co-publishing with Lebanon") +
  theme_classic() +
  theme(axis.text.y = element_text(size = 7),
        axis.text.x = element_text(size = 7),
        axis.title.x = element_text(face = "bold"),
        plot.title = element_text(face = "bold"))

Code
# Co-publishing countries excluding Lebanon.
LBLS |>
  filter(!grepl("Lebanon", CU)) |> 
  group_by(CU) |>
  count(sort = T) |>
  ggplot(aes(x = sort(CU),y = n)) +
  geom_bar(stat = "identity",color = "#006A8EFF", fill = "white") +
  coord_flip() +
  labs(x = "", y = "Number of publications",
       title = "Co-publishing nations excluding Lebanon",
       subtitle = "WoS, Google Scholar, and Scopus Data",
       caption = "The bar chart illustrates the number of publications on Upper Cretaceous Lebanese Lagersätten
       were a Lebanese affiliate is not involved. 82% of the considered documents do not have a Lebanese research
       institution involved") +
  theme_classic() +
  theme(axis.text.y = element_text(size = 7),
        axis.text.x = element_text(size = 7),
        axis.title.x = element_text(face = "bold"),
        plot.title = element_text(face = "bold"))

Code
# Proportion wise how much does each country contribute to the involvement in 
# Upper Cretaceous Lebanese fossil research?

logo <- 
  png::readPNG(source = "lebanon-logo.png") |> 
  grid::rasterGrob(interpolate=TRUE)

LBLS |> 
  select(CU) |> 
  mutate(CU = strsplit(CU, "; ")) |> 
  unnest(CU) |> 
  group_by(CU) |>
  # Number of times each country appear.
  count() |> 
  ungroup() |> 
  mutate("percentage" = round(n/ sum(n) * 100,2),
         "percentage" = paste(percentage, "%")) |> 
  mutate(cols = case_when(CU == "Lebanon" ~ "#B83A4B",
                          TRUE ~ "#2E2D29")) |>
  ggplot(aes(x = reorder(CU,-n), y = n, fill = cols)) +
  geom_col(show.legend = F) +
  scale_fill_manual(values = c("#2E2D29","#B83A4B")) +
  geom_text(aes(label = percentage),size = 1.5, colour = "white",vjust = 2.5, hjust = 0.5) +
  # Logo insert
  annotation_custom(logo, xmin=3.5, xmax=6, ymin=11,ymax =35) +
  labs(x = "Countries", y = "Number of publications",
       title = "Participation of Nations in Upper Cretaceous Fossil Research in Lebanon",
       subtitle = "WoS, Google Scholar, and Scopus Data",
       caption = "The bar chart depicts the national-level contributions to publications concerning
       Upper Cretaceous Lebanese Lagerstätten")+
  theme_classic() +
  theme(axis.text.y = element_text(),
        axis.text.x = element_text(angle = 45,hjust = 1,vjust = 1),
        axis.title = element_text(face = "bold"),
        plot.title = element_text(face = "bold"))

Keywords

This section looks at the prevalence of keywords used in publications from WoS.

Code
# Fetch data

# Doc_ID <- 
#   con_bibmet |> tbl("BestResAddr") |> 
#   inner_join(WoS |> select(UT), by = "UT", copy = T) |> 
#   collect() |> 
#   pull(Doc_id) |> 
#   unique()

# keywords_auth <- 
#   con_bibmet |>
#   tbl("Keyword") |>
#   filter(Doc_id %in% !!Doc_ID) |>
#   collect() |> 
#   mutate(Keyword = case_when(Keyword == "Hakel" ~ "Haqel", TRUE ~ Keyword))

keywords_auth <- openxlsx::read.xlsx(xlsxFile = "keywords_auth.xlsx")

keywords_auth_list <- 
  keywords_auth |>
  group_by(Doc_id) |>
  summarise(keywords = paste(Keyword, collapse = "; "))

# World-cloud
text_corpus <- keywords_auth$Keyword |> 
  VectorSource() |> 
  Corpus()

# Word Count
word_freq <- 
  keywords_auth |> 
  group_by(Keyword) |> 
  count()
  # filter(n > 1)

# Plot
wordcloud(
  words = word_freq$Keyword,
  freq = word_freq$n,
  min.freq = 1,
  scale = c(2, 0.5),max.words = 100,
  colors = brewer.pal(8, "Dark2")
)

Code
# keywords_nodes <- keywords_auth |>
#   group_by(Keyword) |>
#   summarise(p = n(), p_sqrt = sqrt(n()), .groups = "drop") |>
#   # filter(p >= 20) |>
#   arrange(desc(p)) |>
#   rowid_to_column("id") |>
#   rename(Label = Keyword)
# 
# keywords_edges <- keywords_nodes |>
#   mutate(source = id) |>
#   inner_join(keywords_auth, by = c("Label" = "Keyword"), relationship = "many-to-many") |>
#   select(source, Doc_id) |>
#   inner_join(keywords_auth, by = "Doc_id", relationship = "many-to-many") |>
#   inner_join(keywords_nodes, by = c("Keyword" = "Label"), relationship = "many-to-many") |>
#   mutate(target = id) |>
#   filter(source < target) |>
#   group_by(source, target) |>
#   summarise(weight = n(), .groups = "drop")

# write.csv(keywords_nodes, "author_keywords_nodes.csv", row.names = FALSE)
# write.csv(keywords_edges, "author_keywords_edges.csv", row.names = FALSE)

Document languages

This sections examines the primary languages used in publications on Upper Cretaceous Lebanese Lagerstätten.

Code
LBLS |> 
  group_by(Language) |> 
  count() |> 
  ggplot(aes(x = reorder(Language,-n), y = n)) +
  geom_col(show.legend = F, color = "#2E2D29",fill = "white") +
  labs(x = "", y = "Number of publications",
       title = "Primary document language",
       subtitle = "WoS, Google Scholar, and Scopus Data",
       caption = "") +
  theme_classic() +
  theme(axis.text.y = element_text(),
        axis.text.x = element_text(angle = 45,hjust = 1,vjust = 1),
        plot.title = element_text(face = "bold"),
        aspect.ratio = 1/2)

Code
# Abstracts in two more languages.
WosGs |> 
  filter(!is.na(OA)) |> 
  select(LA,OA) |> 
  mutate(OA = case_when(OA == "German; French" ~ "German", TRUE ~ OA)) |> 
  group_by(LA,OA) |> 
  count() |> 
  rowwise() |> 
  mutate(Languages = paste(sort(c(LA,OA)), collapse = "-")) |> 
  group_by(Languages) |> 
  summarize(total_count = sum(n)) |> 
  ggplot(aes(x = reorder(Languages,-total_count), y = total_count, fill = Languages)) +
  geom_bar(stat = "identity",position = "dodge") +
  scale_fill_manual(values =  c("#D50032FF", "#F6BE00FF", "#00573FFF", "#010101FF")) +
  scale_color_manual(values = c("#D50032FF", "#F6BE00FF", "#00573FFF", "#010101FF")) +
  labs(x = "", y = "Number of publications",
       title = "Articles with abstracts in more than one language",
       subtitle = "Data from Google Scholar: N = 20", fill = "") +
  coord_flip() +
  theme_classic() +
  theme(axis.text.y = element_text(),
        axis.text.x = element_text(angle = 0,hjust = 1,vjust = 1),
        axis.title = element_text(face = "bold"),
        plot.title = element_text(face = "bold"),
        aspect.ratio = 1/2)

Exploration of main text language shows that publications on Upper Cretaceous Lebanese Lagerstätten are mainly in the English language followed by French, German, and Italian.

Publications from Google Scholar with abstracts in two languages. Abstracts in English-French and English-Italian share the same place, followed by English-German and French-German.

Collaboration network

VOSviewer was used to construct and visualize a co-authorship network using countries as the unit of analysis based on Web of Science Data.

Code
knitr::include_graphics("copublishing_network.png") 

Highlighting network cluster involving Lebanon.

Code
knitr::include_graphics("lebanon_cluster_network.png") 

Major Groups of Organisms

This section explores the clade and phyla under investigation in each publication record. Our results show that the overwhelming amount of published work have been on vertebrae animals followed by invertebrates, plants, and algae. A clade-level break-down of our data show that among vertebrates, teleost fish and cartilaginous fishes have been worked on the most. Among invertebrates, arthropods and molluscs have been extensively investigated from the Lebanese Lagersätten.

Code
# Major groups
LBLS |> 
  group_by(Clade) |>
  count(Clade) |> 
  filter(!is.na(Clade)) |> 
  ungroup() |>  
  mutate(prop = (n/sum(n)) * 100,
         prop = round(prop,2)) |> 
  # Re-name algae
  mutate(Clade = case_when(Clade == "Algae" ~ "Cercozoa (Algae)",
                           Clade == "Plant" ~ "Plantae", TRUE ~ Clade)) |> 
  ggplot(mapping = aes(x = "", y = n, fill = Clade)) +
  geom_bar(stat = "identity",width = 1, colour = "black") + 
  coord_polar(theta = "y") +
  geom_text(aes(label = paste(prop,"%")),
            position = position_stack(vjust = 0.5), color = "white", size = 2.5)+
  theme_minimal() +
  scale_fill_manual(values = c("#000000","#153E7E","#446455FF","#AB2C43FF")) +
  labs(x = NULL,
       y = NULL,
       title = "Number of publications by phyla",
       subtitle = "Publications on the Lebanese Upper Cretaceous Lagerstätten") +
  theme(plot.title = element_text(face = "bold"))

Code
# Sub-clades
LBLS |> 
  group_by(Group) |>
  count() |> 
  filter(!is.na(Group)) |> 
  ggplot(mapping = aes(x = reorder(Group,-n), y = n, fill = Group)) +
  geom_col(show.legend = F) +
  scale_fill_manual(values =  c("#558AA6FF","#B1740FFF","#D5006AFF","#08585AFF","#FFFD98FF","#9449D2FF","#BBBE64FF","#D7263DFF","#2b2b2b")) +
  scale_color_manual(values = c("#558AA6FF","#B1740FFF","#D5006AFF","#08585AFF","#FFFD98FF","#9449D2FF","#BBBE64FF","#D7263DFF","#2b2b2b")) +
  labs(y = "Number of publications",
       title = "Number of publication by clade",fill = "") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 45,vjust = 1,hjust = 1),
        axis.title = element_text(face = "bold"),
        plot.title = element_text(face = "bold"),
        aspect.ratio = 1/2) +
  labs(x = NULL)

Code
# Alternative graph of sub-clades (faceted)
LBLS |> 
  group_by(Group,Clade) |>
  count() |> 
  filter(!is.na(Group)) |> 
  ggplot(mapping = aes(x = "", y = n, fill = Group)) +
  geom_bar(stat = "identity",width = 1, colour = "black") + 
  coord_polar(theta = "y") +
  facet_grid(rows = . ~ Clade) +
  labs(x = NULL, y = NULL, fill = "Clades") +
  scale_fill_manual(values =  c("#558AA6FF","#B1740FFF","#D5006AFF","#08585AFF","#FFFD98FF","#9449D2FF","#BBBE64FF","#D7263DFF","#2b2b2b")) +
  scale_color_manual(values = c("#558AA6FF","#B1740FFF","#D5006AFF","#08585AFF","#FFFD98FF","#9449D2FF","#BBBE64FF","#D7263DFF","#2b2b2b")) +
  theme(legend.position = "bottom")

Code
# Re-fetch the data from WoS.

# collaboration <-
#   con_bibmet |> tbl("BestResAddr") |> select(-Org_type_code, -Org_type_correction) |> 
#   inner_join(con_bibmet |> tbl("Lang_Doc") |> select("Doc_id","Language"), by = "Doc_id") |> 
#   inner_join(WoS |> select(UT), by = "UT", copy = T) |> 
#   collect() |> 
#   # Determine the number of countries and languages per UT.
#   group_by(UT) |> 
#   reframe(CU = paste(Country_name, collapse = "; "),
#           LA = paste(Language))

Acknowledgment

M.B. would like to acknowledge Markus Skyttner (Redpill Linpro) for discussions on customized layout templates with Quarto.

References

George, H., Bazzi, M., Hossny, T.E., Ashraf, N., Abi Saad, P. and Clements, T. 2024. The famous fish beds of Lebanon: the Upper Cretaceous Lagerstätten of Haqel, Hjoula, Nammoura, and Sahel Aalma. Geological Society, London, Special Publications.

Skyttner, M. kth-quarto

Downloading all data files

Code
# Lebanese publication list
lbls_xlsx <- LBLS |> writexl::write_xlsx(path = "lbls.xlsx")