--- title: "Bosvogels volgens de Algemene Broedvogelmonitoring Vlaanderen" date: 2023-03-23T10:00:00+01:00 thema: - Beschermde natuur - Bos keywords: - soorten - trend - broedvogels - ABV add_generic: - classificatie lang: nl tab: indicator verantwoordelijke: - Glenn Vermeersch - Thierry Onkelinx output: html_document --- ```{r setup, include=FALSE} library(knitr) opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE) library(git2rdata) library(plotly) library(tidyverse) library(effectclass) library(scales) source(file.path("..", "..", "inbo_theme.R")) library(htmlwidgets) set.seed(20190920) setWidgetIdSeed(20190920) options(htmlwidgets.TOJSON_ARGS = list(pretty = TRUE)) conflicted::conflicts_prefer(dplyr::filter, dplyr::pull, plotly::layout) ``` ```{r inlezen-gegevens} soorten <- read_vc("abv_bosvogels_soorten") read_vc("abv_bosvogels_indicator") %>% mutate( wijziging = str_replace(wijziging, ".*: (.*) t.o.v..*", "\\1"), interpretatie = recode( klasse, "++" = "sterke toename", "+" = "toename", "+~" = "matige toename", "~" = "stabiel", "-~" = "matige afname", "-" = "afname", "--" = "sterke afname", "?+" = "mogelijke toename", "?-" = "mogelijke afname", "?" = "onduidelijk", "R" = "referentie" ) ) -> gegevens ``` ```{r helper-functies} index_breaks <- function(x) { z <- 1 - c( 9 / 10, 4 / 5, 3 / 4, 2 / 3, 1 / 2, 1 / 3, 1 / 4, 1 / 5, 1 / 10, 1 / 20, 1 / 50, 1 / 100, 1 / 200, 0 ) z <- log(sort(z)) z <- z[which(z >= min(-abs(x)))[1] + -1:2] c(z, 0, -z) } index_labels <- function(x) { sprintf("%+.0f%%", 100 * (exp(x) - 1)) } periode_labels <- function(x) { sprintf("%i - %i", x, x + 2) } c(rev(traffic_palette(7)), "grey65", "grey35", "grey50") %>% setNames(levels(gegevens$klasse)) -> kleurgradient kleurgradient[4] <- inbo_steun_blauw thresholds <- c(soorten$ondergrens[1], soorten$bovengrens[1]) threshold_display <- sprintf( "%+.1f%%", 100 * thresholds - 100 ) ``` De bosvogels fluctueren in de periode 2007-2015 met de hoogste aantallen in 2012. Nadien volgt een daling die zich doorzet tot en met 2022. Sinds 2020 is er sprake van een significante afname. ```{r indicator-jaar} gegevens %>% filter(frequentie == "jaarlijks") %>% mutate(klasse = factor(klasse, levels = c(levels(klasse), "R"))) %>% complete(referentie, naar, fill = list(klasse = "R", schatting = 1)) %>% filter(referentie < max(referentie)) %>% mutate( periode = naar, naar_0 = naar - 0.5, naar_1 = naar + 0.5, interpretatie = recode( klasse, "++" = "sterke toename", "+" = "toename", "+~" = "matige toename", "~" = "stabiel", "-~" = "matige afname", "-" = "afname", "--" = "sterke afname", "?+" = "mogelijke toename", "?-" = "mogelijke afname", "?" = "onduidelijk", "R" = "referentie" ) ) %>% mutate_at( c("schatting", "lcl90", "ucl90", "lcl60", "ucl60", "lcl30", "ucl30"), log ) %>% mutate( alpha_punt = ifelse(naar < referentie, 0, 1), alpha_vlak = ifelse(naar < referentie, 0, 0.3), klasse = ifelse(naar < referentie, " ", as.character(klasse)) ) -> jaarlijks if (!interactive() && opts_knit$get("rmarkdown.pandoc.to") != "html") { jaarlijks %>% filter(referentie == 2007) -> jaarlijks } p <- ggplot( jaarlijks, aes( x = naar, xmin = naar_0, xmax = naar_1, y = schatting, frame = referentie, periode = periode, wijziging = wijziging, interpretatie = interpretatie ) ) + geom_hline(yintercept = 0) + geom_hline(yintercept = log(thresholds), linetype = 2) + geom_rect( aes(ymin = lcl90, ymax = ucl90, fill = klasse), alpha = jaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl60, ymax = ucl60, fill = klasse), alpha = jaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl30, ymax = ucl30, fill = klasse), alpha = jaarlijks$alpha_vlak, show.legend = FALSE ) + geom_point(size = 6, alpha = jaarlijks$alpha_punt) + geom_text( aes(label = klasse), hjust = 0.5, vjust = 0.5, colour = "white" ) + scale_y_continuous( "procentuele wijziging t.o.v. referentieperiode", breaks = index_breaks, labels = index_labels ) + scale_fill_manual(values = kleurgradient) + ggtitle("broedvogels van bosgebieden") + theme(axis.title.x = element_blank()) if (interactive() || opts_knit$get("rmarkdown.pandoc.to") == "html") { ggplotly( p, tooltip = c("referentie", "periode", "wijziging", "interpretatie") ) %>% animation_opts(frame = 1000, transition = 0, redraw = TRUE) %>% animation_slider( font = list(color = "black"), currentvalue = list( prefix = "geselecteerd referentiejaar: ", font = list(color = inbo_hoofd), xanchor = "center" ) ) %>% animation_button(label = "\u25B6") %>% layout(showlegend = FALSE) %>% plotly::config( modeBarButtonsToRemove = list( "lasso2d", "select2d", "autoScale2d", "hoverClosestCartesian", "hoverCompareCartesian", "toggleSpikelines" ), displaylogo = FALSE ) } else { p + ggtitle("broedvogels van bosgebieden t.o.v. 2007") } ``` Gebruikte drempelwaarden [classificatie](#classificatie): referentie = 0%, ondergrens = `r threshold_display[1]` en bovengrens = `r threshold_display[2]`. ## Definitie De index van de algemene broedvogels beschrijft de trend van een selectie van algemene vogelsoorten sinds de start van het Algemene Broedvogels Vlaanderen (ABV)-meetnet in 2007. De index berekent de procentuele wijziging t.o.v. een referentiejaar. De indicator is gebaseerd op het geometrische gemiddelde van de indices van zijn afzonderlijke soorten: `r paste(soorten$soort, sep = ", ")`. ## Bespreking Sedert 2014 wordt de index enkel berekend op de data bekomen via het speciaal hiervoor ontworpen ABV-meetnet. De besproken trends hebben betrekking op de periode 2007-2022. De bosvogels fluctueren in de periode 2007-2015 met de hoogste aantallen in 2012. Nadien volgt een daling die zich doorzet tot en met 2022. Sinds 2020 is er sprake van een significante afname. ```{r sterkste, results = "asis"} gegevens %>% filter( frequentie == "jaarlijks", referentie < naar ) %>% arrange(desc(abs(log(schatting)))) %>% slice(1) %>% transmute( tekst = sprintf( "Tussen %i en %i zien we de sterkste wijziging: %s, \"%s\".", referentie, naar, wijziging, interpretatie ) ) %>% pull(tekst) %>% cat() ``` ```{r huidig, results = "asis"} gegevens %>% filter( frequentie == "jaarlijks", referentie == min(referentie), naar == max(naar) ) %>% mutate( wijziging = sprintf( fmt = "De aantallen in %i bedragen %s van de aantallen in het referentiejaar %i. Dit interpreteren we als \"%s.\"", naar, wijziging, referentie, interpretatie ) ) %>% pull(wijziging) %>% cat() ``` ```{r indicator} gegevens %>% filter(frequentie == "driejaarlijks") %>% mutate(klasse = factor(klasse, levels = c(levels(klasse), "R"))) %>% complete(referentie, naar, fill = list(klasse = "R", schatting = 1)) %>% filter(referentie < max(referentie)) %>% mutate( naar_0 = naar - 1.5, naar_1 = naar + 1.5, interpretatie = recode( klasse, "++" = "sterke toename", "+" = "toename", "+~" = "matige toename", "~" = "stabiel", "-~" = "matige afname", "-" = "afname", "--" = "sterke afname", "?+" = "mogelijke toename", "?-" = "mogelijke afname", "?" = "onduidelijk", "R" = "referentie" ) ) %>% mutate_at( c("schatting", "lcl90", "ucl90", "lcl60", "ucl60", "lcl30", "ucl30"), log ) %>% mutate( alpha_punt = ifelse(naar < referentie, 0, 1), alpha_vlak = ifelse(naar < referentie, 0, 0.3), klasse = ifelse(naar < referentie, " ", as.character(klasse)), wijziging = ifelse(naar == referentie, "n.v.t.", wijziging), referentie = periode_labels(referentie), periode = periode_labels(naar) ) -> driejaarlijks if (!interactive() && opts_knit$get("rmarkdown.pandoc.to") != "html") { driejaarlijks %>% filter(referentie == "2007 - 2009") -> driejaarlijks } p <- ggplot( driejaarlijks, aes( x = naar, xmin = naar_0, xmax = naar_1, y = schatting, frame = referentie, periode = periode, wijziging = wijziging, interpretatie = interpretatie ) ) + geom_hline(yintercept = 0) + geom_hline(yintercept = log(thresholds), linetype = 2) + geom_rect( aes(ymin = lcl90, ymax = ucl90, fill = klasse), alpha = driejaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl60, ymax = ucl60, fill = klasse), alpha = driejaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl30, ymax = ucl30, fill = klasse), alpha = driejaarlijks$alpha_vlak, show.legend = FALSE ) + geom_point(size = 6, alpha = driejaarlijks$alpha_punt) + geom_text( aes(label = klasse), hjust = 0.5, vjust = 0.5, colour = "white" ) + scale_x_continuous( breaks = unique(driejaarlijks$naar), labels = periode_labels ) + scale_y_continuous( "procentuele wijziging t.o.v. referentieperiode", breaks = index_breaks, labels = index_labels ) + scale_fill_manual(values = kleurgradient) + ggtitle("broedvogels van bosgebieden per driejarige cyclus") + theme(axis.title.x = element_blank()) if (interactive() || opts_knit$get("rmarkdown.pandoc.to") == "html") { ggplotly( p, tooltip = c("referentie", "periode", "wijziging", "interpretatie") ) %>% animation_opts(frame = 1000, transition = 0, redraw = TRUE) %>% animation_button(label = "\u25B6") %>% animation_slider( len = 0.9, font = list(color = "black"), currentvalue = list( prefix = "geselecteerd referentieperiode: ", font = list(color = inbo_hoofd), xanchor = "center" ) ) %>% layout(showlegend = FALSE) %>% plotly::config( modeBarButtonsToRemove = list( "lasso2d", "select2d", "autoScale2d", "hoverClosestCartesian", "hoverCompareCartesian", "toggleSpikelines" ), displaylogo = FALSE ) } else { p + ggtitle( "broedvogels van bosgebieden per driejarige cyclus t.o.v. 2007-2009" ) } ``` Gebruikte drempelwaarden [classificatie](#classificatie): referentie = 0%, ondergrens = `r threshold_display[1]` en bovengrens = `r threshold_display[2]`. --- title: "Bosvogels volgens de Algemene Broedvogelmonitoring Vlaanderen" date: 2023-03-23T10:00:00+01:00 thema: - Beschermde natuur - Bos keywords: - soorten - trend - broedvogels - ABV add_generic: - classificatie lang: nl tab: indicator verantwoordelijke: - Glenn Vermeersch - Thierry Onkelinx output: html_document --- ```{r setup, include=FALSE} library(knitr) opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE) library(git2rdata) library(plotly) library(tidyverse) library(effectclass) library(scales) source(file.path("..", "..", "inbo_theme.R")) library(htmlwidgets) set.seed(20190920) setWidgetIdSeed(20190920) options(htmlwidgets.TOJSON_ARGS = list(pretty = TRUE)) conflicted::conflicts_prefer(dplyr::filter, dplyr::pull, plotly::layout) ``` ```{r inlezen-gegevens} soorten <- read_vc("abv_bosvogels_soorten") read_vc("abv_bosvogels_indicator") %>% mutate( wijziging = str_replace(wijziging, ".*: (.*) t.o.v..*", "\\1"), interpretatie = recode( klasse, "++" = "sterke toename", "+" = "toename", "+~" = "matige toename", "~" = "stabiel", "-~" = "matige afname", "-" = "afname", "--" = "sterke afname", "?+" = "mogelijke toename", "?-" = "mogelijke afname", "?" = "onduidelijk", "R" = "referentie" ) ) -> gegevens ``` ```{r helper-functies} index_breaks <- function(x) { z <- 1 - c( 9 / 10, 4 / 5, 3 / 4, 2 / 3, 1 / 2, 1 / 3, 1 / 4, 1 / 5, 1 / 10, 1 / 20, 1 / 50, 1 / 100, 1 / 200, 0 ) z <- log(sort(z)) z <- z[which(z >= min(-abs(x)))[1] + -1:2] c(z, 0, -z) } index_labels <- function(x) { sprintf("%+.0f%%", 100 * (exp(x) - 1)) } periode_labels <- function(x) { sprintf("%i - %i", x, x + 2) } c(rev(traffic_palette(7)), "grey65", "grey35", "grey50") %>% setNames(levels(gegevens$klasse)) -> kleurgradient kleurgradient[4] <- inbo_steun_blauw thresholds <- c(soorten$ondergrens[1], soorten$bovengrens[1]) threshold_display <- sprintf( "%+.1f%%", 100 * thresholds - 100 ) ``` De bosvogels fluctueren in de periode 2007-2015 met de hoogste aantallen in 2012. Nadien volgt een daling die zich doorzet tot en met 2022. Sinds 2020 is er sprake van een significante afname. ```{r indicator-jaar} gegevens %>% filter(frequentie == "jaarlijks") %>% mutate(klasse = factor(klasse, levels = c(levels(klasse), "R"))) %>% complete(referentie, naar, fill = list(klasse = "R", schatting = 1)) %>% filter(referentie < max(referentie)) %>% mutate( periode = naar, naar_0 = naar - 0.5, naar_1 = naar + 0.5, interpretatie = recode( klasse, "++" = "sterke toename", "+" = "toename", "+~" = "matige toename", "~" = "stabiel", "-~" = "matige afname", "-" = "afname", "--" = "sterke afname", "?+" = "mogelijke toename", "?-" = "mogelijke afname", "?" = "onduidelijk", "R" = "referentie" ) ) %>% mutate_at( c("schatting", "lcl90", "ucl90", "lcl60", "ucl60", "lcl30", "ucl30"), log ) %>% mutate( alpha_punt = ifelse(naar < referentie, 0, 1), alpha_vlak = ifelse(naar < referentie, 0, 0.3), klasse = ifelse(naar < referentie, " ", as.character(klasse)) ) -> jaarlijks if (!interactive() && opts_knit$get("rmarkdown.pandoc.to") != "html") { jaarlijks %>% filter(referentie == 2007) -> jaarlijks } p <- ggplot( jaarlijks, aes( x = naar, xmin = naar_0, xmax = naar_1, y = schatting, frame = referentie, periode = periode, wijziging = wijziging, interpretatie = interpretatie ) ) + geom_hline(yintercept = 0) + geom_hline(yintercept = log(thresholds), linetype = 2) + geom_rect( aes(ymin = lcl90, ymax = ucl90, fill = klasse), alpha = jaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl60, ymax = ucl60, fill = klasse), alpha = jaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl30, ymax = ucl30, fill = klasse), alpha = jaarlijks$alpha_vlak, show.legend = FALSE ) + geom_point(size = 6, alpha = jaarlijks$alpha_punt) + geom_text( aes(label = klasse), hjust = 0.5, vjust = 0.5, colour = "white" ) + scale_y_continuous( "procentuele wijziging t.o.v. referentieperiode", breaks = index_breaks, labels = index_labels ) + scale_fill_manual(values = kleurgradient) + ggtitle("broedvogels van bosgebieden") + theme(axis.title.x = element_blank()) if (interactive() || opts_knit$get("rmarkdown.pandoc.to") == "html") { ggplotly( p, tooltip = c("referentie", "periode", "wijziging", "interpretatie") ) %>% animation_opts(frame = 1000, transition = 0, redraw = TRUE) %>% animation_slider( font = list(color = "black"), currentvalue = list( prefix = "geselecteerd referentiejaar: ", font = list(color = inbo_hoofd), xanchor = "center" ) ) %>% animation_button(label = "\u25B6") %>% layout(showlegend = FALSE) %>% plotly::config( modeBarButtonsToRemove = list( "lasso2d", "select2d", "autoScale2d", "hoverClosestCartesian", "hoverCompareCartesian", "toggleSpikelines" ), displaylogo = FALSE ) } else { p + ggtitle("broedvogels van bosgebieden t.o.v. 2007") } ``` Gebruikte drempelwaarden [classificatie](#classificatie): referentie = 0%, ondergrens = `r threshold_display[1]` en bovengrens = `r threshold_display[2]`. ## Definitie De index van de algemene broedvogels beschrijft de trend van een selectie van algemene vogelsoorten sinds de start van het Algemene Broedvogels Vlaanderen (ABV)-meetnet in 2007. De index berekent de procentuele wijziging t.o.v. een referentiejaar. De indicator is gebaseerd op het geometrische gemiddelde van de indices van zijn afzonderlijke soorten: `r paste(soorten$soort, sep = ", ")`. ## Bespreking Sedert 2014 wordt de index enkel berekend op de data bekomen via het speciaal hiervoor ontworpen ABV-meetnet. De besproken trends hebben betrekking op de periode 2007-2022. De bosvogels fluctueren in de periode 2007-2015 met de hoogste aantallen in 2012. Nadien volgt een daling die zich doorzet tot en met 2022. Sinds 2020 is er sprake van een significante afname. ```{r sterkste, results = "asis"} gegevens %>% filter( frequentie == "jaarlijks", referentie < naar ) %>% arrange(desc(abs(log(schatting)))) %>% slice(1) %>% transmute( tekst = sprintf( "Tussen %i en %i zien we de sterkste wijziging: %s, \"%s\".", referentie, naar, wijziging, interpretatie ) ) %>% pull(tekst) %>% cat() ``` ```{r huidig, results = "asis"} gegevens %>% filter( frequentie == "jaarlijks", referentie == min(referentie), naar == max(naar) ) %>% mutate( wijziging = sprintf( fmt = "De aantallen in %i bedragen %s van de aantallen in het referentiejaar %i. Dit interpreteren we als \"%s.\"", naar, wijziging, referentie, interpretatie ) ) %>% pull(wijziging) %>% cat() ``` ```{r indicator} gegevens %>% filter(frequentie == "driejaarlijks") %>% mutate(klasse = factor(klasse, levels = c(levels(klasse), "R"))) %>% complete(referentie, naar, fill = list(klasse = "R", schatting = 1)) %>% filter(referentie < max(referentie)) %>% mutate( naar_0 = naar - 1.5, naar_1 = naar + 1.5, interpretatie = recode( klasse, "++" = "sterke toename", "+" = "toename", "+~" = "matige toename", "~" = "stabiel", "-~" = "matige afname", "-" = "afname", "--" = "sterke afname", "?+" = "mogelijke toename", "?-" = "mogelijke afname", "?" = "onduidelijk", "R" = "referentie" ) ) %>% mutate_at( c("schatting", "lcl90", "ucl90", "lcl60", "ucl60", "lcl30", "ucl30"), log ) %>% mutate( alpha_punt = ifelse(naar < referentie, 0, 1), alpha_vlak = ifelse(naar < referentie, 0, 0.3), klasse = ifelse(naar < referentie, " ", as.character(klasse)), wijziging = ifelse(naar == referentie, "n.v.t.", wijziging), referentie = periode_labels(referentie), periode = periode_labels(naar) ) -> driejaarlijks if (!interactive() && opts_knit$get("rmarkdown.pandoc.to") != "html") { driejaarlijks %>% filter(referentie == "2007 - 2009") -> driejaarlijks } p <- ggplot( driejaarlijks, aes( x = naar, xmin = naar_0, xmax = naar_1, y = schatting, frame = referentie, periode = periode, wijziging = wijziging, interpretatie = interpretatie ) ) + geom_hline(yintercept = 0) + geom_hline(yintercept = log(thresholds), linetype = 2) + geom_rect( aes(ymin = lcl90, ymax = ucl90, fill = klasse), alpha = driejaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl60, ymax = ucl60, fill = klasse), alpha = driejaarlijks$alpha_vlak, show.legend = FALSE ) + geom_rect( aes(ymin = lcl30, ymax = ucl30, fill = klasse), alpha = driejaarlijks$alpha_vlak, show.legend = FALSE ) + geom_point(size = 6, alpha = driejaarlijks$alpha_punt) + geom_text( aes(label = klasse), hjust = 0.5, vjust = 0.5, colour = "white" ) + scale_x_continuous( breaks = unique(driejaarlijks$naar), labels = periode_labels ) + scale_y_continuous( "procentuele wijziging t.o.v. referentieperiode", breaks = index_breaks, labels = index_labels ) + scale_fill_manual(values = kleurgradient) + ggtitle("broedvogels van bosgebieden per driejarige cyclus") + theme(axis.title.x = element_blank()) if (interactive() || opts_knit$get("rmarkdown.pandoc.to") == "html") { ggplotly( p, tooltip = c("referentie", "periode", "wijziging", "interpretatie") ) %>% animation_opts(frame = 1000, transition = 0, redraw = TRUE) %>% animation_button(label = "\u25B6") %>% animation_slider( len = 0.9, font = list(color = "black"), currentvalue = list( prefix = "geselecteerd referentieperiode: ", font = list(color = inbo_hoofd), xanchor = "center" ) ) %>% layout(showlegend = FALSE) %>% plotly::config( modeBarButtonsToRemove = list( "lasso2d", "select2d", "autoScale2d", "hoverClosestCartesian", "hoverCompareCartesian", "toggleSpikelines" ), displaylogo = FALSE ) } else { p + ggtitle( "broedvogels van bosgebieden per driejarige cyclus t.o.v. 2007-2009" ) } ``` Gebruikte drempelwaarden [classificatie](#classificatie): referentie = 0%, ondergrens = `r threshold_display[1]` en bovengrens = `r threshold_display[2]`.