diff --git a/moneos_2024/120_zoogdieren/10_zoogdieren_data.Rmd b/moneos_2024/120_zoogdieren/10_zoogdieren_data.Rmd
new file mode 100644
index 0000000..7958965
--- /dev/null
+++ b/moneos_2024/120_zoogdieren/10_zoogdieren_data.Rmd
@@ -0,0 +1,232 @@
+---
+params:
+ hoofdstuk: "120_zoogdieren"
+knit: (function(inputFile, ...) {
+ rmarkdown::render(inputFile,
+ output_dir = paste0(rmarkdown::yaml_front_matter(inputFile)$params$hoofdstuk, "/output"))})
+title: "MONEOS zoogdieren data"
+output:
+ bookdown::html_document2:
+ toc: true
+ toc_float: true
+editor_options:
+ chunk_output_type: console
+---
+
+```{r setup, include=FALSE}
+
+knitr::opts_chunk$set(echo = FALSE, error=FALSE, warning=FALSE, message=FALSE, cache=FALSE)
+options(knitr.kable.NA = '')
+```
+
+```{r libraries}
+
+library(tidyverse)
+library(rprojroot)
+library(readxl)
+library(lubridate)
+library(kableExtra)
+
+```
+
+```{r pad}
+
+# inlezen van variabelen
+# pad naar data : pad_data
+# pad naar tabellen : pad_tabellen
+# pad naar figuren : pad_figuren
+
+source(find_root_file("../pad.R", criterion = is_rstudio_project))
+
+pad_data <- maak_pad(params$hoofdstuk, "data")
+pad_figuren <- maak_pad(params$hoofdstuk, "figuren")
+pad_tabellen <- maak_pad(params$hoofdstuk, "tabellen")
+
+```
+
+```{r data}
+pad_data
+(files <- list.files(pad_data, full.names = TRUE, ))
+(rawfiles2024 <- files[str_detect(files, "xlsx")])
+# two tables delivered from waarningen.be, one with standard data, one with for which observer had to give consent
+# read the xlsx files
+
+zoogdier_data <-
+ map(rawfiles2024, read_xlsx)
+
+# check whether files have same structure
+ncol(zoogdier_data[[1]]) == ncol(zoogdier_data[[2]]) # same number of columns
+names(zoogdier_data[[1]]) == names(zoogdier_data[[2]]) # same column names
+
+# combine list items to one tibble
+zoogdier_data <-
+ zoogdier_data %>%
+ list_rbind()
+
+```
+
+# Soorten in aangeleverde data
+
+In de dataset zitten waarnemingen van 5 soorten en één verzamelsoort (zeehond onbekend).
+
+```{r soorten}
+zoogdier_data %>%
+ group_by(Soort = naam_nl) %>%
+ summarise() %>%
+ kbl(caption = "Soorten in dataset") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+# Jaren in aangeleverde data
+
+De dataset bevat alle waarnemingen uit de periode 2010- 2023.
+
+```{r jaren}
+table(year(zoogdier_data$datum))
+```
+
+```{r jarensoort}
+table(year(zoogdier_data$datum), zoogdier_data$naam_nl) %>%
+ kable(caption = "Aantal waarnemingen per jaar per soort") %>%
+ kableExtra::kable_paper()
+```
+
+# Gedrag in aangeleverde data
+
+Tot 2017 of 2018 werden waarnemingen van sporen (ook) als gedrag ingegeven. Vanaf 2019 gebeurt dit niet meer. Meerderheid van waarnemingen heeft gedrag "ter plaatse", dit is de default in de mobiele app.
+
+```{r gedrag}
+zoogdier_data %>%
+ count(gedrag) %>%
+ knitr::kable(caption = "Gedrag in dataset") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+```{r gedrag per jaar}
+zoogdier_data %>%
+ count(gedrag, Jaar = year(datum)) %>%
+ spread(key = Jaar, value = n) %>%
+ knitr::kable(caption = "Gedrag per jaar in dataset") %>%
+ kable_styling()
+```
+
+# Methode in aangeleverde data
+
+Tot 2017 werd waarnemingsmethode in de overgrote meerderheid van de waarneming niet vermeld (NA). Andere waarnemingsmethodes werden amper ingevuld. Vanaf 2017 neemt het aandeel van waarnemingen waarbij de waarnemingsmethode is gespecificeerd toe. De categorie "onbekend" blijft wel een aanzienlijk aandeel innemen.
+
+```{r methode}
+zoogdier_data %>%
+ count(methode) %>%
+ knitr::kable(caption = "Methode in dataset") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+```{r methode per jaar}
+zoogdier_data %>%
+ count(methode, Jaar = year(datum)) %>%
+ spread(key = Jaar, value = n) %>%
+ knitr::kable(caption = "Methode per jaar in dataset") %>%
+ kable_styling()
+```
+
+# Combinatie gedrag - methode
+
+
+Analyse is niet makkelijk voor bever. Combinatie gedrag - methode is niet echt logisch voor deze soort. Bv. de categorie gedrag "(nabij) nest/burcht" kan zowel de aanwezigheid van een burcht betekenen als een zichtwaarneming van een induvidu bij de burcht. Bij gedrag bestaat een categorie bezet nest en bij methode bestaat een categorie "verlaten nest". Wij gebruiken het als zichtwaarnemingen indien methode niet aangegevens wordt dat het om sporen of een burcht gaat (zie 20_zoogdieren_analyse.Rmd).
+
+```{r gedrag-methode}
+zoogdier_data %>%
+ count(gedrag, methode) %>%
+ knitr::kable(caption = "Combinatie Gedrag-Methode in dataset") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+```{r gedrag-methode-bever}
+zoogdier_data %>%
+ filter(str_detect(naam_nl, "Bever")) %>%
+ count(gedrag, methode) %>%
+ knitr::kable(caption = "Combinatie Gedrag-Methode voor bever") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+
+```{r gedrag-methode-nonspec}
+zoogdier_data %>%
+ filter(str_detect(naam_nl, "Bever"),
+ (gedrag == "overige" & is.na(methode))|
+ (gedrag == "ter plaatse" & is.na(methode))|
+ (gedrag == "ter plaatse" & methode == "onbekend")
+ ) %>%
+ count(gedrag, methode, jaar = year(datum)) %>%
+ knitr::kable(caption = ) %>%
+ kable_styling(full_width = FALSE, position = "left")
+
+```
+
+
+Er zijn `r nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" & zoogdier_data$gedrag == "overige" & is.na(zoogdier_data$methode),]) + nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" & zoogdier_data$gedrag == "ter plaatse" & is.na(zoogdier_data$methode),])` waarnemingen van bever zonder specificatie (combinaties (gedrag = "overige" en methode = na), (gedrag = "ter plaatse" en methode = na) op een totaal van `r nrow(zoogdier_data[,2] == "Europese Bever")` waarnemingen. Gedrag = "ter plaatse" is de standaard instelling in ObsMap. Dit kan dus betekenen da het dier ter plaatse bleef maar ook dat het veld gedrag door de waarnemer niet werd ingevuld. Na 2017 komt de combinatie gedrag = "ter plaatse" en methode = na niet meer voor omdat een waarde voor methode moest worden ingevoerd, de standaardwaarde is vanaf toen "onbekend".
+
+```{r gedrag-methode-jaar}
+zoogdier_data %>%
+ count(gedrag, methode, Jaar = year(datum)) %>%
+ spread(key = Jaar, value = n) %>%
+ knitr::kable() %>%
+ kable_styling()
+```
+
+
+
+# Status
+
+De meeste waarnemingen zijn op één of andere wijze gevalideerd (`r round(sum(str_detect(zoogdier_data$status, "Goed"))/count(zoogdier_data)*100, 0)` %).\
+`r round(sum(zoogdier_data$status == "Onbehandeld")/count(zoogdier_data)*100, 0)` % van waarnemingen zijn niet gevalideerd, `r round(sum(str_detect(zoogdier_data$status, "Niet"))/count(zoogdier_data)*100, 1)` % van de waarnemingen zijn gecategoriseerd als "Niet te beoordelen".
+
+Als we dit per soort bekeken valt op dat voor bever, otter (en bruinvis) een groot deel van de waarnemingen gevalideerd zijn. Voor gewone en grijze zeehond en 'zeehond onbekend' is (sinds 2016) een aanzienlijk deel van de waarnemingen onbehandeld. Dit geldt ook voor alle waarnemingen van bruinvis ná 2015, maar dat zijn er erg weinig. Gebrek aan goed bewijsmateriaal van deze laatste soorten is een mogelijke reden hiervoor, maar ook mindere aandacht van de personen die moeten valideren is een mogelijke reden, zeker gezien ook bij 'zeehond onbekend' het overgrote deel van de waarnemingen onbehandeld is.
+
+
+```{r status}
+zoogdier_data %>%
+ count(status) %>%
+ knitr::kable(caption = "Validatiestatus van de waarnemingen (totaal aantal in de dataset).") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+
+```{r}
+zoogdier_data %>%
+ count(status, Jaar = year(datum)) %>%
+ spread(key = Jaar, value = n) %>%
+ knitr::kable(caption = "Validatiestatus van de waarnemingen (totaal aantal per jaar).") %>%
+ kable_styling(position = "left")
+```
+
+
+
+```{r}
+zoogdier_data %>%
+ mutate(status2 = case_when(str_detect(status, "Goedg") ~ "Goedgekeurd",
+ TRUE ~ status)) %>%
+ count(status2, naam_nl, Jaar = year(datum)) %>%
+ ggplot(aes(x = Jaar, y = n, color = status2)) +
+ geom_point() +
+ labs(x ="", y = "Aantal") +
+ scale_x_continuous(breaks = seq(2010, 2025, by = 5),
+ minor_breaks = seq(2010, 2025, by = 1)) +
+ scale_y_continuous(label = ~ scales::comma(.x, accuracy = 1)) +
+ scale_color_manual(values = c("green", "red", "grey")) +
+ facet_wrap(facets = ~naam_nl, scales = "free")
+```
+
+
+
+
+data gecreëerd op `r Sys.time()`
+
+data weggeschreven naar `r paste0(pad_data, "template_data.csv")`
+
+```{r wegschrijven-data}
+
+zoogdier_data %>%
+ write_csv(paste0(pad_data, "zoogdier_data_2010_2023.csv"))
+
+```
diff --git a/moneos_2024/120_zoogdieren/20_zoogdieren_analyse.Rmd b/moneos_2024/120_zoogdieren/20_zoogdieren_analyse.Rmd
new file mode 100644
index 0000000..a3307f2
--- /dev/null
+++ b/moneos_2024/120_zoogdieren/20_zoogdieren_analyse.Rmd
@@ -0,0 +1,686 @@
+---
+params:
+ hoofdstuk: "120_zoogdieren"
+knit: (function(inputFile, ...) {
+ rmarkdown::render(inputFile,
+ output_dir = paste0(rmarkdown::yaml_front_matter(inputFile)$params$hoofdstuk, "/output"))})
+title: "MONEOS zoogdieren analyse"
+output: html_document
+editor_options:
+ chunk_output_type: console
+---
+
+
+```{r setup, include=FALSE}
+
+knitr::opts_chunk$set(echo = FALSE, error=FALSE, warning=FALSE, message=FALSE, cache=FALSE)
+options(knitr.kable.NA = '')
+```
+
+
+```{r libraries}
+
+library(tidyverse)
+library(INBOtheme)
+library(rprojroot)
+library(lubridate)
+library(readxl)
+library("sf")
+library("tmap")
+library(kableExtra)
+library(leaflet)
+conflicted::conflicts_prefer(dplyr::filter)
+
+```
+
+
+```{r pad}
+# inlezen van variabelen
+# pad naar data : pad_data
+# pad naar tabellen : pad_tabellen
+# pad naar figuren : pad_figuren
+
+source(find_root_file("../pad.R", criterion = is_rstudio_project))
+
+pad_data <- maak_pad(params$hoofdstuk, "data")
+pad_figuren <- maak_pad(params$hoofdstuk, "figuren")
+pad_tabellen <- maak_pad(params$hoofdstuk, "tabellen")
+pad_geodata <- "I:/GIS/VNSC/"
+pad_geodata2 <- "Z:/VNSC/gebiedsindeling_schelde_draft112014/gebiedsindeling_schelde112014/"
+```
+
+
+```{r data}
+zoogdier_data <-
+ read_csv(str_c(pad_data, "zoogdier_data_2010_2023.csv"))
+```
+
+
+# beschrijving van de data
+
+ - Per waarneming zijn er `r ncol(zoogdier_data)` informatievelden
+ + `r str_c(names(zoogdier_data), collapse = "\n - ")`
+ - In totaal bevat de dataset in 2022 `r nrow(zoogdier_data)` waarnemingen
+ - De dataset bevat waarnemingen van `r unique(zoogdier_data$naam_nl)`
+
+
+
+# Aantal waarnemingen per soort per jaar
+
+```{r aantal waarnemingen}
+
+n_seeings <-
+ zoogdier_data %>%
+ group_by(naam_nl, Jaar = year(datum)) %>%
+ count() %>%
+ spread(key = naam_nl, value = n) %>%
+ mutate_all(~replace(., is.na(.), 0))
+# Voor rapport wordt andere tabel gemaakt, zie chunk aantal_waarnemingen2
+# n_seeings %>%
+# write_csv(paste0(pad_tabellen, "aantal_waarnemingen.csv"))
+
+knitr::kable(n_seeings,
+ caption = "Tabel X: Aantal waarnemingen per soort per jaar") %>%
+ kable_styling(full_width = FALSE, position = "left")
+
+```
+
+
+
+Tot en met rapportage 2021 werden alle waarnemingen opgenomen in de data-analyse. Hieronder wordt de dataset beperkt tot goedgekeurde waarnemingen. Voor bever, otter en bruinvis zijn de verschillen niet groot en de trends gelijkaardig, maar voor zeehonden zijn er zeker na 2016 weinig gevalideerde waarnemingen.
+
+```{r aantal goedgekeurde waarnemingen}
+n_seeings_goedgekeurd <-
+ zoogdier_data %>%
+ filter(str_detect(status, "Goedgekeurd")) %>%
+ group_by(naam_nl, Jaar = year(datum)) %>%
+ count() %>%
+ spread(key = naam_nl, value = n) %>%
+ mutate_all(~replace(., is.na(.), 0))
+# wordt niet gebruikt in rapport
+# n_seeings_goedgekeurd %>%
+# write_csv(paste0(pad_tabellen, "aantal_waarnemingen_goedgekeurd.csv"))
+
+knitr::kable(n_seeings_goedgekeurd,
+ caption = "Tabel X: Aantal goedgekeurde waarnemingen per soort per jaar") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+
+```{r sporen}
+nb <- nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever",])
+nsp <- nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" &
+ (zoogdier_data$gedrag %in% c("bezet nest", "sporen",
+ "onbekend")|
+ zoogdier_data$methode %in% c( "andere sporen", "prenten",
+ "sporen", "sporenbed",
+ "uitwerpselen", "verlaten nest",
+ "vraatsporen")) ,])
+zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" &
+ !(zoogdier_data$gedrag %in% c("bezet nest", "sporen",
+ "onbekend")|
+ zoogdier_data$methode %in% c( "andere sporen", "prenten",
+ "sporen", "sporenbed",
+ "uitwerpselen", "verlaten nest",
+ "vraatsporen")) ,] %>%
+ distinct(methode, gedrag)
+# geen sporen in negatie => OK
+
+nnb <- nrow(zoogdier_data[zoogdier_data$naam_nl != "Europese Bever",])
+nspnb <- nrow(zoogdier_data[zoogdier_data$naam_nl != "Europese Bever" &
+ (zoogdier_data$gedrag %in% c("bezet nest", "sporen",
+ "onbekend")|
+ zoogdier_data$methode %in% c( "andere sporen", "prenten",
+ "sporen", "sporenbed",
+ "uitwerpselen", "verlaten nest",
+ "vraatsporen")) ,])
+
+zoogdier_data[zoogdier_data$naam_nl != "Europese Bever" &
+ !(zoogdier_data$gedrag %in% c("bezet nest", "sporen",
+ "onbekend") |
+ zoogdier_data$methode %in% c( "andere sporen", "prenten",
+ "sporen", "sporenbed",
+ "uitwerpselen", "verlaten nest",
+ "vraatsporen")) ,] %>%
+ distinct(methode, gedrag)
+# geen sporen in negatie => OK
+```
+
+
+
+
+
+
+# Aantal waarnemingen per soort per jaar (exclusief waarnemingen van sporen)
+
+Bij de beverwaarnemingen zitten heel wat waarnemingen van sporen of andere aanduidingen van de aanwezigheid van de soort anders dan een levend of een dood dier, het betreft meer dan een derde van de beverwaarnemingen (`r nsp` waarnemingen op een totaal van `r nb`). Bij de andere soorten nemen niet-dierwaarnemingen slechts `r round(100*nspnb/nnb, 0)` % in.
+
+
+```{r aantal zichtwaarnemingen, include=FALSE}
+n_seeings_sight <-
+ zoogdier_data %>%
+ filter(
+ # str_detect(status, "Goedgekeurd"),
+ naam_nl == "Europese Bever",
+ !(gedrag %in% c("sporen", "onbekend", "bezet nest")),
+ !(methode %in% c("vraatsporen", "andere sporen", "sporenbed", "verlaten nest"))) %>%
+ count(naam_nl, Jaar = year(datum)) %>%
+ spread(key = naam_nl, value = n) %>%
+ mutate_all(~replace(., is.na(.), 0))
+n_seeings_sight %>%
+ write_csv(paste0(pad_tabellen, "/aantal_waarnemingen_zicht.csv"))
+
+# Vraag: hoeveel zichtwaarnemingen bever hebben methode en gedrag ingevuld?
+zoogdier_data %>%
+ filter(
+ # str_detect(status, "Goedgekeurd"),
+ naam_nl == "Europese Bever",
+ !(gedrag %in% c("sporen", "onbekend", "bezet nest")),
+ !(methode %in% c("vraatsporen", "andere sporen", "sporenbed", "verlaten nest"))) %>%
+ count(gedrag, methode) %>%
+ kbl() %>%
+ kable_styling(position = "left")
+
+knitr::kable(n_seeings_sight,
+ caption = "Tabel X: Aantal goedgekeurde zichtwaarnemingen bever per jaar (exclusief waarnemingen van sporen).",
+ align = "lc") %>%
+ kable_styling(position = "left")
+```
+
+
+
+```{r aantal zichtwaarnemingen2}
+n_seeings2 <-
+ n_seeings_sight %>%
+ inner_join(n_seeings, by = ("Jaar")) %>%
+ mutate(`Europese Bever` = paste0(`Europese Bever.y`, " (",
+ `Europese Bever.x`, ")")) %>%
+ select(Jaar, `Europese Bever`, `Europese Otter`, `Gewone Bruinvis`, `Gewone Zeehond`,
+ `Grijze Zeehond`, `Zeehond onbekend`)
+n_seeings2 %>%
+ write_csv(paste0(pad_tabellen, "aantal_waarnemingen.csv"))
+
+knitr::kable(n_seeings2,
+ caption = "Tabel X: Aantal waarnemingen per soort per jaar, voor bever staat het aantal waarnemingen van niet-dieren (sporen e.d.m.) tussen hakkejes",
+ align = "lcccccc") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+
+
+```{r aantal individuen}
+n_indiv <-
+ zoogdier_data %>%
+ filter(
+ # str_detect(status, "Goedgekeurd"),
+ !(gedrag %in% c("sporen", "onbekend", "bezet nest")),
+ !(methode %in% c( "andere sporen", "prenten", "sporen", "sporenbed",
+ "uitwerpselen", "verlaten nest", "vraatsporen"))) %>%
+ group_by(naam_nl, Jaar = year(datum)) %>%
+ summarise(n = sum(aantal), .groups = "drop")
+# categorieën in veld gedrag zijn van naam gewijzigd tov 2022
+n_indiv_death <-
+ zoogdier_data %>%
+ filter(gedrag %in% c("dood", "slachtoffer verdrinking", "slachtoffer verkeer")) %>%
+ group_by(naam_nl, Jaar = year(datum)) %>%
+ summarise(n_death = sum(aantal), .groups = "drop")
+n_indiv_with_dead <-
+ n_indiv %>%
+ left_join(n_indiv_death, by = c("naam_nl", "Jaar")) %>%
+ mutate(string = ifelse(is.na(n_death),
+ as.character(n),
+ paste0(n, " (", n_death, "†)"))) %>%
+ select(Jaar, naam_nl, string) %>%
+ spread(key = naam_nl, value = string) %>%
+ mutate_all(~replace(., is.na(.), 0))
+
+n_indiv_with_dead %>%
+ write_csv(paste0(pad_tabellen, "/aantal_ind.csv"))
+
+knitr::kable(n_indiv_with_dead, align = "lccccccc",
+ caption = "Tabel X: Aantal ingevoerde individuen per jaar (exclusief waarnemingen van sporen).") %>%
+ kable_styling(full_width = FALSE, position = "left")
+```
+
+
+
+```{r 120_fig_aantal_indiv}
+fig_1 <-
+ zoogdier_data %>%
+ filter(!(gedrag %in% c("sporen", "onbekend")),
+ !(methode %in% c("vraatsporen", "andere sporen", "sporenbed"))) %>%
+ group_by(naam_nl, Jaar = year(datum)) %>%
+ summarise(n = sum(aantal), .groups = "drop") %>%
+ complete(naam_nl, Jaar, fill = list(n = 0)) %>% # fill out missing years
+ mutate(facet = case_when(naam_nl %in% c("Europese Bever", "Gewone Bruinvis") ~
+ "Bever en bruinvis",
+ TRUE ~ "Otter en zeehonden")) %>% # for facetting of graph
+ ggplot(aes(x = Jaar, y = n, color = naam_nl)) +
+ geom_line(lwd = 1) +
+ scale_x_continuous(breaks = seq(2010, 2023, by =1)) +
+ theme(axis.title = element_blank(),
+ legend.title = element_blank(),
+ legend.position = "bottom") +
+ facet_wrap(facets = ~facet, scales = "free") +
+ scale_x_continuous(breaks = seq(2010, 2023, by = 2))
+
+fig_1
+ggsave(paste0(pad_figuren, "120_fig1_aantal_ind.jpg"), width = 8, height = 4)
+```
+
+# Verspreidingskaartjes bever
+
+Onderstaande verspreidingskaartje zijn gebaseerd op alle gevalideerde waarnemingen van bever in waarnemingen.be.
+
+```{r geodata, include=FALSE}
+utm1 <- st_read(str_c(pad_geodata, "NOPplus_UTM1.shp"))
+utm1_c <- st_centroid(utm1) %>%
+ select(-c(Shape_Leng, Shape_Area))
+Schelde_boundaries <- st_read(str_c(pad_geodata2, "Boundaries.shp"))
+pad_geodata
+pad_geodata2
+getijrivieren <- st_read(str_c(pad_geodata2, "getij_afh_zones.shp"))
+buurlanden <- st_read(str_c(pad_geodata2, "buurlanden.shp"))
+```
+
+```{r beverkaartdata}
+(soort_nUTM1 <-
+ zoogdier_data %>%
+ filter(str_detect(status, "Goedg")) %>%
+ group_by(Jaar = year(datum), naam_nl) %>%
+ summarise(n = n_distinct(utm1),
+ .groups = "drop"))
+write_csv(soort_nUTM1, file = str_c(pad_data, "soort_nUTM1.csv"))
+```
+
+```{r mapbackground}
+bbox <- st_bbox(utm1_c) + c(-500, -500, 500, 500)
+map_basis <-
+ tm_shape(buurlanden, bbox = bbox) + tm_borders() + tm_fill(col = "lightyellow") +
+ tm_shape(Schelde_boundaries) +
+ tm_borders(col = "blue", col.alpha = 0.5) +
+ tm_fill(col = "dodgerblue") +
+ tm_shape(getijrivieren) + tm_lines(col = "blue", col.alpha = 0.5) +
+ tm_shape(utm1) +
+ tm_borders(lwd = 0.25, col = "grey30")
+```
+
+```{r maps-nieuw-valid, eval=FALSE}
+# make list of tibbles each tibble has unique naam_nl en Jaar, voor gevalideerde waarnemingen van bever en otter.
+zoogd_grouped <-
+ zoogdier_data %>%
+ filter(str_detect(status, "Goedg"),
+ naam_nl %in% c("Europese Bever", "Europese Otter")) %>% # enkel gevalideerde waarnemingen
+ group_by(naam_nl, Jaar = year(datum), TAG = utm1) %>%
+ summarise(aantal = sum(aantal), radius = sum(aantal)^0.5,
+ .groups = "drop") %>%
+ group_by(naam_nl, Jaar)
+
+# make list of tibbles for each group in zoogd_grouped
+utm_n_list <-
+ zoogd_grouped%>%
+ group_split(.keep = TRUE)
+groupkeys <- # get names of eacht tibble ("naam-nl_jaar")
+ group_keys(zoogd_grouped) %>%
+ mutate(naam_jaar = str_c(naam_nl, "_", Jaar)) %>%
+ select(naam_jaar)
+names(utm_n_list) <- groupkeys$naam_jaar # names tiblles in list
+
+# make list of simple features
+utm_n_list2 <- map(utm_n_list, merge, utm1_c) # merge to utm centroid
+utm_n_list_sf <- map(utm_n_list2, st_as_sf, sf_column_name = "geometry") # make sf
+
+# function to make list of tmaps
+mapf <- function(x){
+ title <- str_c(x[[2]][1], "_", x[[3]][1])
+ m <-
+ map_basis +
+ tm_shape(x) +
+ tm_symbols(fill = "red", col = "black",
+ size = "radius",
+ size.scale =
+ tm_scale_continuous(limits = c(0,7),
+ outliers.trunc = c(FALSE, TRUE),
+ ticks = c(1, 2, 3, 5, 7),
+ labels = c("1", "4", "9", "49", ">=49")),
+ size.legend = tm_legend(title = title,
+ bg.color = "white", bg.alpha = 0.5,
+ position = tm_pos_in(pos.h = "right"),
+ title.size = 1.2, text.size = 0.8)
+ )
+ return(m)
+}
+
+# test
+# mapf(utm_n_list_sf[[16]])
+# mapf(utm_n_list_sf[["Europese Otter_2012"]])
+
+utm_tmmap_list <- map(utm_n_list_sf, mapf) # make tmap objects
+
+# utm_tmmap_list[[2]]
+# utm_tmmap_list[[8]]
+# utm_tmmap_list[["Europese Bever_2019"]]
+# utm_tmmap_list[["Grijze Zeehond_2019"]]
+
+# save all maps
+for(x in names(utm_tmmap_list)){
+ a <- utm_tmmap_list[[x]]
+ tmap_save(a, filename = str_c(pad_figuren, x, ".png"))
+}
+# utm_tmmap_list[["Zeehond onbekend_2021"]] %>%
+# tmap_save(filename = str_c(pad_figuren, "Zeehond onbekend_2021", ".png"))
+# hieronder een poging om bovenstaand for-loop met purrr::map te doen, maar deze code (allebeid) bewaart herhaaldelijk "Zeehond onbekend_2021"
+# map(utm_tmmap_list[], tmap_save, filename = str_c(pad_figuren, x, ".png"))
+# map(utm_tmmap_list, tmap_save, filename = str_c(pad_figuren, x, ".png"))
+
+```
+
+```{r maps-nieuw-notvalid, eval=FALSE}
+# make list of tibbles each tibble has unique naam_nl en Jaar, met alle gevalideerde waarnemingen van gewone zeehond, grijze zeehond, bruinvis en zeehond onbekend
+zoogd_grouped <-
+ zoogdier_data %>%
+ filter(!naam_nl %in% c("Europese Bever", "Europese Otter")) %>% # alle waarnemingen van zeehonden en bruikvis
+ group_by(naam_nl, Jaar = year(datum), TAG = utm1) %>%
+ summarise(aantal = sum(aantal), radius = sum(aantal)^0.5,
+ .groups = "drop") %>%
+ group_by(naam_nl, Jaar)
+
+# make list of tibbles for each group in zoogd_grouped
+utm_n_list <-
+ zoogd_grouped%>%
+ group_split(.keep = TRUE)
+groupkeys <- # get names of eacht tibble ("naam-nl_jaar")
+ group_keys(zoogd_grouped) %>%
+ mutate(naam_jaar = str_c(naam_nl, "_", Jaar)) %>%
+ select(naam_jaar)
+names(utm_n_list) <- groupkeys$naam_jaar # names tiblles in list
+
+# make list of simple features
+utm_n_list2 <- map(utm_n_list, merge, utm1_c) # merge to utm centroid
+utm_n_list_sf <- map(utm_n_list2, st_as_sf, sf_column_name = "geometry") # make sf
+
+# function to make list of tmaps
+mapf <- function(x){
+ title <- str_c(x[[2]][1], "_", x[[3]][1])
+ m <-
+ map_basis +
+ tm_shape(x) +
+ tm_symbols(fill = "red", col = "black",
+ size = "radius",
+ size.scale =
+ tm_scale_continuous(limits = c(0,7),
+ outliers.trunc = c(FALSE, TRUE),
+ ticks = c(1, 2, 3, 5, 7),
+ labels = c("1", "4", "9", "49", ">=49")),
+ size.legend = tm_legend(title = title,
+ bg.color = "white", bg.alpha = 0.5,
+ position = tm_pos_in(pos.h = "right"),
+ title.size = 1.2, text.size = 0.8)
+ )
+ return(m)
+}
+
+# test
+# mapf(utm_n_list_sf[[16]])
+# mapf(utm_n_list_sf[["Europese Otter_2012"]])
+
+utm_tmmap_list <- map(utm_n_list_sf, mapf) # make tmap objects
+
+# utm_tmmap_list[[2]]
+# utm_tmmap_list[[8]]
+# utm_tmmap_list[["Europese Bever_2019"]]
+# utm_tmmap_list[["Grijze Zeehond_2019"]]
+
+# save all maps
+for(x in names(utm_tmmap_list)){
+ a <- utm_tmmap_list[[x]]
+ tmap_save(a, filename = str_c(pad_figuren, x, ".png"))
+}
+# utm_tmmap_list[["Zeehond onbekend_2021"]] %>%
+# tmap_save(filename = str_c(pad_figuren, "Zeehond onbekend_2021", ".png"))
+# hieronder een poging om bovenstaand for-loop met purrr::map te doen, maar deze code (allebeid) bewaart herhaaldelijk "Zeehond onbekend_2021"
+# map(utm_tmmap_list[], tmap_save, filename = str_c(pad_figuren, x, ".png"))
+# map(utm_tmmap_list, tmap_save, filename = str_c(pad_figuren, x, ".png"))
+
+```
+
+```{r mapbever2019, fig.cap="Fig xxx: Aantal waarnemingen van Europese bever per UTM-km-hok in 2019."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2019.png"))
+```
+
+```{r mapbever2020, fig.cap="Fig xxx: Aantal waarnemingen van Europese bever per UTM-km-hok in 2020."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2020.png"))
+```
+
+```{r mapbever2021, fig.cap="Fig xxx: Aantal waarnemingen van Europese bever per UTM-km-hok in 2021."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2021.png"))
+```
+
+```{r mapbever2022, fig.cap="Fig xxx: Aantal waarnemingen van Europese bever per UTM-km-hok in 2022."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2022.png"))
+```
+
+```{r mapbever2023, fig.cap="Fig xxx: Aantal waarnemingen van Europese bever per UTM-km-hok in 2023."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2023.png"))
+```
+
+```{r bezette utm-hokken}
+soort_nUTM1 %>%
+ filter(naam_nl == "Europese Bever") %>%
+ ggplot(aes(x = Jaar, y = n)) +
+ geom_point() +
+ geom_line() +
+ labs(y = "aantal bezette km-hokken") +
+ scale_x_continuous(breaks = seq(2010, 2022, by = 2))
+ggsave(filename = paste0(pad_figuren, "bever_utm.png"))
+```
+
+```{r recente-utm}
+bever_evol <-
+ zoogdier_data %>%
+ filter(naam_nl == "Europese Bever") %>%
+ mutate(Jaar = year(datum)) %>%
+ group_by(utm1) %>%
+ summarise(EersteJaar = min(Jaar), AantalJaar = n_distinct(Jaar)) %>%
+ mutate(EersteJaarf = factor(EersteJaar, levels = c(2010:2023))) %>%
+ arrange(desc(EersteJaar))
+
+map_basis +
+ (utm1 %>%
+ left_join(bever_evol, by = c("TAG" = "utm1")) %>%
+ filter(EersteJaar > 2020) %>%
+ tm_shape() +
+ tm_fill(fill = "EersteJaar",
+ fill.scale =
+ tm_scale_categorical(values = c("red", "orange", "yellow"),
+ labels = c("2021", "2022", "2023"))))
+```
+
+
+```{r utm-evol}
+pal <- cols4all::c4a("-brewer.yl_or_br", n = 14)
+kolononisatie_fig <-
+ map_basis +
+ (utm1 %>%
+ left_join(bever_evol, by = c("TAG" = "utm1")) %>%
+ filter(!is.na(EersteJaar)) %>%
+ tm_shape() +
+ tm_fill(fill = "EersteJaarf",
+ fill.scale =
+ tm_scale_categorical(values = pal, labels = c(2010:2023)),
+ fill.legend = tm_legend_hide()) +
+ tm_add_legend(labels = c(2010:2016), fill = pal[1:7], type = "polygons",
+ title = "Eerste jaar", bg.color = "white") +
+ tm_add_legend(labels = c(2017:2023), fill = pal[8:14], type = "polygons",
+ title = " ", stack = "horizontal")) +
+ tm_place_legends_inside()
+
+tmap_save(tm = kolononisatie_fig,
+ filename = paste0(pad_figuren, "bever_kolonisatie.png"))
+```
+
+
+# Verspreidingskaartjes otter
+
+```{r mapotter2020, fig.cap="Fig xxx: Aantal waarnemingen van Europese otter per UTM-km-hok in 2020."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2020.png"))
+```
+
+```{r mapotter2021, fig.cap="Fig xxx: Aantal waarnemingen van Europese otter per UTM-km-hok in 2021."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2021.png"))
+```
+
+```{r mapotter2022, fig.cap="Fig xxx: Aantal waarnemingen van Europese otter per UTM-km-hok in 2022."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2022.png"))
+```
+
+```{r mapotter2023, fig.cap="Fig xxx: Aantal waarnemingen van Europese otter per UTM-km-hok in 2023."}
+knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2023.png"))
+```
+
+Bij merendeel van de waarnemingen is methode niet ingevuld. Waarschijnlijk zijn meeste waarnemingen van Joris Everaert met cameraval, maar is dit uit veiligheidsoverwegingen niet ingegeven.
+
+```{r methode}
+zoogdier_data %>%
+ filter(str_detect(status, "Goedg"),
+ naam_nl == "Europese Otter") %>%
+ count(Jaar = year(datum), methode)
+```
+
+```{r bezette utm-hokken_otter}
+soort_nUTM1 %>%
+ filter(naam_nl == "Europese Otter") %>%
+ ggplot(aes(x = Jaar, y = n)) +
+ geom_point() +
+ geom_line() +
+ labs(y = "aantal bezette km-hokken") +
+ scale_x_continuous(breaks = seq(2010, 2022, by = 2)) +
+ scale_y_continuous(breaks = seq(0, 14, by = 5), minor_breaks = seq(0, 14, by =2))
+ggsave(filename = paste0(pad_figuren, "otter_utm.png"))
+```
+
+# Gewone zeehond
+
+
+```{r tabel gewone zeehond}
+GewoneZeehond2023 <-
+ zoogdier_data %>%
+ filter(naam_nl == "Gewone Zeehond",
+ year(datum) == 2023) %>%
+ select(Datum = datum, Aantal = aantal, Gedrag = gedrag, Gebied = gebied,
+ Gemeente = gemeente, Deelgemeente = deelgemeente) %>%
+ arrange(Datum)
+GewoneZeehond2023 %>%
+ kbl(align = "lcllll", caption = "Tabel XX: overzicht van alle waarnemingen van gewone zeehond in 2023 in de Zeeschelde en haar bijrivieren.") %>%
+ kable_styling(full_width = TRUE, bootstrap_options = c("condensed")) %>%
+ column_spec(1, width = "2.5cm") %>%
+ column_spec(2, width = "1.5cm") %>%
+ column_spec(3, width = "2.5cm")
+
+GewoneZeehond2023 %>%
+ write_csv(paste0(pad_tabellen, "/zeehond2023.csv"))
+```
+
+
+```{r make sf}
+# zeehond_data_sf <-
+# zoogdier_data %>%
+# filter(naam_nl == "Gewone Zeehond",
+# year(datum) == 2022) %>%
+# select(datum, aantal, gedrag, methode, x, y) %>%
+# st_as_sf(coords = c("x", "y"), crs =31370) %>%
+# st_transform(crs = 4326)
+```
+
+
+```{r map zeehond}
+# leaflet() %>%
+ # addTiles() %>%
+ # addCircleMarkers(data = zeehond_data_sf,
+ # radius = 3, label = ~datum)
+```
+
+
+
+
+
+# Grijze zeehond
+
+```{r tabel grijze zeehond}
+GrijzeZeehond2023 <-
+ zoogdier_data %>%
+ filter(naam_nl == "Grijze Zeehond",
+ year(datum) == 2023) %>%
+ select(Datum = datum, Aantal = aantal, Gedrag = gedrag, Gebied = gebied,
+ Gemeente = gemeente, Deelgemeente = deelgemeente) %>%
+ arrange(Datum)
+GrijzeZeehond2023 %>%
+ kbl(align = "lcllll", caption = "Tabel XX: overzicht van alle waarnemingen van grijze zeehond in 2023 in de Zeeschelde en haar bijrivieren.") %>%
+ kable_styling(full_width = TRUE, bootstrap_options = c("condensed")) %>%
+ column_spec(1, width = "2.5cm") %>%
+ column_spec(2, width = "1.5cm") %>%
+ column_spec(3, width = "2.5cm")
+
+GrijzeZeehond2023 %>%
+ write_csv(paste0(pad_tabellen, "/grijzezeehond2023.csv"))
+```
+
+
+```{r make sf2}
+# grijzezeehond_data_sf <-
+# zoogdier_data %>%
+# filter(naam_nl == "Grijze Zeehond",
+# year(datum) == 2022) %>%
+# select(datum, aantal, gedrag, methode, x, y) %>%
+# st_as_sf(coords = c("x", "y"), crs =31370) %>%
+# st_transform(crs = 4326)
+```
+
+
+```{r map grijzezeehond}
+# leaflet() %>%
+# addTiles() %>%
+# addCircleMarkers(data = grijzezeehond_data_sf,
+# radius = 3, label = ~datum)
+```
+
+
+```{r tabel bruinvis}
+Bruinvis2023 <-
+ zoogdier_data %>%
+ filter(naam_nl == "Gewone Bruinvis",
+ year(datum) == 2023) %>%
+ select(Datum = datum, Aantal = aantal, Gedrag = gedrag, Gebied = gebied,
+ Gemeente = gemeente, Deelgemeente = deelgemeente) %>%
+ arrange(Datum)
+Bruinvis2023 %>%
+ kbl(align = "lcllll", caption = "Tabel XX: overzicht van alle waarnemingen van bruinvis in 2023 in de Zeeschelde en haar bijrivieren.") %>%
+ kable_styling(full_width = TRUE, bootstrap_options = c("condensed")) %>%
+ column_spec(1, width = "2.5cm") %>%
+ column_spec(2, width = "1.5cm") %>%
+ column_spec(3, width = "2.5cm")
+
+Bruinvis2023 %>%
+ write_csv(paste0(pad_tabellen, "/bruinvis2023.csv"))
+```
+
+
+
+```{r make sf3}
+# bruinvis_data_sf <-
+# zoogdier_data %>%
+# filter(naam_nl == "Gewone Bruinvis",
+# year(datum) == 2022) %>%
+# select(datum, aantal, gedrag, methode, x, y) %>%
+# st_as_sf(coords = c("x", "y"), crs =31370) %>%
+# st_transform(crs = 4326)
+```
+
+
+```{r map bruinvis}
+# leaflet() %>%
+# addTiles() %>%
+# addCircleMarkers(data = bruinvis_data_sf,
+# radius = 3, label = ~datum)
+```
+
diff --git a/moneos_2024/150_geintegreerd_rapport/120_zoogdieren.Rmd b/moneos_2024/150_geintegreerd_rapport/120_zoogdieren.Rmd
new file mode 100644
index 0000000..586e286
--- /dev/null
+++ b/moneos_2024/150_geintegreerd_rapport/120_zoogdieren.Rmd
@@ -0,0 +1,443 @@
+```{r 120-hoofdstuk, include=FALSE}
+
+hoofdstuk <- "120_zoogdieren"
+
+```
+
+```{r 120-setup, include=FALSE}
+
+knitr::opts_chunk$set(echo = FALSE, error=FALSE, warning=FALSE, message=FALSE, cache=FALSE, fig.pos = "H", tab.pos = "H" )
+knitr::opts_knit$set(eval.after = "fig.cap")
+
+```
+
+```{r 120-libraries}
+
+library(tidyverse)
+library(lubridate)
+library(readxl)
+library(kableExtra)
+library(INBOtheme)
+library(rprojroot) ## workaround pad
+
+```
+
+```{r 120-pad}
+
+# inlezen van variabelen
+# pad naar data : pad_data
+# pad naar tabellen : pad_tabellen
+# pad naar figuren : pad_figuren
+
+source(find_root_file("../pad.R", criterion = is_rstudio_project))
+
+pad_data <- maak_pad(hoofdstuk, "data")
+pad_figuren <- maak_pad(hoofdstuk, "figuren")
+pad_tabellen <- maak_pad(hoofdstuk, "tabellen")
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```{r 120-basisdata, include=FALSE}
+zoogdier_data <- read_csv(paste0(pad_data, "zoogdier_data_2010_2023.csv"))
+```
+
+# Zoogdieren
+
+**Wim Mertens**
+
+## Inleiding
+
+Er bestaat in Vlaanderen of in het Schelde-estuarium geen systematische monitoring van de vijf hier behandelde zoogdiersoorten (gewone zeehond, grijze zeehond, bruinvis, bever en otter).
+Voor otter wordt momenteel via het meetnettenproject een systematische monitoring opgestart (Gouwy et al. 2021, [webref1](https://meetnetten.be/projects/66/), [webref2](https://meetnetten.be/)).
+Van Den Berge *et al.* (2019) geeft een uitgebreid overzicht van recente waarnemingen van otter in Vlaanderen.
+
+De Europese otter, de Europese bever en de gewone zeehond worden vermeld in de Instandhouwingsdoelstellingen Schelde-estuarium (Adrieansen *et al.* 2005).
+Voor grijze zeehond en bruinvis zijn geen doelstellingen geformuleerd.
+Deze zeezoogdieren worden echter min of meer regelmatig werden waargenomen in het estuarium.
+Daarom worden de waarnemingen van deze soorten ook opgenomen in de rapportage.
+
+Alle aangeleverde data zijn afkomstig van [waarnemingen.be](http://www.waarnemingen.be/), de website voor natuurinformatie van Natuurpunt en Stichting Natuurinformatie, ter beschikking gesteld door Natuurpunt Studie vzw.\
+
+De gewone zeehond kwam reeds in het estuarium voor toen de instandhoudingsdoelstellingen werden vastgelegd.
+Als doel geldt het behoud van de het destijds aanwezige populatieniveau.
+Deze doelstelling moeten gezien worden in één geheel met de Westerschelde-populatie.
+
+Voor bever en otter geldt het creëren van voldoende ruimte en geschikt habitat binnen strikt beschermde natuurgebieden voor één leefbare kernpopulatie als doelstelling.
+Voor bever werd dit vertaald in een populatie van ca.
+40 families (ca. 160 individuen), voor otter in 20 tot 25 individuen.
+
+De bever heeft zich in 2007 gevestigd in de valleien van de Schelde- en haar zijrivieren.
+Tot 2010 was Dendermonde de enige gekende locatie.
+Sindsdien duiken er steeds meer waarnemingslocaties op en plant de soort zich over het volledig estuarien valleigebied voort.
+
+De eerste waarnemingen van otter dateert van 2012.
+Sinds 2020 lijkt de soort zich standvastig gevestigd te hebben.\
+
+## Materiaal en methode
+
+Alle vrijgegeven waarnemingen van [waarnemingen.be](http://www.waarnemingen.be/) van otter, bruinvis, gewone zeehond, grijze zeehond en bever tussen 2010 en 2023 werden opgevraagd.
+Deze gegevens mogen enkel gebruikt worden voor de geïntegreerde systeemmonitoring van het Schelde-estuarium -- MONEOS.
+Deze gegevens mogen niet worden overgenomen zonder toestemming van de eigenaar (Natuurpunt Studie vzw).\
+
+De waarnemingen betreffen uitsluitend losse waarnemingen.
+Het wetenschappelijk gebruik van dergelijke waarnemingen kent zijn beperkingen (Herremans et al. 2018).
+De losse waarnemingen kunnen worden gebruikt om veranderingen in verspreiding van de soorten te evalueren (Herremans et al. 2018, Maes et al. 2018).
+De data kunnen niet worden gebruikt voor nauwkeurige trendbepaling o.a.
+omdat de zoekinspanning niet gekend is en het meldingsgedrag variabel is.
+De hier behandelde soorten zijn echter meldenswaardige soorten.
+Ruwe trendinschatting zijn met het nodige voorbehoud eventueel wel zinvol (Herremans et al. 2018).\
+
+Data van 2022 en vroeger kunnen verschillen van vorige dataleveringen als gevolg van retroactieve ingave van waarnemingen.
+
+## Resultaten
+
+### Overzicht van de waarnemingn sinds 2010
+
+Tabel \@ref(tab:120-tabel1) geeft een overzicht van het totaal aantal waarnemingen van bever, otter, bruinvis, gewone zeehond en grijze zeehond.
+Tabel \@ref(tab:120-tabel2) en figuur \@ref(fig:120-figuur1) geven een overzicht van het totaal aantal ingevoerde exemplaren van de soorten.
+
+```{r 120-tabel1}
+# inlezen tabel
+aantal_waarnemingen <-
+ read_csv(paste0(pad_tabellen, "aantal_waarnemingen.csv"))
+soort_nUTM1 <- read.csv(str_c(pad_data, "soort_nUTM1.csv"))
+
+# hoofding tabel
+caption_x_waarden <- "Totaal aantal waarnemingen in de vallei van de Zeeschelde en haar bijrivieren (inclusief niet gevalideerde waarnemingen). "
+
+# voetnoten bij tabel
+footnote_text <-
+ c("Bij bever wordt het aantal waarschijnlijke zichtwaarnemingen (geen sporen) tussen haakjes aangegeven.")
+
+# opmaak tabel
+aantal_waarnemingen %>%
+ mutate(across(everything(), ~as.character(.) %>% replace_na(""))) %>%
+ mutate(across(everything(), ~cell_spec(., color = "black", align = "c"))) %>%
+ knitr::kable(escape = FALSE,
+ booktabs = TRUE,
+ caption = caption_x_waarden) %>%
+ footnote(number = footnote_text,
+ escape = FALSE,
+ threeparttable = FALSE) %>%
+ kable_styling(latex_options = c("scale_down"))
+```
+
+
+
+```{r 120-tabel2}
+
+# inlezen tabel
+aantal_ind <-
+ read_csv(paste0(pad_tabellen, "aantal_ind.csv"))
+
+# hoofding tabel
+caption_x_waarden <- "Totaal aantal ingegeven waargenomen exemplaren per jaar in de vallei van de Zeeschelde en haar bijrivieren (exclusief waarnemingen van sporen)."
+
+# voetnoten bij tabel
+footnote_text <-
+ c("Tussen haakjes wordt het aantal dood teruggevonden exemplaren gegeven.",
+ "Het totaal aantal waargenomen dieren betreft vaak meervoudige waarnemingen van hetzelfde dier of dezelfde dieren.")
+# opmaak tabel
+aantal_ind %>%
+ mutate(across(everything(), ~as.character(.) %>% replace_na(""))) %>%
+ mutate(across(everything(), ~cell_spec(., color = "black", align = "c"))) %>%
+ knitr::kable(escape = FALSE,
+ booktabs = TRUE,
+ caption = caption_x_waarden) %>%
+ footnote(number = footnote_text,
+ escape = FALSE,
+ threeparttable = FALSE) %>%
+ kable_styling(latex_options = c("scale_down"))
+
+```
+
+
+
+```{r 120-figuur1, fig.cap=caption_figuur1, out.width="95%"}
+
+caption_figuur1 <- "Evolutie van het aantal waargenomen exemplaren van bever, otter, bruinvis, gewone zeehond en grijze zeehond."
+
+knitr::include_graphics(paste0(pad_figuren, "120_fig1_aantal_ind.jpg"))
+```
+
+
+
+### Overzicht waarnemingen 2023
+
+#### Bever
+
+De gestage uitbreiding van de bever in de Scheldevallei (Mertens, 2016) lijkt zich, na een stagnatie in 2021 en 2022, verder te zetten.
+Zowel het aantal ingevoerde waarnemingen als het totaal aantal ingevoerde individuen lag 2023 hoger dan ooit tevoren.
+Ook het areaal breidt uit in 2023.
+De bever werd in 2023 waargenomen in 163 km-hokken tegenover 143 in 2021 en 139 in 2022.\
+
+Ondertussen zijn grote delen van de Scheldevallei en de valleien van de zijrivieren gekoloniseerd.
+De uitbreiding in de in de Boven-Zeeschelde tussen Gent en Dendermonde zet zich in 2023 verder.
+Ook in de omgeving van Antwerpen komt de soort in steeds meer km-hokken voor.
+Na de Burchtse Weel heeft de bever ook de andere natuurgebieden in Antwerpen-Linkeroever ingepalmd.
+Vanuit het oosten komt de bever via de Schijnvallei de stad binnen en in de haven zijn er zowel op linker- als op rechteroever steeds meer kom-hokken waar de soort is waargenomen.
+Nieuw bezette hokken bevinden zich ook langs de Rupel (Polder van Niel, vallei van de Vliet) en in de Zennevallei.
+De vallei van de Grote Nete bleef lange tijd eeen blinde vlek, maar daar lijkt de laatste toch verandering in te komen.
+Er zijn in 2023 heel wat nieuwe vestigingingen in de vallei tussen Heist-op-den-Berg -Lier.
+Ook in Westerlo en verder stroomopwaarts in het Zammels broek en de vallei van de Grote laak komt de bever ondertussen voor.
+De zone Booischot en Westerlo is nog niet gekoloniseerd.
+
+```{r 120-figuur2, fig.cap=caption_figuur2, out.width="80%"}
+caption_figuur2 <- "Evolutie van het aantal km-hokken (UTM1-hokken) met beverwaarnemingen in vallei van de Schelde en haar tijgebonden zijrivieren."
+
+knitr::include_graphics(paste0(pad_figuren, "bever_utm.png"))
+```
+
+```{r 120-figuur3, fig.cap=caption_figuur3, out.width="90%"}
+caption_figuur3 <- "Geografische spreiding van gevalideerde beverwaarnemingen in 2021."
+
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2021.png"))
+```
+
+```{r 120-figuur4, fig.cap=caption_figuur4, out.width="90%"}
+caption_figuur4 <- "Geografische spreiding van gevalideerde beverwaarnemingen in 2022."
+
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2022.png"))
+```
+
+```{r 120-figuur5, fig.cap=caption_figuur5, out.width="90%"}
+caption_figuur5 <- "Geografische spreiding van gevalideerde beverwaarnemingen in 2023."
+
+knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2023.png"))
+```
+
+```{r 120-figuur-kol, fig.cap=caption_figuur_kol, out.width="90%"}
+caption_figuur_kol <- "Kolonisatiegeschiedenis van bever in de valleien van de Schelde en haar zijrivieren. De kleuren geven het jaar van de eerste waarneming in het km hok weer."
+
+knitr::include_graphics(paste0(pad_figuren, "bever_kolonisatie.png"))
+```
+
+
+
+#### Otter
+
+De otter werd in 2012 voor het eerst sinds lang opnieuw waargenomen in Vlaanderen, onder meer in de Rupelvallei.
+Tot 2019 werden slechts sporadisch sporen of dieren waargenomen in de omgeving van de Rupelmonding.
+Gerichte opvolging (spraints, cameravallen) in deze omgeving toonde aan dat de soort sinds 2014 constant aanwezig is en zich vermoedelijk voortplant (Gouwy et al., 2017).
+Na de vondst van uitwerpselen in Waasmunster in 2019 leidde gericht onderzoek o.a.
+met cameravallen, in de Durmevallei en verder stroomopwaarts langs de Schelde tot veel bijkomende waarnemingen.
+In 2021 waren er in totaal `r nrow(zoogdier_data[which(zoogdier_data$naam_nl == "Europese Otter" & year(zoogdier_data$datum) == 2021 & str_detect(zoogdier_data$status, "Goed")),])` waarnemingen in `r soort_nUTM1[which(soort_nUTM1$naam_nl == "Europese Otter" & soort_nUTM1$Jaar == 2021),]$n` utm-hokken, in 2022 `r nrow(zoogdier_data[which(zoogdier_data$naam_nl == "Europese Otter" & year(zoogdier_data$datum) == 2022 & str_detect(zoogdier_data$status, "Goed")),])` waarnemingen in `r soort_nUTM1[which(soort_nUTM1$naam_nl == "Europese Otter" & soort_nUTM1$Jaar == 2022),]$n` utm-hokken en in 2023 `r nrow(zoogdier_data[which(zoogdier_data$naam_nl == "Europese Otter" & year(zoogdier_data$datum) == 2023 & str_detect(zoogdier_data$status, "Goed")),])` waarnemingen in `r soort_nUTM1[which(soort_nUTM1$naam_nl == "Europese Otter" & soort_nUTM1$Jaar == 2023),]$n` .
+De meeste waarneming zijn afkomstig uit de Durmevallei en de omgeving van het Berlare Broek.
+De otter werd ook in 2023 waargenomen langs de Rupel.
+Er waren geen meldingen uit de Polders van Kruibeke.
+
+```{r 120-figuur6, fig.cap=caption_figuur6, out.width="90%"}
+caption_figuur6 <- "Geografische spreiding van gevalideerde otterwaarnemingen in 2021."
+knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2023.png"))
+```
+
+```{r 120-figuur7, fig.cap=caption_figuur7, out.width="90%"}
+caption_figuur7 <- "Geografische spreiding van gevalideerde otterwaarnemingen in 2022."
+knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2023.png"))
+```
+
+```{r 120-figuur8, fig.cap=caption_figuur8, out.width="90%"}
+caption_figuur8 <- "Geografische spreiding van gevalideerde otterwaarnemingen in 2023."
+knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2023.png"))
+```
+
+
+
+#### Gewone zeehond
+
+Jaarlijks zwemmen zeehonden in kleine aantallen de Zeeschelde op en verblijven er min of meer lange tijd.
+De soort plant zich niet voort in het Belgisch deel van het Schelde-estuarium.\
+
+
+
+Zoals de voorgaande jaren werden in 2023 de meeste gewone zeehonden waargenomen nabij de grens met Nederland ter hoogte van het Groot Buitenschoor en het Schor Ouden Doel.
+Daarnaast waren er aardig wat waarnemingen op de Schelde tussen Doel en Antwerpen en waarnemingen in het Kanaaldok en het het Hansadok in de haven van Antwerpen.
+Stroomopwaarts Antwerpen is er op de Zeeschelde slechts één waarneming in Bornem (9/3).
+Er zijn enkele waarnemingen op de Rupel, de Zenne en de Beneden Nete in augustus, september en oktober.\
+Zowel het aantal waarnemingen als het aantal ingevoerde individuen lag in 2023 lager dan in 2022, en veel lager dan in 2021 (zie figuur \@ref(fig:120-figuur1)).
+
+```{r 120-tabel3}
+# inlezen tabel
+zeehond <-
+ read_csv(paste0(pad_tabellen, "/zeehond2023.csv"))
+
+# hoofding tabel
+caption_x_waarden <- "Waarnemingen (gevalideerde en niet gevalideerde) van gewone zeehond in 2023. "
+
+
+# opmaak tabel
+zeehond %>%
+ mutate(across(everything(), ~as.character(.) %>% replace_na(""))) %>%
+ mutate(across(everything(), ~cell_spec(., color = "black", font_size = 7))) %>%
+ knitr::kable(escape = FALSE,
+ booktabs = TRUE,
+ longtable = TRUE,
+ caption = caption_x_waarden) %>%
+ kable_styling(latex_options = c("scale_down"),
+ font_size = 7)
+
+```
+
+\newpage
+
+#### Grijze zeehond
+
+Naast gewone zeehonden duiken af en toe ook grijze zeehonden op in de Zeeschelde.
+
+In 2023 werd de grijze zeehond slechts drie maal waargenomen .
+Twee maal aan de grens met Nederlande en één maal aan het andere uiteinde van het estuarium in Merelbeke.
+
+
+
+```{r 120-tabel4}
+# inlezen tabel
+grijzezeehond <-
+ read_csv(paste0(pad_tabellen, "/grijzezeehond2023.csv"))
+
+# hoofding tabel
+caption_x_waarden <- "Waarnemingen van grijze zeehond in 2023."
+
+
+# opmaak tabel
+grijzezeehond %>%
+ mutate(across(everything(), ~as.character(.) %>% replace_na(""))) %>%
+ mutate(across(everything(), ~cell_spec(., color = "black", font_size = 8))) %>%
+ knitr::kable(escape = FALSE,
+ booktabs = TRUE,
+ caption = caption_x_waarden) %>%
+ kable_styling(latex_options = c("scale_down"))
+
+```
+
+
+
+#### Bruinvis
+
+In 2013 werd een groot aantal bruinvissen waargenomen in het Belgisch deel van het Schelde-estuarium.
+Voor en na 2013 zijn er slechts sporadisch waarnemingen van deze soort.\
+
+
+In 2023 werden twee waarneming van bruinvis op de Schelde ingevoerd in waarnemingen.be.
+Eén aan de Nederlandse grens (14 oktober) en één in Zele (4 mei).
+
+```{r 120-tabel5}
+# inlezen tabel
+bruinvis2021 <-
+ read_csv(paste0(pad_tabellen, "/bruinvis2023.csv"))
+
+# hoofding tabel
+caption_x_waarden <- "Waarnemingen van bruinvis in 2023."
+
+
+# opmaak tabel
+bruinvis2021 %>%
+ mutate(across(everything(), ~as.character(.) %>% replace_na(""))) %>%
+ mutate(across(everything(), ~cell_spec(., color = "black", font_size = 8))) %>%
+ knitr::kable(escape = FALSE,
+ booktabs = TRUE,
+ caption = caption_x_waarden) %>%
+ kable_styling(latex_options = c("scale_down"))
+```
+
+\newpage
+
+## Discussie
+
+Noch voor gewone zeehond, noch voor grijze zeehond of gewone bruinvis zijn er (eenduidige) instandhoudingsdoelstelling voor de Zeeschelde.\
+Gewone zeehond werd in 2023 zoals steeds vooral waargenomen ter hoogte van de grens.
+Het aantal warnemingen en het antals waargenomen exemlplaren lag lager dan in 2021 en 2022.
+
+Met twee waarnemingen blijft de grijze zeehond een zeldzame verschijning.
+
+Dit kan ook gezegd worden van de bruinvis met eveneens slechts 2 waarnemingen.
+
+Voor bever en otter zijn wel instandhoudingsdoelen geformuleerd.
+Adriaensen *et al.* (2005) stellen dat voldoende ruimte en geschikt habitat aanwezig moeten zijn binnen strikt beschermde natuurgebieden voor een potentiële populatie bevers van ca.
+40 families (ca. 160 individuen), verspreid over verschillende deelgebieden.
+Voor otter moet er voldoende potentieel leefgebied zijn om een leefbare kernpopulatie van 20-25 individuen te onderhouden, verspreid over 3 - 4 deelgebieden.\
+
+Bij een doorgedreven inventarisatie van beverterritoria in Vlaanderen vonden Huysentruyt *et al.* (2019) in 2017 29 beverterritoria in de vallei van de Zeeschelde en tijgebonden zijrivieren.
+In dat zelfde jaar werden beverwaarnemingen verricht in 64 km-hokken, m.a.w. een verhouding van `r round(64/29, 2)` km-hokken per territoria.
+Indien deze verhouding een constante is, zouden er in 2023 ca.
+`r round(163/(64/29),0)` territoria zijn.
+Volgens de methode in Huysentruyt *et al.* (2019) stemt dit overeen met `r round(163/(64/29)*0.6,0)` reproductieve eenheden (families) en `r round(163/(64/29)*2.8,0)` individuen.
+De doelstelling voor bever is in 2023 gerealiseerd.\
+
+Voor de otter is dit niet het geval.
+Dat er meerdere exemplaren in twee deelgebieden (ruime omgeving van de Rupelmonding en Durmevallei - Berlare Broek) voorkomen werd bevestigd in 2023.
+Maar er zijn zeker nog geen 20-25 individuen.
+
+
+\newpage
+
+## Referenties
+
+Adriaensen F., Van Damme S., Van den Bergh E., Van Hove D., Brys R., Cox T., Jacobs S., Konings P., Maes J., Maris T.
+et al. (2005).
+Instandhoudingsdoelstellingen Schelde-estuarium.
+Antwerpen: Antwerpen U.
+05-R82.
+249 p.
+
+Everaert J.
+2021.
+Otter "Meneer Eenoog" heeft leefgebied van Wachtebeke tot Berlare in Oost-Vlaanderen.
+Roofdiernieuws 29.
+INBO.
+
+Gouwy J., Mergeay J., Neyrinck S., Van Breusegem A., Berlengee F., Van Den Berge K., Everaert J.
+2021.
+2022 : Otters troef!
+INBO Roofdiernieuws 29, december 2021.
+
+Gouwy J., Van Den Berge K., Berlengee F.
+& Vansevenant D.
+2017.
+Dode otter ingezameld in Kalmthout en bevestiging van de meerjarige aanwezigheid in de vallei van de Zeeschelde -- INBO Marternieuws 23, december 2017.
+
+Herremans M., Swinnen K.
+& Vanormelingen P. 2018.
+Www.waarnemingen.be, wat kunnen we daarmee?
+Natuur.focus 17(4) online: [www.natuurpunt.be/focus](www.natuurpunt.be/focus)
+
+Huysentruyt F, Van Daele T, Verschelde P, Boone N, Devisscher S, Vernaillen J (2019).
+Evaluatie van de monitoring van bever (Castor fiber) in Vlaanderen.
+Rapporten van het Instituut voor Natuur- en Bosonderzoek 2019 (28).
+Instituut voor Natuur- en Bosonderzoek, Brussel.
+
+Mertens W.
+(2016).
+Hoofdstuk 8 Zoogdieren in Van Ryckegem, G., Van Braeckel, A., Elsen, R., Speybroeck, J., Vandevoorde, B., Mertens, W., Breine, J., De Beukelaer, J., De Regge, N., Hessel, K., Soors, J., Terrie, T., Van Lierop, F.
+& Van den Bergh, E.
+(2016).
+MONEOS -- Geïntegreerd datarapport INBO: Toestand Zeeschelde 2015: monitoringsoverzicht en 1ste lijnsrapportage Geomorfologie, diversiteit Habitats en diversiteit Soorten.
+Rapporten van het Instituut voor Natuur- en Bosonderzoek 2016 (INBO.R.2016.12078839).
+Instituut voor Natuur- en Bosonderzoek, Brussel.
+
+Van Den Berge K., Gouwy J.
+& Berlengee F.(2019). De otter (Lutra lutra) in Vlaanderen.
+State of the art anno 2019.
+Rapporten van het Instituut voor Natuur- en Bosonderzoek 2019 (60).
+Instituut voor Natuur- en Bosonderzoek, Brussel.