diff --git a/moneos_2024/120_zoogdieren/10_zoogdieren_data.Rmd b/moneos_2024/120_zoogdieren/10_zoogdieren_data.Rmd index 7958965f..6afa4a2d 100644 --- a/moneos_2024/120_zoogdieren/10_zoogdieren_data.Rmd +++ b/moneos_2024/120_zoogdieren/10_zoogdieren_data.Rmd @@ -23,7 +23,7 @@ options(knitr.kable.NA = '') library(tidyverse) library(rprojroot) -library(readxl) +# library(readxl) library(lubridate) library(kableExtra) @@ -47,22 +47,46 @@ 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 - +(rawfiles2025 <- files[str_detect(files, "csv")]) +# two tables delivered from waarnemingen.be, one with standard data, one with for which observer had to give consent +# this year csv tables in stead of xlsx +# the format of the columns is not the same! zoogdier_data <- - map(rawfiles2024, read_xlsx) - + map(rawfiles2025, read_csv) # 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 - +sum(names(zoogdier_data[[1]]) == names(zoogdier_data[[2]])) == ncol(zoogdier_data[[1]]) # combine list items to one tibble +# zoogdier_data <- +# zoogdier_data %>% +# list_rbind() +# rlang::last_trace() +str(zoogdier_data[[1]]) # col 1 is double, date columns are character +str(zoogdier_data[[2]]) # col 1 is character, date columns are date +# trying to force column type is difficult zoogdier_data <- - zoogdier_data %>% - list_rbind() - + map(rawfiles2025, read_csv, col_types = "cccdDDdccccnnnnccccccccDdcdccDdc") +problems(zoogdier_data[[1]]) # datum niet herlend +# problems(zoogdier_data[[2]]) => geen problemen + +# we have to read both files apart +zoogdier_data_1 <- + read_csv(rawfiles2025[[1]]) + +zoogdier_data_1 <- + zoogdier_data_1 %>% + mutate( + unieke_id = as.character(unieke_id), + datum = dmy(datum), + invoerdatum = dmy(invoerdatum), + embargo_datum = dmy(embargo_datum), + aanleverdatum = dmy(aanleverdatum) + ) +zoogdier_data_2 <- + read_csv(rawfiles2025[[2]]) +zoogdier_data <- + bind_rows(zoogdier_data_1, zoogdier_data_2) ``` # Soorten in aangeleverde data @@ -79,17 +103,32 @@ zoogdier_data %>% # Jaren in aangeleverde data -De dataset bevat alle waarnemingen uit de periode 2010- 2023. +De dataset bevat alle waarnemingen uit de periode `r min(year(zoogdier_data$datum))`- `r max(year(zoogdier_data$datum))` ```{r jaren} table(year(zoogdier_data$datum)) ``` +```{r filter2010tot2024} +zoogdier_data <- + zoogdier_data %>% + filter(between(year(datum), 2010, 2024)) +``` + +We filteren op de jaren 2010 tot en met 2024. + +```{r jaren2} +table(year(zoogdier_data$datum)) +``` + +Het aantal waarnemingen per soort per jaar tot 2023 verschilt licht van de dataset van vorig jaar. Waarnemingen.be is een dynamisch systeem waarin ook historische data worden toegevoegd of aangepast. + ```{r jarensoort} table(year(zoogdier_data$datum), zoogdier_data$naam_nl) %>% - kable(caption = "Aantal waarnemingen per jaar per soort") %>% + kbl(caption = "Aantal waarnemingen per jaar per soort") %>% kableExtra::kable_paper() ``` +
# Gedrag in aangeleverde data @@ -106,8 +145,8 @@ zoogdier_data %>% zoogdier_data %>% count(gedrag, Jaar = year(datum)) %>% spread(key = Jaar, value = n) %>% - knitr::kable(caption = "Gedrag per jaar in dataset") %>% - kable_styling() + kbl(caption = "Gedrag per jaar in dataset") %>% + kable_paper() ``` # Methode in aangeleverde data @@ -132,12 +171,12 @@ zoogdier_data %>% # 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). +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 aangegeven 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") %>% + kbl(caption = "Combinatie Gedrag-Methode in dataset") %>% kable_styling(full_width = FALSE, position = "left") ``` @@ -145,7 +184,7 @@ zoogdier_data %>% zoogdier_data %>% filter(str_detect(naam_nl, "Bever")) %>% count(gedrag, methode) %>% - knitr::kable(caption = "Combinatie Gedrag-Methode voor bever") %>% + kbl(caption = "Combinatie Gedrag-Methode voor bever") %>% kable_styling(full_width = FALSE, position = "left") ``` @@ -153,24 +192,24 @@ zoogdier_data %>% ```{r gedrag-methode-nonspec} zoogdier_data %>% filter(str_detect(naam_nl, "Bever"), - (gedrag == "overige" & is.na(methode))| - (gedrag == "ter plaatse" & is.na(methode))| + (gedrag == "overige" & methode == "NULL")| + (gedrag == "ter plaatse" & methode == "NULL")| (gedrag == "ter plaatse" & methode == "onbekend") ) %>% count(gedrag, methode, jaar = year(datum)) %>% - knitr::kable(caption = ) %>% + kbl(caption = "Combinatie Gedrag-Methode-jaar voor bever ") %>% 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". +Er zijn `r nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" & zoogdier_data$gedrag == "overige" & zoogdier_data$methode == "NULL",]) + nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" & zoogdier_data$gedrag == "ter plaatse" & zoogdier_data$methode == "NULL",])` waarnemingen van bever zonder specificatie (combinaties (gedrag = "overige" en methode = "NULL"), (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 dat 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 = "NULL" 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() %>% + kbl() %>% kable_styling() ``` @@ -179,9 +218,9 @@ zoogdier_data %>% # 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". +`r round(sum(zoogdier_data$status == "Onbehandeld")/count(zoogdier_data)*100, 0)` % van waarnemingen zijn niet gevalideerd. De status "Niet te beoordelen" komt in de huidige dataset niet meer voor. De 37 waarnemingen uit de vorige dataset zijn verdeeld over de andere statuscategorieën. -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. +Als we dit per soort bekijken 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} @@ -227,6 +266,6 @@ 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")) + write_csv(paste0(pad_data, "zoogdier_data_2010_2024.csv")) ``` diff --git a/moneos_2025/120_zoogdieren/10_zoogdieren_data.Rmd b/moneos_2025/120_zoogdieren/10_zoogdieren_data.Rmd new file mode 100644 index 00000000..7958965f --- /dev/null +++ b/moneos_2025/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_2025/120_zoogdieren/20_zoogdieren_analyse.Rmd b/moneos_2025/120_zoogdieren/20_zoogdieren_analyse.Rmd new file mode 100644 index 00000000..51ebf4dd --- /dev/null +++ b/moneos_2025/120_zoogdieren/20_zoogdieren_analyse.Rmd @@ -0,0 +1,736 @@ +--- +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: + bookdown::html_document2: + toc: true + toc_float: true + code_folding: hide +editor_options: + chunk_output_type: console +--- + +```{r setup, include=FALSE} + +knitr::opts_chunk$set(echo = TRUE, 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_raw <- + read_csv(str_c(pad_data, "zoogdier_data_2010_2024.csv")) +``` + +# beschrijving van de data + +- Per waarneming zijn er `r ncol(zoogdier_data_raw)` informatievelden + - `r str_flatten(names(zoogdier_data_raw), collapse = "\n - ")` +- In totaal bevat de dataset in `r year(today())` `r nrow(zoogdier_data_raw)` waarnemingen +- Er zitten data in van `r min(year(zoogdier_data_raw$datum))` tot en met `r max(year(zoogdier_data_raw$datum))` +- De dataset bevat waarnemingen van `r str_flatten(unique(zoogdier_data_raw$naam_nl), collapse = ", ", last = " en ")` + +# Aantal waarnemingen per soort per jaar + +```{r aantal waarnemingen} + +n_seeings <- + zoogdier_data_raw %>% + 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")) + +kbl(n_seeings, + caption = "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 en otter zijn de verschillen niet groot en/of de trends gelijkaardig, maar voor bruinvis en zeehonden zijn er zeker na 2016 weinig gevalideerde waarnemingen. We beperken de dataset voor de analyse tot gevalideerde data voor bever en otter, voor bruinvis en zeehonden behouden we alle data. De datalevering bevat alle waarnemingen, ook de niet gevalideerde. + +```{r aantal goedgekeurde waarnemingen} +n_seeings_goedgekeurd <- + zoogdier_data_raw %>% + 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")) + +kbl(n_seeings_goedgekeurd, + caption = "Aantal goedgekeurde waarnemingen per soort per jaar") %>% + kable_styling(full_width = FALSE, position = "left") +``` + +```{r} +# voor bever en otter enkel goedgekeurde waarnemingen +zoogdier_data <- + zoogdier_data_raw %>% + filter(case_when(naam_nl %in% c("Europese Bever", "Europese Otter") ~ str_detect(status, "Goed"), + .default = status == status + )) +``` + +# Bever waarnemingen van sporen tegenover dierwaarnemingen + +## Alle data + +```{r beverspoordier} +# aantal beverwaarnemingen +bever0 <- zoogdier_data_raw[zoogdier_data_raw$naam_nl == "Europese Bever",] +nb0 <- nrow(bever0) +# bever-spoorwaarnemingen +bever0_spoor <- bever0[(bever0$gedrag %in% c("bezet nest", "sporen")| + bever0$methode %in% c( "andere sporen", "prenten", "sporen", + "sporenbed", "uitwerpselen", + "verlaten nest", "vraatsporen")),] +nbsp0 <- nrow(bever0_spoor) +# niet duidelijk of het een waarneming van een dier of van een spoor is +bever0_onbepaald <- bever0[(bever0$gedrag %in% c("onbekend", "overige") & + bever0$methode %in% c( "NULL", "onbekend")) ,] +nbonb0 <- nrow(bever0_onbepaald) +# bever dierwaarnemingen +bever0_dier <- + bever0 %>% + anti_join(bever0_onbepaald, by = c("unieke_id")) %>% + anti_join(bever0_spoor, by = c("unieke_id")) +nbdier0 <- nrow(bever0_dier) + +# niet beverwaarnemingen +niet_bever0 <- zoogdier_data_raw[zoogdier_data_raw$naam_nl != "Europese Bever",] +# aantal niet-beverwaarnemingen +nnb0 <- nrow(niet_bever0) +niet_bever0_spoor <- + niet_bever0[(niet_bever0$gedrag %in% c("bezet nest", "sporen")| + niet_bever0$methode %in% c("andere sporen", "prenten", "sporen", + "sporenbed", "uitwerpselen", "verlaten nest", + "vraatsporen")) ,] +nspnb0 <- nrow(niet_bever0_spoor) +``` + +In totaal zijn er `r nb0` beverwaarnemingen in de dataset, waarvan `r nbsp0` geen waarnemingen zijn van dieren, maar wel van sporen of een burcht (`r round(100*nbsp0/nb0, 0)` %). Bij de andere soorten nemen niet-dierwaarnemingen slechts `r round(100*nspnb0/nnb0, 0)` % in. + +```{r sporen} +cap <- "Waarnemingen van beversporen" +count(bever0_spoor, methode, gedrag) %>% + kbl(caption = cap) %>% + kable_styling(bootstrap_options = c("condensed", "striped", "hover")) +``` + +Tabel \@ref(tab:sporen) geeft alle combinaties van methode en gedrag die we bestempelen als niet-dierwaarnemingen. Er zitten enkele exotische combinaties tussen (andere sporen-in kolonie anders, prenten-zwemmend, sporenbed-foeragerend); het aantal dergelijke waarnemingen is wel erg laag. + +Tabel \@ref(tab:onbepaald) geeft de combinaties van methode en gedrag waaruit we niet kunnen afleiden of het al dan niet om een effectieve dierwaarneming gaat. + +```{r onbepaald} +cap <- "Waarnemingen van bever waarvan niet geweten is of het effectief om dierwaarnemingen dan wel om sporen of burchten gaat" +count(bever0_onbepaald, methode, gedrag) %>% + kbl(caption = cap) %>% + kable_styling(bootstrap_options = c("condensed", "striped", "hover")) +``` + +Tabel \@ref(tab:dier) geeft de combinaties van methode en gedrag die we interpreteren als effectieve dierwaarnemingen. Ook in deze lijst komt wat exotisme (nestkast-onbekend, bodemval-(nabij) nest/burcht, ... ) voor. + +```{r dier} +cap <- "Effectieve waarnemingen van bever" +count(bever0_dier, methode, gedrag) %>% + kbl(caption = cap) %>% + kable_styling(bootstrap_options = c("condensed", "striped", "hover")) +``` + +## Goedgekeurde beverwaarnemingen + +We doen nog even hetzelfde voor goedgekeurde beverwaarnemingen (en otterwaarnemingen) + +```{r beverspoordier goedgek} +# aantal goedgekeurde beverwaarnemingen +bever <- zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" & + str_detect(zoogdier_data$status, "Goedg"),] +nb <- nrow(bever) +# bever-spoorwaarnemingen +bever_spoor <- bever[(bever$gedrag %in% c("bezet nest", "sporen")| + bever$methode %in% c( "andere sporen", "prenten", "sporen", + "sporenbed", "uitwerpselen", + "verlaten nest", "vraatsporen")),] +nbsp <- nrow(bever_spoor) +# niet gespecifieerde waarnemingen +bever_onbepaald <- bever[(bever$gedrag %in% c("onbekend", "overige") & + bever$methode %in% c( "NULL", "onbekend")) ,] +nbonb <- nrow(bever_onbepaald) +# bever dierwaarnemingen +bever_dier <- + bever %>% + anti_join(bever_onbepaald, by = c("unieke_id")) %>% + anti_join(bever_spoor, by = c("unieke_id")) +nbdier <- nrow(bever_dier) + +# niet beverwaarnemingen +niet_bever <- zoogdier_data[zoogdier_data$naam_nl != "Europese Bever",] +# aantal niet-beverwaarnemingen +nnb <- nrow(niet_bever) +niet_bever_spoor <- + niet_bever[(niet_bever$gedrag %in% c("bezet nest", "sporen")| + niet_bever$methode %in% c("andere sporen", "prenten", "sporen", + "sporenbed", "uitwerpselen", "verlaten nest", + "vraatsporen")) ,] +nspnb <- nrow(niet_bever_spoor) +``` + +```{r sporengoedg} +cap <- "Goedgekeurde waarnemingen van beversporen" +count(bever_spoor, methode, gedrag) %>% + kbl(caption = cap) %>% + kable_styling(bootstrap_options = c("condensed", "striped", "hover")) +``` + +Er zitten bij de goedgekeurde waarnemingen nog steeds enkele exotische combinaties ("andere sporen"-"in kolonie anders", "prenten"-"zwemmend", "sporenbed"-"foeragerend"). + +```{r onbepaaldgoedgekeurd} +cap <- "Goedgekeurde waarnemingen van bever waarvan niet geweten is of het effectief om dierwaarnemingen dan wel om sporen of burchten gaat" +count(bever_onbepaald, methode, gedrag) %>% + kbl(caption = cap) %>% + kable_styling(bootstrap_options = c("condensed", "striped", "hover")) +``` + +```{r diergoedg} +cap <- "Goedgekeurde effectieve waarnemingen van bever" +count(bever_dier, methode, gedrag) %>% + kbl(caption = cap) %>% + kable_styling(bootstrap_options = c("condensed", "striped", "hover")) +``` + +Onder de goedgekeurde beverwaarnemingen slaan ook `r round(100*nbsp/nb, 0)` % op sporen (`r nbsp` waarnemingen op een totaal van `r nb`).

+ +# Aantal waarnemingen per soort per jaar (exclusief waarnemingen van sporen) + +```{r aantalwaarnemingen2} +n_seeings <- + zoogdier_data %>% # voor otter en bever enkel geodgekeurde + mutate(Jaar = year(datum)) %>% + summarise(.by = c(naam_nl, Jaar), n = n()) %>% + pivot_wider(names_from = naam_nl, names_sort = TRUE, + values_from = n, values_fill = 0) %>% + arrange(Jaar) +cap <- "Aantal waarnemingen per soort per jaar in de hier geanalyseerde dataset" +n_seeings %>% + kbl(caption = cap) %>% + kable_styling(full_width = FALSE, position = "left", + bootstrap_options = c("condensed", "striped")) +``` + +```{r aantalzichtwaarnemingen, include=FALSE} +(n_bever_zichtwaarneming <- + bever_dier %>% + count(naam_nl, Jaar = year(datum)) %>% + pivot_wider(names_from = naam_nl, values_from = n)) +n_bever_zichtwaarneming %>% + write_csv(paste0(pad_tabellen, "/n_bever_zichtwaarneming.csv")) + +cap <- "Aantal goedgekeurde zichtwaarnemingen van bever per jaar (exclusief waarnemingen van sporen)." +n_bever_zichtwaarneming %>% + kbl(caption = cap, align = "lc") %>% + kable_styling(position = "left") %>% + column_spec(1:2, width = "7cm") +``` + +

+ +```{r aantalzichtwaarnemingen2} +n_waarnemingen <- + n_seeings %>% + inner_join(n_bever_zichtwaarneming, by = ("Jaar")) %>% + mutate(`Europese Bever` = paste0(`Europese Bever.x`, " (", + `Europese Bever.y`, ")")) %>% + select(Jaar, `Europese Bever`, `Europese Otter`, `Gewone Bruinvis`, `Gewone Zeehond`, + `Grijze Zeehond`, `Zeehond onbekend`) +n_waarnemingen %>% + write_csv(paste0(pad_tabellen, "aantal_waarnemingen.csv")) +cap <- "Aantal waarnemingen per soort per jaar, voor bever staat het aantal zichtwaarnemingen van dieren tussen hakkejes. Voor bever en otter enkel goedgekeurde waarnemingen, voor de overige soorten alle waarnemigen." +n_waarnemingen %>% + kbl(caption = cap, align = "lcccccc") %>% + kable_styling(full_width = FALSE, position = "left") +``` + +

+ +```{r aantalindividuen} +n_indiv <- + zoogdier_data %>% + filter(!(gedrag %in% c("sporen", "bezet nest")), + !(methode %in% c( "andere sporen", "prenten", "sporen", "sporenbed", + "uitwerpselen", "verlaten nest", "vraatsporen"))) %>% + mutate(Jaar = year(datum)) %>% + summarise(.by = c(naam_nl, Jaar), n = sum(aantal)) +# 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")) %>% + mutate(Jaar = year(datum)) %>% + summarise(.by = c(naam_nl, Jaar), n_death = sum(aantal)) +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) %>% + pivot_wider(names_from = naam_nl, names_sort = TRUE, + values_from = string, values_fill = "0") %>% + arrange(Jaar) + +n_indiv_with_dead %>% + write_csv(paste0(pad_tabellen, "/aantal_ind.csv")) + +cap <- "Aantal ingevoerde individuen per jaar (exclusief waarnemingen van sporen). Voor bever en otter enkel goedgekeurde waarnemingen, voor de overige soorten alle waarnemigen." +n_indiv_with_dead %>% + kbl(align = "lccccccc", + caption = cap) %>% + kable_styling(full_width = FALSE, position = "left") +``` + +

+ +```{r 120_fig_aantal_indiv} +fig_1 <- + n_indiv %>% + 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", + .default = "Otter en zeehonden")) %>% # for facetting of graph + ggplot(aes(x = Jaar, y = n, color = str_to_sentence(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, 2024, by = 2)) + +fig_1 +ggsave(paste0(pad_figuren, "120_fig1_aantal_ind.jpg"), width = 8, height = 4) +``` + +# Verspreidingskaartjes + +Onderstaande verspreidingskaartje zijn gebaseerd op de gevalideerde waarnemingen van bever en otter en alle waarnemingen van bruinvis, gewone zeehond, grijze zeehond en zeehon-onbekend 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 kaartdata} +(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", fill_alpha = 0.5) + + tm_fill(fill = "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 %>% + mutate(Jaar = year(datum), TAG = utm1, + naam_nl = str_to_sentence(naam_nl)) %>% + summarise(.by = c(naam_nl, Jaar, TAG), + aantal = sum(aantal), radius = sum(aantal)^0.5) %>% # aantal waarnemingen per UTM1-hok, soort en jaar + group_by(naam_nl, Jaar) + +# make list of tibbles for each group in zoogd_grouped; each tibble gives the amount of seeings for a certain year-specias +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 +# utm_n_list_sf[[16]][[2]][1] + +# 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[[23]] +utm_tmmap_list[["Europese Bever_2024"]] +# 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[["Europese Bever_2020"]] %>% +# tmap_save(filename = str_c(pad_figuren, "Europese Bever_2020", ".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="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="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="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="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="Aantal waarnemingen van Europese bever per UTM-km-hok in 2023."} +knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2023.png")) +``` + +```{r mapbever2024, fig.cap="Aantal waarnemingen van Europese bever per UTM-km-hok in 2023."} +knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2024.png")) +``` + +```{r bezette utm-hokken} +# for one species +# a <- soort_nUTM1 %>% +# filter(naam_nl == "Europese Bever") %>% +# ggplot(aes(x = Jaar, y = n)) + +# geom_point() + +# geom_line() + +# labs(y = "aantal km-hokken met waarnemingen") + +# scale_x_continuous(breaks = seq(2010, 2024, by = 2)) +# a %>% ggsave(filename = paste0(pad_figuren, "bever_utm.png")) + +# for all species +plot1 <- function(x){ + ggplot(data = x, aes(x = Jaar, y = n)) + + geom_point() + + geom_line() + + labs(y = "aantal km-hokken met waarnemingen") + + scale_x_continuous(breaks = seq(2010, 2024, by = 2))} + +# group by species +soort_nUTM1_grouped <- + soort_nUTM1 %>% + group_by(naam_nl) +# make list with tibbles for each species +soort_nUTM1_list <- + soort_nUTM1_grouped%>% + group_split(.keep = TRUE) +# add names +groupkeys <- # get names for each tibble ("naam-nl") + group_keys(soort_nUTM1_grouped) +names(soort_nUTM1_list) <- group_keys(soort_nUTM1_grouped)$naam_nl +# make list of ggplots +utm_year_plot_list <- map(.x = soort_nUTM1_list, .f = plot1) +utm_year_plot_list[["Europese Bever"]] +# save plots +map2(.x =utm_year_plot_list, + .y =names(utm_year_plot_list), + ~ ggsave( + filename = str_c(pad_figuren, "n_utm", .y, ".png"), + plot = .x)) +``` + +```{r recente-utm} +bever_evol <- + utm1 %>% + left_join(bever, by= c("TAG" = "utm1")) %>% + filter(naam_nl == "Europese Bever") %>% + mutate(Jaar = year(datum)) %>% + group_by(TAG) %>% + summarise(EersteJaar = min(Jaar), AantalJaar = n_distinct(Jaar)) %>% + mutate(EersteJaarf = factor(EersteJaar, levels = c(2010:2024)), + EersteJaarCat = + case_when(EersteJaar < 2014 ~ "2010-2013", + EersteJaar < 2018 ~ "2014-2017", + EersteJaar < 2022 ~ "2018-2021", + .default = as.character(EersteJaar))) %>% + arrange((EersteJaar)) +pal <- cols4all::c4a("-brewer.yl_or_br", n = 6) +(kolononisatie_fig <- + map_basis + + tm_shape(bever_evol) + + tm_fill(fill = "EersteJaarCat", + fill.scale = + tm_scale_categorical(values = pal, + labels = + c("2010-2013", "2014-2017", "2018-2021", + "2022", "2023", "2024")), + fill.legend = tm_legend(position = tm_pos_in("left"), + title = "Eerste waarnemingsjaar") + )) +tmap_save(tm = kolononisatie_fig, + filename = paste0(pad_figuren, "bever_kolonisatie.png")) +``` + +```{r utm-evol, include=FALSE, eval=FALSE} +utm1 %>% + st_join(bever_evol, by = c("TAG" = "utm1")) %>% + filter(!is.na(EersteJaar)) + +pal <- cols4all::c4a("brewer.yl_or_br", n = 15) +map_basis + + (bever_evol %>% + filter(!is.na(EersteJaar)) %>% + tm_shape() + + tm_fill(fill = "EersteJaarf", + fill.scale = + tm_scale_categorical(values = pal, labels = c(2010:2024)), + fill.legend = tm_legend(position = tm_pos_out("right")))) +``` + +# Verspreidingskaartjes otter + +```{r mapotter2021, fig.cap="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="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="Aantal waarnemingen van Europese otter per UTM-km-hok in 2023."} +knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2023.png")) +``` + +```{r mapotter2024, fig.cap="Aantal waarnemingen van Europese otter per UTM-km-hok in 2020."} +knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2024.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} +GewoneZeehond2024 <- + zoogdier_data %>% + filter(naam_nl == "Gewone Zeehond", + year(datum) == 2024) %>% + select(Datum = datum, Aantal = aantal, Gedrag = gedrag, Gebied = gebied, + Gemeente = gemeente, Deelgemeente = deelgemeente) %>% + arrange(Datum) +GewoneZeehond2024 %>% + kbl(align = "lcllll", caption = "Tabel XX: overzicht van alle waarnemingen van gewone zeehond in 2024 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") + +GewoneZeehond2024 %>% + write_csv(paste0(pad_tabellen, "/zeehond2024.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} +GrijzeZeehond2024 <- + zoogdier_data %>% + filter(naam_nl == "Grijze Zeehond", + year(datum) == 2024) %>% + select(Datum = datum, Aantal = aantal, Gedrag = gedrag, Gebied = gebied, + Gemeente = gemeente, Deelgemeente = deelgemeente) %>% + arrange(Datum) +GrijzeZeehond2024 %>% + kbl(align = "lcllll", caption = "Tabel XX: overzicht van alle waarnemingen van grijze zeehond in 2024 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") + +GrijzeZeehond2024 %>% + write_csv(paste0(pad_tabellen, "/grijzezeehond2024.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} +Bruinvis2024 <- + zoogdier_data %>% + filter(naam_nl == "Gewone Bruinvis", + year(datum) == 2024) %>% + select(Datum = datum, Aantal = aantal, Gedrag = gedrag, Gebied = gebied, + Gemeente = gemeente, Deelgemeente = deelgemeente) %>% + arrange(Datum) +Bruinvis2024 %>% + kbl(align = "lcllll", caption = "Tabel XX: overzicht van alle waarnemingen van bruinvis in 2024 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") + +Bruinvis2024 %>% + write_csv(paste0(pad_tabellen, "/bruinvis2024.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_2025/150_geintegreerd_rapport/120_zoogdieren.Rmd b/moneos_2025/150_geintegreerd_rapport/120_zoogdieren.Rmd new file mode 100644 index 00000000..dbaba42e --- /dev/null +++ b/moneos_2025/150_geintegreerd_rapport/120_zoogdieren.Rmd @@ -0,0 +1,372 @@ +```{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_2024.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 (*Phoco vitulina*), grijze zeehond (*Halichoerus grypus*), bruinvis (*Phocoena phocoena*), Europese bever (*Castor fiber*) en Europese otter (*Lutra lutra*)). Voor Europese 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 Instandhoudingsdoelstellingen Schelde-estuarium (Adrieansen *et al.* 2005). Voor grijze zeehond en bruinvis zijn geen doelstellingen geformuleerd. Deze zeezoogdieren worden echter min of meer regelmatig 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 destijds aanwezige populatieniveau. Deze doelstelling moet worden gezien als éé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 de otter in een populatie van 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 recente waarnemingen van otter dateren 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 2024 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). + +Het zijn uitsluitend losse waarnemingen, waarvan het wetenschappelijk gebruik zijn beperkingen kent (Herremans et al. 2018). +De losse waarnemingen kunnen worden gebruikt om veranderingen in de 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 2023 en vroeger kunnen verschillen van vorige dataleveringen als gevolg van retroactieve ingave en validatie 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 (voor Europese bever en Europese otter zijn enkel de gevalideerde waarnemingen opgenomen, voor de overige soorten alle waarnemingen). " + +# voetnoten bij tabel +footnote_text <- + c("Bij bever wordt het aantal zichtwaarnemingen (effectieve waarneming van het dier) tussen haakjes aangegeven.") + +# opmaak tabel +aantal_waarnemingen %>% + mutate(across(everything(), ~as.character(.) %>% replace_na(""))) %>% + mutate(across(everything(), ~cell_spec(., color = "black", align = "c"))) %>% + # Consistent met eerdere naamgeving. + rename_with(., ~ str_to_sentence(.x), .cols = everything()) %>% + 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 is zeker geen goede maat voor het effectief aanwezige aantal dieren omdat er veel meervoudige waarnemingen van hetzelfde dier of dezelfde dieren worden ingevoerd.") + +# opmaak tabel +aantal_ind %>% + # Hier aanpassen + mutate(across(everything(), ~as.character(.) %>% replace_na(""))) %>% + mutate(across(everything(), ~cell_spec(., color = "black", align = "c"))) %>% + # Consistent met eerdere naamgeving. + rename_with(., ~ str_to_sentence(.x), .cols = everything()) %>% + knitr::kable(escape = FALSE, + booktabs = TRUE, + caption = caption_x_waarden) %>% + # threepart TRUE want anders volgt outline tabel de lengte van het onderschrift. + footnote(number = footnote_text, + escape = FALSE, + threeparttable = TRUE) %>% + kable_styling(latex_options = c("scale_down")) + +``` + +
+ +```{r 120-figuur1, fig.cap=caption_figuur1, out.width="95%"} + +caption_figuur1 <- "Evolutie van het totaal aantal ingegeven waargenomen exemplaren van bever, otter, bruinvis, gewone zeehond en grijze zeehond. Het totaal aantal waargenomen dieren betreft vaak meervoudige waarnemingen van hetzelfde dier of dezelfde dieren." + +knitr::include_graphics(paste0(pad_figuren, "120_fig1_aantal_ind.jpg")) +``` + +
+ +### Overzicht waarnemingen 2023 + +#### Europese bever + +De gestage uitbreiding van de bever in de Scheldevallei (Mertens, 2016) lijkt zich, na een stagnatie in 2021 en 2022, verder te zetten in 2023 en 2024. +Zowel het aantal ingevoerde waarnemingen als het totaal aantal ingevoerde individuen lag in 2024 hoger dan ooit tevoren. +Ook het areaal breidt uit in 2024: de bever werd in 2024 waargenomen in 193 km-hokken tegenover 165 in 2023 en 140 in 2022. + +Ondertussen zijn grote delen van de Scheldevallei en de valleien van de zijrivieren gekoloniseerd. +In 2024 werden vooral in de vallei van Grote Nete en in en rond de Antwerpse haven nieuwe hokken opgetekend. +In de reeds gekoloniseerde valleien raken de lege hokken steeds verder opgevuld (zie figuur \@ref(fig:120-figuur3)). + +```{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, "n_utmEuropese Bever.png")) +``` + +```{r 120-figuur3, fig.cap=caption_figuur3, out.width="90%"} +caption_figuur3 <- "Geografische spreiding van gevalideerde beverwaarnemingen in 2022." + +knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2022.png")) +``` + +```{r 120-figuur4, fig.cap=caption_figuur4, out.width="90%"} +caption_figuur4 <- "Geografische spreiding van gevalideerde beverwaarnemingen in 2023." + +knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2023.png")) +``` + +```{r 120-figuur5, fig.cap=caption_figuur5, out.width="90%"} +caption_figuur5 <- "Geografische spreiding van gevalideerde beverwaarnemingen in 2024." + +knitr::include_graphics(paste0(pad_figuren, "Europese Bever_2024.png")) +``` + +```{r 120-figuur6, fig.cap=caption_figuur6, out.width="90%"} +caption_figuur6 <- "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")) +``` + +
+ +#### Europese 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, 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` hokken en in 2024 `r nrow(zoogdier_data[which(zoogdier_data$naam_nl == "Europese Otter" & year(zoogdier_data$datum) == 2024 & str_detect(zoogdier_data$status, "Goed")),])` waarnemingen in `r soort_nUTM1[which(soort_nUTM1$naam_nl == "Europese Otter" & soort_nUTM1$Jaar == 2024),]$n` hokken. +De waarnemingslocaties (omgeving Molsbroek, omgeving Berlare Broek/Donkmeer en Willebroek) zijn in 2024 *grosso modo* hetzelfde als in de voorgaande jaren. +In de (omgeving van de) Polders van Kruibeke is geen enkele waarneming ingevoerd, maar de otter verscheen er in november wel twee maal op cameravalbeelden (mondelinge mededeling Bram Vereecken). +De populatie lijkt zich vooralsnog niet uit te breiden. + +```{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_2022.png")) +``` + +```{r 120-figuur8, fig.cap=caption_figuur8, out.width="90%"} +caption_figuur8 <- "Geografische spreiding van gevalideerde otterwaarnemingen in 2022." +knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2023.png")) +``` + +```{r 120-figuur9, fig.cap=caption_figuur9, out.width="90%"} +caption_figuur9 <- "Geografische spreiding van gevalideerde otterwaarnemingen in 2024." +knitr::include_graphics(paste0(pad_figuren, "Europese Otter_2024.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. + +In 2024 werd de gewone zeehond bijna uitsluitend stroomafwaarts Antwerpen waargenomen. Enkel op 1 en 2 januari werd er een zeehond gezien op de Beneden-Nete tussen Lier en Duffel. Ook de voorgaande jaren werden de meeste gewone zeehonden waargenomen nabij de grens met Nederland ter hoogte van het Groot Buitenschoor en het Schor Ouden Doel. Dat er stroomopwaarts Antwerpen op de Schelde geen gewone zeehonden werden waargenomen, is sinds 2010 niet meer voorgevallen. In 2023 was er slechts één waarneming op de Zeeschelde stroomopwaarts Antwerpen. Zowel het aantal waarnemingen als het aantal ingevoerde individuen lag in 2024 net onder de vijftig. Sinds 2016 schommelt het aantal waarnemingen en aantal waargenomen dieren tussen 40 en 55, enkel in 2021 werden meer waarnemingen en waargenomen exemplaren ingevoerd (zie figuur \@ref(fig:120-figuur1)). Dit kan een COVID gerelateerd fenomeen zijn (meer waarnemers op de Scheldedijken).
+ +```{r 120-tabel3} +# inlezen tabel +zeehond <- + read_csv(paste0(pad_tabellen, "/zeehond2024.csv")) + +# hoofding tabel +caption_x_waarden <- "Waarnemingen (gevalideerde en niet gevalideerde) van gewone zeehond in 2024. " + + +# 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 2024 waren er acht waarnemingen van de grijze zeehond versrpeid over de gehele Zeeschelde van Prosperpolder Noord tot in Merelbeke. +Dit is opvallend want ook in 2023 werd de grijze zeehond aangetroffen in Merelbeke aan het meest stroomopwaartse uiteinde van het estuarium. + +
+ +```{r 120-tabel4} +# inlezen tabel +grijzezeehond <- + read_csv(paste0(pad_tabellen, "/grijzezeehond2024.csv")) + +# hoofding tabel +caption_x_waarden <- "Waarnemingen van grijze zeehond in 2024." + + +# 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 2024 werden vier waarnemingen van bruinvis op de Schelde ingevoerd in waarnemingen.be: op 23 april en 15 mei ter hoogte van de Polders van Kruibeke, op 5 mei in het centrum van Antwerpen en op 18 oktober in Doel. + +```{r 120-tabel5} +# inlezen tabel +bruinvis2024 <- + read_csv(paste0(pad_tabellen, "/bruinvis2024.csv")) + +# hoofding tabel +caption_x_waarden <- "Waarnemingen van bruinvis in 2024." + + +# opmaak tabel +bruinvis2024 %>% + 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 zowel in 2023 als 2024 (bijna) uitsluitend waargenomen stroomafwaarts Antwerpen, met de meeste waarnemingen in de buurt van de Nederlandse grens. De afname van het aantal waarnemingen verder stroomopwaarts in het estuarium is opvallend. Het aantal warnemingen en het aantal waargenomen exemplaren lijkt daarentegen gelijk te blijven, met uitzondering van een waarnemingspiek in 2021. Dit is mogelijk het gevolg van een verhoogd aantal waarnemers tijdens COVID. + +Met acht waarnemingen blijft de grijze zeehond een zeldzame verschijning. +Dit kan ook gezegd worden van de bruinvis met slechts 4 waarnemingen. + +Voor Europese bever en Europese 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. + +Gezien we vorig jaar al concludeerden dat het instandhoudingsdoel voor bever gerealiseerd was (Mertens 2024), en het aantal waarnemingen en bezette utm-hokken in 2024 verder is toegenomen, ligt het voor de hand dat de populatie ook in 2024 de doelstelling invult. + +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 na 2023 ook in 2024 bevestigd. De populatie lijkt zich vooralsnog niet uit te breiden. De waarnemingslocaties blijven nagenoeg gelijk.
\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. + +Mertens W. (2024). Hoofdstuk 8 Zoogdieren in Van Ryckegem, G., et. al. (2024). MONEOS ‐ Geïntegreerd datarapport INBO: Toestand Zeeschelde 2023. Monitoringsoverzicht en 1ste lijnsrapportage Geomorfologie, diversiteit Habitats en diversiteit Soorten. Rapporten van het Instituut voor Natuur‐ en Bosonderzoek 2024 (67). Instituut voor Natuur‐ en Bosonderzoek, Brussel. DOI: 10.21436/inbor.16247067 + +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.