From 69c5f36c6dcc018194580eb88a90864a9d66911c Mon Sep 17 00:00:00 2001 From: Smith Date: Fri, 4 Oct 2024 12:14:03 -0400 Subject: [PATCH] update citation and vignettes --- CONTRIBUTING.md | 2 +- README.md | 3 +- inst/CITATION | 10 +- vignettes/_PRECOMPILE.R | 2 +- vignettes/articles/advanced.Rmd | 47 +- vignettes/articles/advanced.Rmd.orig | 18 +- vignettes/articles/bbsBayes2.Rmd | 495 ++++++++++-------- vignettes/articles/bbsBayes2.Rmd.orig | 50 +- .../figures/advanced_unnamed-chunk-10-1.png | Bin 36163 -> 39993 bytes .../figures/advanced_unnamed-chunk-12-1.png | Bin 44278 -> 28066 bytes .../figures/advanced_unnamed-chunk-13-1.png | Bin 44722 -> 28375 bytes .../figures/advanced_unnamed-chunk-8-1.png | Bin 45260 -> 50247 bytes .../figures/advanced_unnamed-chunk-9-1.png | Bin 34726 -> 40329 bytes .../figures/bbsBayes2_unnamed-chunk-23-1.png | Bin 45338 -> 62470 bytes .../figures/bbsBayes2_unnamed-chunk-35-1.png | Bin 15154 -> 21345 bytes .../figures/bbsBayes2_unnamed-chunk-36-1.png | Bin 43675 -> 21345 bytes .../figures/bbsBayes2_unnamed-chunk-37-1.png | Bin 28308 -> 15728 bytes .../figures/bbsBayes2_unnamed-chunk-38-1.png | Bin 22767 -> 21828 bytes .../figures/bbsBayes2_unnamed-chunk-41-1.png | Bin 0 -> 43748 bytes .../figures/bbsBayes2_unnamed-chunk-42-1.png | Bin 0 -> 27385 bytes .../figures/bbsBayes2_unnamed-chunk-43-1.png | Bin 0 -> 27385 bytes .../figures/bbsBayes2_unnamed-chunk-46-1.png | Bin 25242 -> 23916 bytes .../figures/bbsBayes2_unnamed-chunk-47-1.png | Bin 0 -> 22519 bytes .../figures/bbsBayes2_unnamed-chunk-48-1.png | Bin 0 -> 50247 bytes .../figures/bbsBayes2_unnamed-chunk-49-1.png | Bin 0 -> 24955 bytes .../figures/models_unnamed-chunk-5-1.png | Bin 43337 -> 67401 bytes .../figures/models_unnamed-chunk-6-1.png | Bin 0 -> 43746 bytes .../stratification_unnamed-chunk-10-1.png | Bin 29890 -> 140198 bytes .../stratification_unnamed-chunk-12-1.png | Bin 72839 -> 157285 bytes .../stratification_unnamed-chunk-16-1.png | Bin 19815 -> 27385 bytes .../stratification_unnamed-chunk-17-1.png | Bin 19828 -> 43748 bytes .../stratification_unnamed-chunk-18-1.png | Bin 31189 -> 202146 bytes .../stratification_unnamed-chunk-19-1.png | Bin 58963 -> 202146 bytes .../stratification_unnamed-chunk-20-1.png | Bin 29547 -> 41348 bytes .../stratification_unnamed-chunk-21-1.png | Bin 29547 -> 41348 bytes .../stratification_unnamed-chunk-24-1.png | Bin 46663 -> 54099 bytes .../stratification_unnamed-chunk-31-1.png | Bin 42011 -> 41983 bytes .../stratification_unnamed-chunk-32-1.png | Bin 42011 -> 33379 bytes .../stratification_unnamed-chunk-33-1.png | Bin 33386 -> 33379 bytes .../articles/figures/workflow_diagram.png | Bin 0 -> 118878 bytes vignettes/articles/models.Rmd | 77 ++- vignettes/articles/models.Rmd.orig | 2 +- vignettes/articles/stratification.Rmd | 271 +++++----- vignettes/articles/stratification.Rmd.orig | 12 +- 44 files changed, 555 insertions(+), 434 deletions(-) create mode 100644 vignettes/articles/figures/bbsBayes2_unnamed-chunk-41-1.png create mode 100644 vignettes/articles/figures/bbsBayes2_unnamed-chunk-42-1.png create mode 100644 vignettes/articles/figures/bbsBayes2_unnamed-chunk-43-1.png create mode 100644 vignettes/articles/figures/bbsBayes2_unnamed-chunk-47-1.png create mode 100644 vignettes/articles/figures/bbsBayes2_unnamed-chunk-48-1.png create mode 100644 vignettes/articles/figures/bbsBayes2_unnamed-chunk-49-1.png create mode 100644 vignettes/articles/figures/models_unnamed-chunk-6-1.png create mode 100644 vignettes/articles/figures/workflow_diagram.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c6f7d5e..c01e759 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,7 +34,7 @@ Getting ready to make your first contribution? Here are a couple of tutorials yo - Make your changes - For changes beyond minor typos, add an item to NEWS.md describing the changes and add yourself to the DESCRIPTION file as a contributor - Push to your GitHub account -- Submit a pull request to home base (likely master branch, but check to make sure) at `bbsBayes/bbsBayes2` +- Submit a pull request to home base (likely main branch, but check to make sure) at `bbsBayes/bbsBayes2` # Code formatting diff --git a/README.md b/README.md index c3a74b6..b68e2fb 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ remotes::install_github("bbsBayes/bbsBayes2") If you want to install the developmental branch (which often includes additional options and newest updates), you can use the following. +NOTE: bbsBayes2 is supported by a small team of committed researchers with limited capacity. The development branch may not be stable. ```{r} pak::pkg_install("bbsBayes/bbsBayes2@dev") @@ -77,7 +78,7 @@ pak::pkg_install("bbsBayes/bbsBayes2@dev") ## Why bbsBayes2 -We hope you'll agree that the BBS is a [spectacular dataset](https://doi.org/10.1650/CONDOR-17-62.1). Generations of committed and expert birders have contributed their time and expertise to carefully keeping track of local bird populations. For many BBS observers, it's been a commitment that has lasted 20, 30, or even 40 years! Many federal, state, and provincial government agencies, as well as local and national conservation organizations have supported the coordination and curation of over 50-years of data. +We hope you'll agree that the BBS is a [spectacular dataset](https://doi.org/10.1650/CONDOR-17-62.1). Generations of committed and expert birders have contributed their time and expertise to carefully keeping track of local bird populations. For many BBS observers, it's been a commitment that has lasted 20, 30, or even 40 years! Many federal, state, and provincial government agencies, as well as local and national conservation organizations have supported the coordination and curation of almost 60-years of data. [The BBS was started](https://doi.org/10.1650/CONDOR-17-83.1) at the dawn of the modern North American conservation movement, inspired by changes in bird populations noticed by biologists, naturalists, farmers, and other stewards of the natural world. A continental-scale survey of birds, carefully designed to quantify changes in populations through time, in hopes that Rachel Carson's "Silent Spring", would never come to pass. diff --git a/inst/CITATION b/inst/CITATION index dac94b6..35a4b03 100644 --- a/inst/CITATION +++ b/inst/CITATION @@ -18,14 +18,14 @@ citEntry( textVersion = "Smith, A.C., Binley, A., Daly, L., Edwards, B.P.M., Ethier, D., Frei, B., Iles, D., Meehan, T.D., and Michel, N.L., and Smith, P.A. (2023). Spatially explicit Bayesian hierarchical models for avian population status and trends. https://doi.org/10.32942/X2088D" ) -citHeader("To cite the Breeding Bird Survey data in publication, please use Ziolkowski et al. 2023") +citHeader("To cite the Breeding Bird Survey data in publication, please use the citation for the relevant data release. This is currently the default 2024 data release") citEntry( entry = "misc", - title = "North American Breeding Bird Survey Dataset 1966 - 2022", - version = "2023", + title = "North American Breeding Bird Survey Dataset 1966 - 2023", + version = "2024", publisher = "U.S. Geological Survey, Patuxent Wildlife Research Center.", - author = "Ziolkowski, D.J., Lutmerding, M., English, W.B., Aponte, V.I., and Hudson, M-A.R.", - textVersion = "Ziolkowski, D.J., Lutmerding, M., English, W.B., Aponte, V.I., and Hudson, M-A.R., 2023, North American Breeding Bird Survey Dataset 1966 - 2022: U.S. Geological Survey data release, https://doi.org/10.5066/P9GS9K64." + author = "Ziolkowski, D.J., Lutmerding, M., English, W.B., and Hudson, M-A.R.", + textVersion = "Ziolkowski, D.J., Lutmerding, M., English, W.B., and Hudson, M-A.R., 2024, North American Breeding Bird Survey Dataset 1966 - 2023: U.S. Geological Survey data release, https://doi.org/10.5066/P136CRBV." ) diff --git a/vignettes/_PRECOMPILE.R b/vignettes/_PRECOMPILE.R index 3fd829c..7c57054 100644 --- a/vignettes/_PRECOMPILE.R +++ b/vignettes/_PRECOMPILE.R @@ -2,7 +2,7 @@ library(knitr) library(readr) library(stringr) - +devtools::load_all(".") # Make sure to put figures in local dir in knitr chunk options v <- list.files("vignettes", ".orig$", full.names = TRUE, recursive = TRUE) diff --git a/vignettes/articles/advanced.Rmd b/vignettes/articles/advanced.Rmd index 6c42474..0c24a9a 100644 --- a/vignettes/articles/advanced.Rmd +++ b/vignettes/articles/advanced.Rmd @@ -27,7 +27,7 @@ editor_options: # Some more advanced options -For most of these examples, we will be using a series of saved model outputs. These model outputs can be downloaded from this [Google Drive](https://drive.google.com/drive/folders/1EMPqmRYjcw7aQ9rPfFoGFtgI0ELHY4Ga?usp=sharing). In the example code here, we have unzipped these saved model outputs and stored the *.rds* files in a local sub-directory called *output*. +For most of these examples, we will be using a series of saved model outputs. These model outputs can be downloaded from this [Google Drive](https://drive.google.com/drive/folders/1m45wWySCJYxh4DZGfvp_xI8fRUEsE5e1?usp=sharing). In the example code here, we have unzipped these saved model outputs and stored the *.rds* files in a local sub-directory called *output*. ## Posterior Predictive Checks @@ -102,7 +102,7 @@ print(ppc_overplot) ## HPDI - Highest posterior density intervals -HPDI can provide a better summary of the posterior distribution than simple quantiles of the posterior distribution. HPDI are the narrowest interval that includes a particular portion of the posterior probability. For symetrical posterior distributions HPDI are the same as the Equal Density Intervals provided by taking simple quantiles of the posterior. For skewed distributions, the HPDI is less sensitive to the long-tail of the distribution. Annual indices of abundance (i.e., the index values generated by `generate_indices()`) are retransformed predictions from a log-link model and therefore often strongly skewed. HPDI values are not provided by default, but there is a logical argument `hpdi` in both `generate_trends()` and `generate_indices()`. +HPDI can provide a better summary of the posterior distribution than simple quantiles of the posterior distribution. HPDI are the narrowest interval that includes a particular portion of the posterior probability. For symetrical posterior distributions HPDI are the same as the Equal Density Intervals provided by taking simple quantiles of the posterior. For skewed distributions, the HPDI is less sensitive to the long-tail of the distribution. Annual indices of abundance (i.e., the index values generated by `generate_indices()`) are retransformed predictions from a log-link model and therefore often strongly skewed. HPDI values are not provided by default, but there is a logical argument `hpdi` in both `generate_trends()` and `generate_indices()`. For example, in the trajectory plots below, the uncertainty bounds are more symmetrical around the dark line in the lower plot using the HPDI than they are in the upper plot using the default quantiles. @@ -122,7 +122,7 @@ trajectories_hpdi <- plot_indices(i_hpdi) print(trajectories$US_NM_35 / trajectories_hpdi$US_NM_35) ``` -Population trajectories contrasting simple quantiles and HPDI for an example stratum. The HPDI uncertainty bound is more symetrical around the mean +Population trajectories contrasting simple quantiles and HPDI for an example stratum. The HPDI uncertainty bound is more symetrical around the mean @@ -217,7 +217,7 @@ Here, we'll demonstrate this feature using previously generate fitted model outp You can download a zip-file with a saved model output for Barn Swallow here: [An example of the output from applying the spatial gamye model to Barn -Swallow data](https://drive.google.com/file/d/1RNbM312_isopRN7Lb-jP1-wK4UvRKkHE/view?usp=sharing). +Swallow data](https://drive.google.com/drive/folders/1m45wWySCJYxh4DZGfvp_xI8fRUEsE5e1?usp=drive_link). Unzip the file and store it in a local directory. In this example we've placed it in a sub-directory of our working directory called *output*. @@ -225,9 +225,6 @@ In this example we've placed it in a sub-directory of our working directory call ``` r BARS <- readRDS("output/Barn_Swallow_gamye_spatial.rds") -#> Warning in gzfile(file, "rb"): cannot open compressed file 'output/Barn_Swallow_gamye_spatial.rds', probable reason -#> 'No such file or directory' -#> Error in gzfile(file, "rb"): cannot open the connection ``` We generate annual indices of abundance using the smooth-only component of the population trajectory. Then use those to estimate long-term trends (1966 - 2021), and plot those trends on a map. @@ -236,46 +233,44 @@ We generate annual indices of abundance using the smooth-only component of the p ``` r BARS_smooth_indices <- generate_indices(BARS, alternate_n = "n_smooth") -#> Error: object 'BARS' not found +#> Processing region continent +#> Processing region stratum BARS_trends <- generate_trends(BARS_smooth_indices) -#> Error: object 'BARS_smooth_indices' not found BARS_trend_map <- plot_map(BARS_trends) -#> Error: object 'BARS_trends' not found BARS_trend_map -#> Error: object 'BARS_trend_map' not found ``` +Population trend map for Barn Swallow, showing strata with increasing trends in shades of blue and strata with decreasing trends in shades of red + Then, to visualise the uncertainty in this pattern of trend estimates, we generate two maps that each display the upper and lower credible intervals of the trends. We can interpret these maps as showing the lower-bound and the upper-bound on the rates of population change for the species. For example, we can be reasonably confident that the species' trends have not been more negative than the map on the left, and are unlikely to be more positive than the map on the right. ``` r -BARS_trend_map_lower <- plot_map(BARS_trends, alternate_column = "trend_q_0.05") + +BARS_trend_map_lower <- plot_map(BARS_trends, alternate_column = "trend_q_0.05") + labs(title = "Lower bound on trend") -#> Error: object 'BARS_trends' not found -BARS_trend_map_upper <- plot_map(BARS_trends, alternate_column = "trend_q_0.95") + +BARS_trend_map_upper <- plot_map(BARS_trends, alternate_column = "trend_q_0.95") + labs(title = "Upper bound on trend")+ theme(legend.position = "none") #removing the second legend -#> Error: object 'BARS_trends' not found # combined using the patchwork package BARS_trend_bounds_maps <- BARS_trend_map_lower + BARS_trend_map_upper + plot_layout(guides = "collect") -#> Error: object 'BARS_trend_map_lower' not found BARS_trend_bounds_maps -#> Error: object 'BARS_trend_bounds_maps' not found ``` -Alternatively, we could visualise the width of the credible interval on the trends. Here we see that most of the trend estimates have credible intervals that are narrower than approximately 2%/year, but trends for a few strata in northern regions and the south-west are less precise. Note: Because in this case we are not displaying estimates of trends specifically, the function uses the viridis colour scale. +Population trend maps for Barn Swallow, showing the lower and upper bounds on the population trends, where strata with increasing trends are shown in shades of blue and strata with decreasing trends in shades of red + +Alternatively, we could visualise the width of the credible interval on the trends. Here we see that most of the trend estimates have credible intervals that are narrower than approximately 2%/year, but trends for a few strata in northern regions and the south-west are less precise. Note: Because in this case we are not displaying estimates of trends specifically, the function uses the viridis colour scale. ``` r -BARS_trend_map_CI_width <- plot_map(BARS_trends, alternate_column = "width_of_95_percent_credible_interval") -#> Error: object 'BARS_trends' not found +BARS_trend_map_CI_width <- plot_map(BARS_trends, alternate_column = "width_of_95_percent_credible_interval") BARS_trend_map_CI_width -#> Error: object 'BARS_trend_map_CI_width' not found ``` +Map of the width of the credible interval on trend estimates for Barn Swallow + ## Advanced options and customized models @@ -348,7 +343,7 @@ t_map <- plot_map(t) print(t_map) ``` -Map of population trends for Scissor-tailed Flycatcher from 1980-2021, using the default end-point trend estimates +Map of population trends for Scissor-tailed Flycatcher from 1980-2021, using the default end-point trend estimates ### Slope-based Trends @@ -377,7 +372,7 @@ t_map_slope <- plot_map(t, print(t_map_slope) ``` -Map of population trends for Scissor-tailed Flycatcher from 1980-2021, using the slope-based trend estimates +Map of population trends for Scissor-tailed Flycatcher from 1980-2021, using the slope-based trend estimates ### Percent Change and probability of change @@ -459,7 +454,7 @@ trajectories <- plot_indices(i_BARS) print(trajectories[["North"]] / trajectories[["South"]]) ``` -Population trajectories for Barn Swallow in the northern and southern parts of their range +Population trajectories for Barn Swallow in the northern and southern parts of their range ## Exporting and modifying the Stan models @@ -497,7 +492,9 @@ mod<-run_model(prep,...) ``` ## Example - modifying a model to include a covariate -With some experience writing Stan code, there are limitless options to modify the base bbsBayes2 models and fit them using the package functions. For example, the bbsBayes models are designed to estimate how bird populations have changed in time and space. But with modifications to include predictors on the aspects of population change, they could also serve to estimate **why** pouplations have changed. Other very simple modifications could be to change the priors on particular parameters. We have used priors on the time-series components of these models that are somewhat informative. Based on the observed temporal and spatial variation from 50-years of monitoring bird populations with the BBS and the Christmas Bird Count. But some users may want priors that are less, or more, informative. See the supplementals associated with this pre-print, [Smith et al. 2023](https://doi.org/10.32942/X2088D), for more information on these priors. +With some experience writing Stan code, there are limitless options to modify the base bbsBayes2 models and fit them using the package functions. For example, the bbsBayes models are designed to estimate how bird populations have changed in time and space. But with modifications to include predictors on the aspects of population change, they could also serve to estimate **why** pouplations have changed. Other very simple modifications could be to change the priors on particular parameters. We have used priors on the time-series components of these models that are somewhat informative. Based on the observed temporal and spatial variation from 50-years of monitoring bird populations with the BBS and the Christmas Bird Count. But some users may want priors that are less, or more, informative. See the supplementals associated with this paper, [Smith et al. 2024](https://doi.org/10.1093/ornithapp/duad056), for more information on these priors. + +The details on this example are from an ongoing collaboration examining the effects of annual climate factors on the relative abundance of Black Tern, which you can explore more in this [GitHub repo](https://github.com/AdamCSmithCWS/Wetland_bird_trends_moisture). ### viewing and exporting the Stan code for the models diff --git a/vignettes/articles/advanced.Rmd.orig b/vignettes/articles/advanced.Rmd.orig index 6965d0d..a103161 100644 --- a/vignettes/articles/advanced.Rmd.orig +++ b/vignettes/articles/advanced.Rmd.orig @@ -35,7 +35,7 @@ knitr::opts_chunk$set( # Some more advanced options -For most of these examples, we will be using a series of saved model outputs. These model outputs can be downloaded from this [Google Drive](https://drive.google.com/drive/folders/1EMPqmRYjcw7aQ9rPfFoGFtgI0ELHY4Ga?usp=sharing). In the example code here, we have unzipped these saved model outputs and stored the *.rds* files in a local sub-directory called *output*. +For most of these examples, we will be using a series of saved model outputs. These model outputs can be downloaded from this [Google Drive](https://drive.google.com/drive/folders/1m45wWySCJYxh4DZGfvp_xI8fRUEsE5e1?usp=sharing). In the example code here, we have unzipped these saved model outputs and stored the *.rds* files in a local sub-directory called *output*. ## Posterior Predictive Checks @@ -106,7 +106,7 @@ print(ppc_overplot) ## HPDI - Highest posterior density intervals -HPDI can provide a better summary of the posterior distribution than simple quantiles of the posterior distribution. HPDI are the narrowest interval that includes a particular portion of the posterior probability. For symetrical posterior distributions HPDI are the same as the Equal Density Intervals provided by taking simple quantiles of the posterior. For skewed distributions, the HPDI is less sensitive to the long-tail of the distribution. Annual indices of abundance (i.e., the index values generated by `generate_indices()`) are retransformed predictions from a log-link model and therefore often strongly skewed. HPDI values are not provided by default, but there is a logical argument `hpdi` in both `generate_trends()` and `generate_indices()`. +HPDI can provide a better summary of the posterior distribution than simple quantiles of the posterior distribution. HPDI are the narrowest interval that includes a particular portion of the posterior probability. For symetrical posterior distributions HPDI are the same as the Equal Density Intervals provided by taking simple quantiles of the posterior. For skewed distributions, the HPDI is less sensitive to the long-tail of the distribution. Annual indices of abundance (i.e., the index values generated by `generate_indices()`) are retransformed predictions from a log-link model and therefore often strongly skewed. HPDI values are not provided by default, but there is a logical argument `hpdi` in both `generate_trends()` and `generate_indices()`. For example, in the trajectory plots below, the uncertainty bounds are more symmetrical around the dark line in the lower plot using the HPDI than they are in the upper plot using the default quantiles. ```{r, fig.cap = "", fig.alt = "Population trajectories contrasting simple quantiles and HPDI for an example stratum. The HPDI uncertainty bound is more symetrical around the mean", fig.width = 8, fig.asp = 0.6} @@ -213,7 +213,7 @@ Here, we'll demonstrate this feature using previously generate fitted model outp You can download a zip-file with a saved model output for Barn Swallow here: [An example of the output from applying the spatial gamye model to Barn -Swallow data](https://drive.google.com/file/d/1RNbM312_isopRN7Lb-jP1-wK4UvRKkHE/view?usp=sharing). +Swallow data](https://drive.google.com/drive/folders/1m45wWySCJYxh4DZGfvp_xI8fRUEsE5e1?usp=drive_link). Unzip the file and store it in a local directory. In this example we've placed it in a sub-directory of our working directory called *output*. @@ -237,9 +237,9 @@ Then, to visualise the uncertainty in this pattern of trend estimates, we genera ```{r, fig.cap = "", fig.alt = "Population trend maps for Barn Swallow, showing the lower and upper bounds on the population trends, where strata with increasing trends are shown in shades of blue and strata with decreasing trends in shades of red", fig.width = 8, fig.asp = 0.6} -BARS_trend_map_lower <- plot_map(BARS_trends, alternate_column = "trend_q_0.05") + +BARS_trend_map_lower <- plot_map(BARS_trends, alternate_column = "trend_q_0.05") + labs(title = "Lower bound on trend") -BARS_trend_map_upper <- plot_map(BARS_trends, alternate_column = "trend_q_0.95") + +BARS_trend_map_upper <- plot_map(BARS_trends, alternate_column = "trend_q_0.95") + labs(title = "Upper bound on trend")+ theme(legend.position = "none") #removing the second legend # combined using the patchwork package @@ -247,11 +247,11 @@ BARS_trend_bounds_maps <- BARS_trend_map_lower + BARS_trend_map_upper + plot_lay BARS_trend_bounds_maps ``` -Alternatively, we could visualise the width of the credible interval on the trends. Here we see that most of the trend estimates have credible intervals that are narrower than approximately 2%/year, but trends for a few strata in northern regions and the south-west are less precise. Note: Because in this case we are not displaying estimates of trends specifically, the function uses the viridis colour scale. +Alternatively, we could visualise the width of the credible interval on the trends. Here we see that most of the trend estimates have credible intervals that are narrower than approximately 2%/year, but trends for a few strata in northern regions and the south-west are less precise. Note: Because in this case we are not displaying estimates of trends specifically, the function uses the viridis colour scale. ```{r, fig.cap = "", fig.alt = "Map of the width of the credible interval on trend estimates for Barn Swallow", fig.width = 8, fig.asp = 0.8} -BARS_trend_map_CI_width <- plot_map(BARS_trends, alternate_column = "width_of_95_percent_credible_interval") +BARS_trend_map_CI_width <- plot_map(BARS_trends, alternate_column = "width_of_95_percent_credible_interval") BARS_trend_map_CI_width @@ -453,7 +453,9 @@ mod<-run_model(prep,...) ``` ## Example - modifying a model to include a covariate -With some experience writing Stan code, there are limitless options to modify the base bbsBayes2 models and fit them using the package functions. For example, the bbsBayes models are designed to estimate how bird populations have changed in time and space. But with modifications to include predictors on the aspects of population change, they could also serve to estimate **why** pouplations have changed. Other very simple modifications could be to change the priors on particular parameters. We have used priors on the time-series components of these models that are somewhat informative. Based on the observed temporal and spatial variation from 50-years of monitoring bird populations with the BBS and the Christmas Bird Count. But some users may want priors that are less, or more, informative. See the supplementals associated with this pre-print, [Smith et al. 2023](https://doi.org/10.32942/X2088D), for more information on these priors. +With some experience writing Stan code, there are limitless options to modify the base bbsBayes2 models and fit them using the package functions. For example, the bbsBayes models are designed to estimate how bird populations have changed in time and space. But with modifications to include predictors on the aspects of population change, they could also serve to estimate **why** pouplations have changed. Other very simple modifications could be to change the priors on particular parameters. We have used priors on the time-series components of these models that are somewhat informative. Based on the observed temporal and spatial variation from 50-years of monitoring bird populations with the BBS and the Christmas Bird Count. But some users may want priors that are less, or more, informative. See the supplementals associated with this paper, [Smith et al. 2024](https://doi.org/10.1093/ornithapp/duad056), for more information on these priors. + +The details on this example are from an ongoing collaboration examining the effects of annual climate factors on the relative abundance of Black Tern, which you can explore more in this [GitHub repo](https://github.com/AdamCSmithCWS/Wetland_bird_trends_moisture). ### viewing and exporting the Stan code for the models diff --git a/vignettes/articles/bbsBayes2.Rmd b/vignettes/articles/bbsBayes2.Rmd index ee5c01a..aff5714 100644 --- a/vignettes/articles/bbsBayes2.Rmd +++ b/vignettes/articles/bbsBayes2.Rmd @@ -13,7 +13,7 @@ editor_options: -```r +``` r library(bbsBayes2) library(tidyverse) ``` @@ -55,7 +55,7 @@ the BBS survey data, and then we'll run through some example workflows. If you haven't already, install bbsBayes2 from the R-Universe. -```r +``` r install.packages("bbsBayes2", repos = c(bbsbayes = "https://bbsbayes.r-universe.dev", CRAN = getOption("repos"))) ``` @@ -71,7 +71,7 @@ sure we have cmdstanr and cmdstan both installed. Run this in a fresh R session. -```r +``` r install.packages("cmdstanr", repos = c("https://mc-stan.org/r-packages/", getOption("repos"))) ``` @@ -79,15 +79,15 @@ install.packages("cmdstanr", repos = c("https://mc-stan.org/r-packages/", Now we should be able to use cmdstanr to install cmdstan -```r +``` r cmdstanr::install_cmdstan() ``` -Let's check that everything went as planned +Let's check that everything went as planned, and tell cmdstanr to fix any issues. -```r -cmdstanr::check_cmdstan_toolchain() +``` r +cmdstanr::check_cmdstan_toolchain(fix = TRUE) #> The C++ toolchain required for CmdStan is setup properly! ``` @@ -116,7 +116,7 @@ done. Now we'll fetch the BBS data using the `fetch_bbs_data()` function. -```r +``` r library(bbsBayes2) fetch_bbs_data() # ``` @@ -128,15 +128,15 @@ This will save the data to a package-specific directory on your computer. You mu > section). -There are (as of August 2023) two types of BBS data that can be -downloaded, and three release-versions: +There are two types of BBS data that can be +downloaded, and annual release-versions: - Two levels `state` and `stop` (only `state` works with bbsBayes2 models, the `stop` option is provided to facilitate custom projects and models) -- Two releases `2020`, `2022` and `2023` (more options will be added as annual releases occur). +- Annual releases `2020`, `2022`, `2023`, and '2024' more options will be added as annual releases occur). -The defaults (level `state` and the most recent release - `2023`) is almost certainly what you are looking for, Unless you have a specific reason to need a different version. The most recent release will include all of the data included in earlier releases. -However you can download all data sets and specify which one you wish to +The defaults (level `state` and the most recent release - `2024`) is almost certainly what you are looking for, Unless you have a specific reason to need a different version. The most recent release will include all of the data included in earlier releases. +However you can download all releases and specify which one you wish to use in the `stratify()` step. ### A note about BBS release names: @@ -149,7 +149,7 @@ There is no lockdowns of spring 2020 so no data were collected and there was no updated data to release the following year. -```r +``` r fetch_bbs_data() # Default - most recent release fetch_bbs_data(release = "2020") # Specify a different release ``` @@ -176,7 +176,7 @@ example, the output of `stratify()` is required input for Functions which are connected by a **solid, grey** arrow, indicate that the output of the first function is *optional* input to the second. For -example, the output of `grenerate_trends()` is an option input for +example, the output of `generate_trends()` is an option input for `plot_geofacet()`. Functions which are connected by a **dotted** arrow indicate that the @@ -190,13 +190,9 @@ which can be modified by the user and then used as input to See the [Function Reference](../reference) for more details on how to use a particular function. +![Workflow diagram demonstrating the steps, ordering, and dependencies of the key functions within the bbsBayes2 package](figures/workflow_diagram.png) -``` -#> Warning: package 'DiagrammeR' was built under R version 4.3.1 -``` - - ## Workflow to fit models @@ -214,7 +210,7 @@ this step we choose a stratification type as well as a species to explore. -```r +``` r s <- stratify(by = "bbs_usgs", species = "Scissor-tailed Flycatcher") #> Using 'bbs_usgs' (standard) stratification #> Loading BBS data... @@ -226,11 +222,12 @@ s <- stratify(by = "bbs_usgs", species = "Scissor-tailed Flycatcher") We can also play around with the included sample data (Pacific Wrens) -```r +``` r s <- stratify(by = "bbs_cws", sample_data = TRUE) # Only Pacific Wren #> Using 'bbs_cws' (standard) stratification #> Using sample BBS data... #> Using species Pacific Wren (sample data) +#> Filtering to species Pacific Wren (7221) #> Stratifying data... #> Combining BCR 7 and NS and PEI... #> Renaming routes... @@ -249,47 +246,47 @@ All of the models in the package are species-specific. So the species is a funda The `search_species()` function allows the user to search up the species names in the BBS database, using text from the English, Spanish, French, or Latin names. The English names for each species will be retained in the metadata at every step of the workflow. -```r +``` r search_species("Geai bleu") -#> # A tibble: 1 × 9 -#> aou english french spanish order family genus species unid_combined -#> -#> 1 4770 Blue Jay Geai bleu Cyanocitta cristata Passeriformes Corvi… Cyan… crista… TRUE +#> # A tibble: 1 × 8 +#> aou english french order family genus species unid_combined +#> +#> 1 4770 Blue Jay Geai bleu Passeriformes Corvidae Cyanocitta cristata TRUE search_species("Cyanocitta") -#> # A tibble: 2 × 9 -#> aou english french spanish order family genus species unid_combined -#> -#> 1 4780 Steller's Jay Geai de Steller Cyanocitta stel… Pass… Corvi… Cyan… stelle… TRUE -#> 2 4770 Blue Jay Geai bleu Cyanocitta cris… Pass… Corvi… Cyan… crista… TRUE +#> # A tibble: 2 × 8 +#> aou english french order family genus species unid_combined +#> +#> 1 4780 Steller's Jay Geai de Steller Passeriformes Corvidae Cyanocitta stelleri TRUE +#> 2 4770 Blue Jay Geai bleu Passeriformes Corvidae Cyanocitta cristata TRUE search_species("Corvidae") -#> # A tibble: 20 × 9 -#> aou english french spanish order family genus species unid_combined -#> -#> 1 4840 Canada Jay Mésan… Periso… Pass… Corvi… Peri… canade… TRUE -#> 2 4830 Green Jay Geai … Cyanoc… Pass… Corvi… Cyan… yncas TRUE -#> 3 4920 Pinyon Jay Geai … Gymnor… Pass… Corvi… Gymn… cyanoc… TRUE -#> 4 4780 Steller's Jay Geai … Cyanoc… Pass… Corvi… Cyan… stelle… TRUE -#> 5 4770 Blue Jay Geai … Cyanoc… Pass… Corvi… Cyan… crista… TRUE -#> 6 4790 Florida Scrub-Jay Geai … Aphelo… Pass… Corvi… Aphe… coerul… TRUE -#> 7 4811 Island Scrub-Jay Geai … Aphelo… Pass… Corvi… Aphe… insula… TRUE -#> 8 4812 California Scrub-Jay Geai … Aphelo… Pass… Corvi… Aphe… califo… TRUE -#> 9 4813 Woodhouse's Scrub-Jay Geai … Aphelo… Pass… Corvi… Aphe… woodho… TRUE -#> 10 4810 unid. California Scrub-Jay / … unid … Aphelo… Pass… Corvi… Aphe… califo… TRUE -#> 11 4820 Mexican Jay Geai … Aphelo… Pass… Corvi… Aphe… wollwe… TRUE -#> 12 4910 Clark's Nutcracker Casse… Nucifr… Pass… Corvi… Nuci… columb… TRUE -#> 13 4750 Black-billed Magpie Pie d… Pica h… Pass… Corvi… Pica hudson… TRUE -#> 14 4760 Yellow-billed Magpie Pie à… Pica n… Pass… Corvi… Pica nuttal… TRUE -#> 15 4880 American Crow Corne… Corvus… Pass… Corvi… Corv… brachy… TRUE -#> 16 4900 Fish Crow Corne… Corvus… Pass… Corvi… Corv… ossifr… TRUE -#> 17 4881 unid. American Crow / Fish Cr… unid … Corvus… Pass… Corvi… Corv… brachy… TRUE -#> 18 4870 Chihuahuan Raven Corbe… Corvus… Pass… Corvi… Corv… crypto… TRUE -#> 19 4860 Common Raven Grand… Corvus… Pass… Corvi… Corv… corax TRUE -#> 20 4865 unid. Chihuahuan Raven / Comm… unid … Corvus… Pass… Corvi… Corv… crypto… TRUE +#> # A tibble: 20 × 8 +#> aou english french order family genus species unid_combined +#> +#> 1 4840 Canada Jay Mésangeai du C… Pass… Corvi… Peri… canade… TRUE +#> 2 4830 Green Jay Geai vert Pass… Corvi… Cyan… yncas TRUE +#> 3 4920 Pinyon Jay Geai des pinèd… Pass… Corvi… Gymn… cyanoc… TRUE +#> 4 4780 Steller's Jay Geai de Steller Pass… Corvi… Cyan… stelle… TRUE +#> 5 4770 Blue Jay Geai bleu Pass… Corvi… Cyan… crista… TRUE +#> 6 4790 Florida Scrub-Jay Geai à gorge b… Pass… Corvi… Aphe… coerul… TRUE +#> 7 4811 Island Scrub-Jay Geai de Santa … Pass… Corvi… Aphe… insula… TRUE +#> 8 4812 California Scrub-Jay Geai buissonni… Pass… Corvi… Aphe… califo… TRUE +#> 9 4813 Woodhouse's Scrub-Jay Geai de Woodho… Pass… Corvi… Aphe… woodho… TRUE +#> 10 4810 unid. California Scrub-Jay / Woodhouse's Scrub-Jay unid Geai buis… Pass… Corvi… Aphe… califo… TRUE +#> 11 4820 Mexican Jay Geai du Mexique Pass… Corvi… Aphe… wollwe… TRUE +#> 12 4910 Clark's Nutcracker Cassenoix d'Am… Pass… Corvi… Nuci… columb… TRUE +#> 13 4750 Black-billed Magpie Pie d'Amérique Pass… Corvi… Pica hudson… TRUE +#> 14 4760 Yellow-billed Magpie Pie à bec jaune Pass… Corvi… Pica nuttal… TRUE +#> 15 4880 American Crow Corneille d'Am… Pass… Corvi… Corv… brachy… TRUE +#> 16 4900 Fish Crow Corneille de r… Pass… Corvi… Corv… ossifr… TRUE +#> 17 4881 unid. American Crow / Fish Crow unid Corneille… Pass… Corvi… Corv… brachy… TRUE +#> 18 4870 Chihuahuan Raven Corbeau à cou … Pass… Corvi… Corv… crypto… TRUE +#> 19 4860 Common Raven Grand Corbeau Pass… Corvi… Corv… corax TRUE +#> 20 4865 unid. Chihuahuan Raven / Common Raven unid Grand Cor… Pass… Corvi… Corv… crypto… TRUE ``` ##### Species groupings There are some taxonomic groupings of species-units in the BBS database -that bbsBayes2 by default also combines into combined species forms. These +that bbsBayes2 by default also groups into combined species forms. These represent groupings that make sense based on changes in taxonomy or potentially inconsistent distinctions among observers, routes, regions, or time. @@ -299,12 +296,11 @@ potentially inconsistent distinctions among observers, routes, regions, or time. Flicker observations exist in the BBS database separately as Red-shafted Flicker (4130), Yellow-shafted Flicker (4120), unidentified Red/Yellow-shafted Flicker (4123) or hybrid Red x Yellow-shafted Flicker (4125). To provide an appropriate dataset to represent population trends of Northern Flicker, bbsBayes2 by default sums all of these observations into a new *species* called Northern Flicker (all forms), which replaces the (4123) unidentified category in the species database. The remaining original separate forms (Red, Yellow, and hybrid) are retained. - Similar combined *species* are created for taxonomic splits that have occurred since the start of the BBS, such as Clark's and Western Grebe, which are retained as their own separate species, but are also combined into Western Grebe (Clark's/Western) (12). - You can access a complete list of these combined *species* groups and the sub groups that make them up. -```r -species_forms +``` r +bbsBayes2::species_forms #> aou_unid english_original #> 1 2973 unid. Dusky Grouse / Sooty Grouse #> 2 5677 (unid. race) Dark-eyed Junco @@ -319,6 +315,7 @@ species_forms #> 11 12 unid. Western Grebe / Clark's Grebe #> 12 6556 (unid. Myrtle/Audubon's) Yellow-rumped Warbler #> 13 5275 unid. Common Redpoll / Hoary Redpoll +#> 14 5012 unid. Meadowlark #> english_combined #> 1 Blue Grouse (Dusky/Sooty) #> 2 Dark-eyed Junco (all forms) @@ -333,6 +330,7 @@ species_forms #> 11 Western Grebe (Clark's/Western) #> 12 Yellow-rumped Warbler (all forms) #> 13 Redpoll (Common/Hoary) +#> 14 Meadowlark (Eastern/Western/Chihuahuan) #> french_combined aou_id #> 1 Tétras sombre (sombre/fuligineux) 2970, 2971 #> 2 Junco ardoisé (toutes les formes) 5671, 5670, 5680, 5660, 5690 @@ -346,12 +344,35 @@ species_forms #> 10 Moucherolle côtier (des ravins/ côtier) 4641, 4640 #> 11 Grèbe élégant (à face blanche/élégant) 10, 11 #> 12 Paruline à croupion jaune (toutes les formes) 6550, 6560 -#> 13 Sizerin (Flammé/Blanchâtre) 5270, 5280 +#> 13 Sizerin (flammé/blanchâtre) 5270, 5280 +#> 14 Sturnelle (prés/Ouest/Lilian) 5009, 5010, 5011 +``` + +- These splits that have occurred since the start of the BBS require some extra +care when considering what years to include in any model fit. For example, if fitting a trend model to the data for Clark's Grebe, it would not make sense to include all years back to 1966. Prior to 1985, Clark's Grebe was not a distinct species and so observers would not have recorded observations for this *species* in the same was as they would have after 1985. The `prepare_data()` function will generate warnings if the user selects a species and time-period where these species identification-issues may be important. Related concerns with time-span may apply to species that have expanded their range into the surveyed area of the BBS since the beginning of surveys. A list of the species where these time-span concerns may be most relevant can be found by calling the built-in data table. + + +``` r +bbsBayes2::species_notes +#> english french aou minimum_year +#> 1 Alder Flycatcher Moucherolle des aulnes 4661 1978 +#> 2 Willow Flycatcher Moucherolle des saules 4660 1978 +#> 3 Clark's Grebe Grèbe à face blanche 11 1990 +#> 4 Western Grebe Grèbe élégant 10 1990 +#> 5 Eurasian Collared-Dove Tourterelle turque 22860 1990 +#> 6 Cave Swallow Hirondelle à front brun 6121 1985 +#> warning +#> 1 Alder and Willow Flycatcher were considered a single species until 1973. It is likely that they are not accurately separated by BBS observers until at least some years after that split. +#> 2 Alder and Willow Flycatcher were considered a single species until 1973. It is likely that they are not accurately separated by BBS observers until at least some years after that split. +#> 3 Clark's and Western Grebe were considered a single species until 1985. It is likely that they are not accurately separated by BBS observers until at least some years after that split. +#> 4 Clark's and Western Grebe were considered a single species until 1985. It is likely that they are not accurately separated by BBS observers until at least some years after that split. +#> 5 Eurasian Collared Dove was introduced into North America in the 1980s. 1990 is the first year that the species was observed on at least 3 BBS routes. +#> 6 Cave Swallows were relatively rare in the areas surveyed by BBS before 1980. There are only two observations during BBS before 1980. ``` If you're looking for a complete list of all species in the BBS database. -```r +``` r all_species_bbs_database <- load_bbs_data()$species ``` @@ -369,7 +390,7 @@ samples, etc. See `prepare_data()` for more details on how you can customize this step. -```r +``` r p <- prepare_data(s) ``` @@ -379,7 +400,7 @@ Next we will prepare the model parameters and initialization values. See `prepare_model()` for more details on how you can customize this step. -```r +``` r md <- prepare_model(p, model = "first_diff") ``` @@ -393,7 +414,7 @@ much lower values, but note that this almost certainly will result in problems with our model. -```r +``` r m <- run_model(md, iter_sampling = 100, iter_warmup = 500, chains = 2) ``` @@ -404,7 +425,7 @@ prepare the data as in the previous example, but you also prepare the map and the spatial data. An example is below. -```r +``` r s <- stratify(by = "bbs_usgs", species="Scissor-tailed Flycatcher") #> Using 'bbs_usgs' (standard) stratification #> Loading BBS data... @@ -416,7 +437,7 @@ p <- prepare_data(s) And now the additional steps... -```r +``` r # Load a map map <- load_map(stratify_by = "bbs_usgs") # Prepare the spatial data @@ -428,7 +449,7 @@ sp <- prepare_spatial(p, map) ``` Then the remaining steps are the same but we use `model_variant = "spatial"` in `prepare_model()`. -```r +``` r # Then prepare the model with the spatial output mod <- prepare_model(sp, model = "gamye", model_variant = "spatial") @@ -438,22 +459,55 @@ m <- run_model(mod) # Optionally, save the model output as an .rds file saveRDS(m, "output/4430_gamye_spatial.rds") ``` -The spatial aspects of the spatial model variants use an intrinsic Conditional Autoregressive structure (iCAR) to share information among neighbouring strata on the population abundance and trend parameter ([Besag et al. 1991](https://doi.org/10.1007/BF00116466), [ver Hoef et al. 2018](http://doi.wiley.com/10.1002/ecm.1283), [Morris et al. 2019](https://doi.org/10.1016/j.sste.2019.100301)). For more information about the bbsBayes2 models and the spatial models see the [models vignette](./models.html) and [Smith et al., 2023 pre-print](https://doi.org/10.32942/X2088D). +The spatial aspects of the spatial model variants use an intrinsic Conditional Autoregressive structure (iCAR) to share information among neighbouring strata on the population abundance and trend parameter ([Besag et al. 1991](https://doi.org/10.1007/BF00116466), [ver Hoef et al. 2018](http://doi.wiley.com/10.1002/ecm.1283), [Morris et al. 2019](https://doi.org/10.1016/j.sste.2019.100301)). For more information about the bbsBayes2 models and the spatial models see the [models vignette](./models.html) and [Smith et al., 2024](https://doi.org/10.1093/ornithapp/duad056). The prepared spatial data object includes a map of the spatial neighbourhood relationships for a given species and stratification. -```r +``` r print(sp$spatial_data$map) ``` -Map showing the strata and neighbourhood relationships among them for Scissor-tailed Flycatcher +Map showing the strata and neighbourhood relationships among them for Scissor-tailed Flycatcher ## Workflow to explore the model outputs {#explore_output} If you would prefer to skip the model fitting steps for now, you can -[download a fitted model](https://drive.google.com/file/d/1zF8xOIn_ZuORmjNDHAu5YCJjIx4j-MHC/view?usp=drive_link) object (the output of `run_model()` function) -and test out the remaining package features. +[download a fitted model](https://drive.google.com/file/d/14SYabzAj_3IGmbBB-y0NZfBngKytiR0x/view?usp=sharing) object (the output of the code below) and test out the remaining package features. + + +``` r +library(bbsBayes2) +library(tidyverse) + +species <- "Scissor-tailed Flycatcher" + +# extract the unique numerical identifier for this species in the BBS database +species_number <- search_species(species) %>% + select(aou) %>% + unlist() + +mod <- "gamye" +var <- "spatial" + +out_name <- paste0("output/", + species_number, + "_", + mod, + "_", + var) + +d <- stratify("bbs_usgs", + species = species) %>% + prepare_data() %>% + prepare_spatial(s, strata_map = load_map("bbs_usgs")) %>% + prepare_model(model = mod, model_variant = var) + +m <- run_model(d, + output_basename = out_name, + output_dir = getwd()) # by default saves the model output using output_basename + +``` The outputs of the collection of functions required to fit a model are cumulative: each one retains the metadata from the previous step. As a @@ -463,7 +517,7 @@ fitting process, as well as all of the data and metadata necessary to understand and replicate the choices made to fit the model. -```r +``` r m <- readRDS("output/4430_gamye_spatial.rds") names(m) #> [1] "model_fit" "model_data" "meta_data" "meta_strata" "raw_data" @@ -480,31 +534,31 @@ summary statistics (mean, median, credible intervals) for all parameters in a fitted model. -```r +``` r # Convergence diagnostics for all parameters converge <- get_convergence(m) ``` -```r +``` r # Convergence diagnostics for all smoothed annual indices converge_n_smooth <- get_convergence(m, variables = "n_smooth") %>% arrange(-rhat) converge_n_smooth -#> # A tibble: 1,375 × 5 +#> # A tibble: 1,425 × 5 #> variable_type variable rhat ess_bulk ess_tail #> -#> 1 n_smooth n_smooth[7,26] 1.00 5383. 3686. -#> 2 n_smooth n_smooth[7,25] 1.00 5384. 3618. -#> 3 n_smooth n_smooth[7,28] 1.00 5325. 3745. -#> 4 n_smooth n_smooth[7,24] 1.00 5137. 3545. -#> 5 n_smooth n_smooth[7,23] 1.00 5053. 3197. -#> 6 n_smooth n_smooth[9,35] 1.00 4546. 3433. -#> 7 n_smooth n_smooth[7,27] 1.00 5348. 3780. -#> 8 n_smooth n_smooth[12,54] 1.00 4279. 3348. -#> 9 n_smooth n_smooth[14,10] 1.00 4870. 3670. -#> 10 n_smooth n_smooth[12,53] 1.00 4317. 3549. -#> # ℹ 1,365 more rows +#> 1 n_smooth n_smooth[21,25] 1.00 5881. 2893. +#> 2 n_smooth n_smooth[20,16] 1.00 4369. 3568. +#> 3 n_smooth n_smooth[20,15] 1.00 4363. 3713. +#> 4 n_smooth n_smooth[18,27] 1.00 4850. 3204. +#> 5 n_smooth n_smooth[24,33] 1.00 5138. 3663. +#> 6 n_smooth n_smooth[18,29] 1.00 4999. 3353. +#> 7 n_smooth n_smooth[16,51] 1.00 4498. 3746. +#> 8 n_smooth n_smooth[18,28] 1.00 5024. 3182. +#> 9 n_smooth n_smooth[16,50] 1.00 4430. 3747. +#> 10 n_smooth n_smooth[21,23] 1.00 5757. 3643. +#> # ℹ 1,415 more rows ``` Here we've sorted the convergence diagnostics by rhat values (highest values at the top to highlight any problems). Cut-offs for rhat statistics are somewhat arbitrary and recommendations vary in the literature, but values of @@ -519,7 +573,7 @@ in [Gabry et al., 2019](https://doi.org/10.1111/rssa.12378). bbsBayes2 relies on -```r +``` r m <- run_model(mod, iter_warmup = 2000, iter_sampling = 2000) @@ -533,7 +587,7 @@ would also increase the time required to fit the model by a factor of approximately 4). -```r +``` r m <- run_model(mod, iter_warmup = 4000, iter_sampling = 4000, @@ -544,31 +598,31 @@ If you want summary statistics of the parameters, as well as convergence diagnostics, the function `get_summary()` may be more useful. -```r +``` r # Summary statistics and convergence diagnostics for all parameters summary_stats <- get_summary(m) ``` -```r +``` r # Summary statistics and convergence diagnostics for all smoothed annual indices summary_stats_n_smooth <- get_summary(m, variables = "n_smooth") %>% arrange(-rhat) summary_stats_n_smooth -#> # A tibble: 1,375 × 10 -#> variable mean median sd mad q5 q95 rhat ess_bulk ess_tail -#> -#> 1 n_smooth[7,26] 0.501 0.494 0.0909 0.0894 0.367 0.661 1.00 5383. 3686. -#> 2 n_smooth[7,25] 0.512 0.504 0.0933 0.0917 0.374 0.675 1.00 5384. 3618. -#> 3 n_smooth[7,28] 0.488 0.480 0.0869 0.0849 0.359 0.644 1.00 5325. 3745. -#> 4 n_smooth[7,24] 0.528 0.520 0.0965 0.0947 0.385 0.694 1.00 5137. 3545. -#> 5 n_smooth[7,23] 0.548 0.541 0.101 0.0992 0.400 0.718 1.00 5053. 3197. -#> 6 n_smooth[9,35] 0.251 0.245 0.0470 0.0444 0.183 0.335 1.00 4546. 3433. -#> 7 n_smooth[7,27] 0.494 0.487 0.0888 0.0866 0.361 0.649 1.00 5348. 3780. -#> 8 n_smooth[12,54] 0.103 0.0963 0.0400 0.0338 0.0539 0.174 1.00 4279. 3348. -#> 9 n_smooth[14,10] 25.0 25.0 1.69 1.71 22.4 27.9 1.00 4870. 3670. -#> 10 n_smooth[12,53] 0.0984 0.0926 0.0354 0.0297 0.0545 0.163 1.00 4317. 3549. -#> # ℹ 1,365 more rows +#> # A tibble: 1,425 × 10 +#> variable mean median sd mad q5 q95 rhat ess_bulk ess_tail +#> +#> 1 n_smooth[21,25] 33.6 33.6 1.33 1.32 31.5 35.8 1.00 5881. 2893. +#> 2 n_smooth[20,16] 13.8 13.8 0.998 1.01 12.2 15.5 1.00 4369. 3568. +#> 3 n_smooth[20,15] 12.8 12.7 0.926 0.935 11.3 14.3 1.00 4363. 3713. +#> 4 n_smooth[18,27] 8.93 8.89 0.743 0.720 7.80 10.2 1.00 4850. 3204. +#> 5 n_smooth[24,33] 36.4 36.3 2.26 2.21 32.7 40.2 1.00 5138. 3663. +#> 6 n_smooth[18,29] 8.70 8.66 0.690 0.668 7.62 9.91 1.00 4999. 3353. +#> 7 n_smooth[16,51] 19.1 19.0 1.60 1.59 16.6 21.9 1.00 4498. 3746. +#> 8 n_smooth[18,28] 8.78 8.74 0.714 0.696 7.68 10.0 1.00 5024. 3182. +#> 9 n_smooth[16,50] 20.6 20.5 1.67 1.65 18.0 23.6 1.00 4430. 3747. +#> 10 n_smooth[21,23] 34.5 34.5 1.40 1.36 32.3 36.9 1.00 5757. 3643. +#> # ℹ 1,415 more rows ``` ### Indices - predictions of annual relative abundance @@ -589,7 +643,7 @@ allow it (e.g., `region = "country"` for the stratifications `bbs_usgs`, `bbs_cws`, or `prov_state`). -```r +``` r i <- generate_indices(model_output = m) #> Processing region continent #> Processing region stratum @@ -599,32 +653,31 @@ We can explore or extract these indices for saving as an external file (e.g., export to .csv), by accessing the `indices` item in the list. -```r +``` r i[["indices"]] -#> # A tibble: 1,430 × 17 -#> year region region_type strata_included strata_excluded index index_q_0.025 index_q_0.05 -#> -#> 1 1967 continent continent US-AR-24 ; US-… "" 12.7 11.4 11.6 -#> 2 1968 continent continent US-AR-24 ; US-… "" 12.8 11.7 11.9 -#> 3 1969 continent continent US-AR-24 ; US-… "" 13.0 12.0 12.2 -#> 4 1970 continent continent US-AR-24 ; US-… "" 13.1 12.1 12.3 -#> 5 1971 continent continent US-AR-24 ; US-… "" 12.9 12.1 12.3 -#> 6 1972 continent continent US-AR-24 ; US-… "" 12.8 12.0 12.1 -#> 7 1973 continent continent US-AR-24 ; US-… "" 11.6 10.9 11.0 -#> 8 1974 continent continent US-AR-24 ; US-… "" 10.9 10.3 10.4 -#> 9 1975 continent continent US-AR-24 ; US-… "" 10.3 9.62 9.72 -#> 10 1976 continent continent US-AR-24 ; US-… "" 9.37 8.78 8.87 -#> # ℹ 1,420 more rows -#> # ℹ 9 more variables: index_q_0.25 , index_q_0.75 , index_q_0.95 , -#> # index_q_0.975 , obs_mean , n_routes , n_routes_total , -#> # n_non_zero , backcast_flag +#> # A tibble: 1,482 × 17 +#> year region region_type strata_included strata_excluded index index_q_0.025 index_q_0.05 index_q_0.25 +#> +#> 1 1967 continent continent US-AR-24 ; US-AR-25 ; … "" 13.1 11.7 11.9 12.6 +#> 2 1968 continent continent US-AR-24 ; US-AR-25 ; … "" 12.9 11.8 12.0 12.5 +#> 3 1969 continent continent US-AR-24 ; US-AR-25 ; … "" 12.9 12.0 12.1 12.6 +#> 4 1970 continent continent US-AR-24 ; US-AR-25 ; … "" 12.9 12.1 12.2 12.6 +#> 5 1971 continent continent US-AR-24 ; US-AR-25 ; … "" 12.9 12.0 12.1 12.6 +#> 6 1972 continent continent US-AR-24 ; US-AR-25 ; … "" 12.8 12.0 12.1 12.5 +#> 7 1973 continent continent US-AR-24 ; US-AR-25 ; … "" 11.7 11.0 11.1 11.5 +#> 8 1974 continent continent US-AR-24 ; US-AR-25 ; … "" 11.0 10.3 10.5 10.8 +#> 9 1975 continent continent US-AR-24 ; US-AR-25 ; … "" 10.3 9.67 9.77 10.1 +#> 10 1976 continent continent US-AR-24 ; US-AR-25 ; … "" 9.35 8.76 8.85 9.14 +#> # ℹ 1,472 more rows +#> # ℹ 8 more variables: index_q_0.75 , index_q_0.95 , index_q_0.975 , obs_mean , n_routes , +#> # n_routes_total , n_non_zero , backcast_flag ``` ### Trajectory plots We can also generate time-series plots of these indices to visualize population trajectories. -```r +``` r # generates a list of ggplot graphs, one for each region p <- plot_indices(indices = i, add_observed_means = TRUE) # optional argument to show raw observed mean counts @@ -634,29 +687,28 @@ Note that we get one plot for each region and regional category, in this case that means one plot for the continent, and one for each stratum. -```r +``` r names(p) -#> [1] "continent" "US_AR_24" "US_AR_25" "US_AR_26" "US_KS_18" "US_KS_19" "US_KS_22" -#> [8] "US_LA_25" "US_LA_37" "US_MO_22" "US_MO_24" "US_NM_18" "US_NM_35" "US_OK_18" -#> [15] "US_OK_19" "US_OK_21" "US_OK_22" "US_OK_25" "US_TX_18" "US_TX_19" "US_TX_20" -#> [22] "US_TX_21" "US_TX_25" "US_TX_35" "US_TX_36" "US_TX_37" +#> [1] "continent" "US_AR_24" "US_AR_25" "US_AR_26" "US_KS_18" "US_KS_19" "US_KS_22" "US_LA_25" "US_LA_37" +#> [10] "US_MO_22" "US_MO_24" "US_NM_18" "US_NM_35" "US_OK_18" "US_OK_19" "US_OK_21" "US_OK_22" "US_OK_25" +#> [19] "US_TX_18" "US_TX_19" "US_TX_20" "US_TX_21" "US_TX_25" "US_TX_35" "US_TX_36" "US_TX_37" ``` We can plot them individually by pulling a plot out of the list -```r +``` r print(p[["continent"]]) ``` -Population trajectory graph, showing the estimated annual relative abundances, their associated 95% credible intervals, and points representing the raw mean observed counts. +Population trajectory graph, showing the estimated annual relative abundances, their associated 95% credible intervals, and points representing the raw mean observed counts. Each of these plots is a [ggplot2](https://github.com/tidyverse/ggplot2) object that can be modified like any other. For example, you can modify titles or axes. -```r +``` r library(ggplot2) p1_mod <- p[["continent"]]+ @@ -665,7 +717,22 @@ p1_mod <- p[["continent"]]+ print(p1_mod) ``` -Population trajectory graph, modified to show only the last 20 years of the time-series and remove the title +Population trajectory graph, modified to show only the last 20 years of the time-series and remove the title + +#### Spaghetti plots to show uncertainty in population trajectories + +The most common inference to draw from one of these BBS models relates to the estimates of the population trajectory. One particularly useful way to visualise the uncertainty of those population trajectories is to plot many posterior draws of the full trajectory. The default population trajectories plots `plot_indices()` show a line representing the path of the annual posterior medians of the annual indices and an uncertainty band spanning the outer limits of a credible interval on the annual indices. These are reasonable summaries of the uncertainty in the collection of annual indices. However, the uncertainty of each annual index of abundance includes information about the uncertainty in the estimate of the change in abundance through time (e.g., trend) and uncertainty in the estimate of the mean abundance (e.g., the mean count in any given route or observer). Those two sources of uncertainty can be correlated in the posterior distribution, so that the uncertainty of the annual indices may over-estimate the uncertainty in the trend. +To plot a sample of estimated trajectories, set the `spaghetti = TRUE` argument in the `plot_indices()` function. + +``` r +# generates a list of ggplot graphs, one for each region +p <- plot_indices(indices = i, + add_observed_means = TRUE) +print(p[["continent"]]) +``` + +![plot of chunk unnamed-chunk-38](vignettes/articles/figures/bbsBayes2_unnamed-chunk-38-1.png) +There are arguments that also allow the user to control the transparency of each plotted line, as well as the number of lines to plot (the default is to draw 100 random samples). ### Trends - predictions of mean rates of change over time @@ -674,7 +741,7 @@ all trends from bbsBayes2 models are derived from summaries of indices through time or between two points in time. -```r +``` r t <- generate_trends(i) ``` @@ -682,60 +749,58 @@ We can explore or extract these trends for saving as an external file (e.g., export to .csv), by accessing the `trends` item in the list. -```r +``` r t[["trends"]] #> # A tibble: 26 × 27 -#> start_year end_year region region_type strata_included strata_excluded trend trend_q_0.025 -#> -#> 1 1967 2021 conti… continent US-AR-24 ; US-… "" -1.09 -1.34 -#> 2 1967 2021 US-AR… stratum US-AR-24 "" 4.58 3.09 -#> 3 1967 2021 US-AR… stratum US-AR-25 "" 0.0864 -0.664 -#> 4 1967 2021 US-AR… stratum US-AR-26 "" 4.88 2.54 -#> 5 1967 2021 US-KS… stratum US-KS-18 "" 2.64 -1.87 -#> 6 1967 2021 US-KS… stratum US-KS-19 "" -0.528 -1.32 -#> 7 1967 2021 US-KS… stratum US-KS-22 "" -0.199 -0.936 -#> 8 1967 2021 US-LA… stratum US-LA-25 "" -1.70 -3.45 -#> 9 1967 2021 US-LA… stratum US-LA-37 "" 0.357 -2.01 -#> 10 1967 2021 US-MO… stratum US-MO-22 "" -0.327 -2.64 +#> start_year end_year region region_type strata_included strata_excluded trend trend_q_0.025 trend_q_0.05 +#> +#> 1 1967 2023 continent continent US-AR-24 ; US-AR-25… "" -0.874 -1.11 -1.07 +#> 2 1967 2023 US-AR-24 stratum US-AR-24 "" 4.41 3.10 3.33 +#> 3 1967 2023 US-AR-25 stratum US-AR-25 "" 0.214 -0.553 -0.411 +#> 4 1967 2023 US-AR-26 stratum US-AR-26 "" 4.65 2.78 3.06 +#> 5 1967 2023 US-KS-18 stratum US-KS-18 "" 2.81 -1.36 -0.700 +#> 6 1967 2023 US-KS-19 stratum US-KS-19 "" -0.538 -1.31 -1.19 +#> 7 1967 2023 US-KS-22 stratum US-KS-22 "" -0.0272 -0.701 -0.615 +#> 8 1967 2023 US-LA-25 stratum US-LA-25 "" -1.25 -2.85 -2.56 +#> 9 1967 2023 US-LA-37 stratum US-LA-37 "" 0.320 -1.81 -1.49 +#> 10 1967 2023 US-MO-22 stratum US-MO-22 "" -0.356 -2.43 -2.08 #> # ℹ 16 more rows -#> # ℹ 19 more variables: trend_q_0.05 , trend_q_0.25 , trend_q_0.75 , -#> # trend_q_0.95 , trend_q_0.975 , percent_change , -#> # percent_change_q_0.025 , percent_change_q_0.05 , percent_change_q_0.25 , +#> # ℹ 18 more variables: trend_q_0.25 , trend_q_0.75 , trend_q_0.95 , trend_q_0.975 , +#> # percent_change , percent_change_q_0.025 , percent_change_q_0.05 , percent_change_q_0.25 , #> # percent_change_q_0.75 , percent_change_q_0.95 , percent_change_q_0.975 , -#> # width_of_95_percent_credible_interval , rel_abundance , obs_rel_abundance , -#> # n_routes , mean_n_routes , n_strata_included , backcast_flag +#> # width_of_95_percent_credible_interval , rel_abundance , obs_rel_abundance , n_routes , +#> # mean_n_routes , n_strata_included , backcast_flag ``` We can generate trends for different periods of time, using any combination of a starting year `min_year` and ending year `max_year`. -```r +``` r t_10 <- generate_trends(i, min_year = 2011, max_year = 2021) t_10 #> $trends #> # A tibble: 26 × 27 -#> start_year end_year region region_type strata_included strata_excluded trend trend_q_0.025 -#> -#> 1 2011 2021 contin… continent US-AR-24 ; US-… "" -2.39 -3.21 -#> 2 2011 2021 US-AR-… stratum US-AR-24 "" 2.23 -1.56 -#> 3 2011 2021 US-AR-… stratum US-AR-25 "" -0.449 -3.07 -#> 4 2011 2021 US-AR-… stratum US-AR-26 "" 3.87 -2.70 -#> 5 2011 2021 US-KS-… stratum US-KS-18 "" 5.19 -3.53 -#> 6 2011 2021 US-KS-… stratum US-KS-19 "" 1.16 -2.15 -#> 7 2011 2021 US-KS-… stratum US-KS-22 "" -4.42 -6.92 -#> 8 2011 2021 US-LA-… stratum US-LA-25 "" -2.92 -10.1 -#> 9 2011 2021 US-LA-… stratum US-LA-37 "" 3.84 -4.79 -#> 10 2011 2021 US-MO-… stratum US-MO-22 "" 2.76 -5.91 +#> start_year end_year region region_type strata_included strata_excluded trend trend_q_0.025 trend_q_0.05 +#> +#> 1 2011 2021 continent continent US-AR-24 ; US-AR-25… "" -2.00 -2.71 -2.61 +#> 2 2011 2021 US-AR-24 stratum US-AR-24 "" 1.94 -1.19 -0.648 +#> 3 2011 2021 US-AR-25 stratum US-AR-25 "" -0.411 -2.85 -2.46 +#> 4 2011 2021 US-AR-26 stratum US-AR-26 "" 3.18 -2.08 -0.996 +#> 5 2011 2021 US-KS-18 stratum US-KS-18 "" 4.08 -2.35 -1.24 +#> 6 2011 2021 US-KS-19 stratum US-KS-19 "" 0.982 -2.07 -1.60 +#> 7 2011 2021 US-KS-22 stratum US-KS-22 "" -3.95 -6.37 -5.92 +#> 8 2011 2021 US-LA-25 stratum US-LA-25 "" -2.19 -8.99 -7.78 +#> 9 2011 2021 US-LA-37 stratum US-LA-37 "" 1.43 -4.89 -3.92 +#> 10 2011 2021 US-MO-22 stratum US-MO-22 "" 0.0656 -6.34 -5.38 #> # ℹ 16 more rows -#> # ℹ 19 more variables: trend_q_0.05 , trend_q_0.25 , trend_q_0.75 , -#> # trend_q_0.95 , trend_q_0.975 , percent_change , -#> # percent_change_q_0.025 , percent_change_q_0.05 , percent_change_q_0.25 , +#> # ℹ 18 more variables: trend_q_0.25 , trend_q_0.75 , trend_q_0.95 , trend_q_0.975 , +#> # percent_change , percent_change_q_0.025 , percent_change_q_0.05 , percent_change_q_0.25 , #> # percent_change_q_0.75 , percent_change_q_0.95 , percent_change_q_0.975 , -#> # width_of_95_percent_credible_interval , rel_abundance , obs_rel_abundance , -#> # n_routes , mean_n_routes , n_strata_included , backcast_flag +#> # width_of_95_percent_credible_interval , rel_abundance , obs_rel_abundance , n_routes , +#> # mean_n_routes , n_strata_included , backcast_flag #> #> $meta_data #> $meta_data$stratify_by @@ -754,19 +819,19 @@ t_10 #> [1] "spatial" #> #> $meta_data$model_file -#> [1] "C:/Users/SmithAC/AppData/Local/R/win-library/4.2/bbsBayes2/models/gamye_spatial_bbs_CV.stan" +#> [1] "C:/Users/SmithAC/AppData/Local/Programs/R/R-4.4.1/library/bbsBayes2/models/gamye_spatial_bbs_CV.stan" #> #> $meta_data$run_date -#> [1] "2023-02-13 07:24:57 EST" +#> [1] "2024-09-28 18:05:30 EDT" #> #> $meta_data$bbsBayes2_version -#> [1] "1.0.0" +#> [1] "1.1.2" #> #> $meta_data$cmdstan_path -#> [1] "C:/Users/SmithAC/Documents/.cmdstan/wsl-cmdstan-2.30.1" +#> [1] "//wsl$/Ubuntu/home/smithac/.cmdstan/cmdstan-2.35.0" #> #> $meta_data$cmdstan_version -#> [1] "2.30.1" +#> [1] "2.35.0" #> #> $meta_data$regions #> [1] "continent" "stratum" @@ -775,7 +840,16 @@ t_10 #> [1] 1967 #> #> $meta_data$n_years -#> [1] 55 +#> [1] 57 +#> +#> $meta_data$hpdi_indices +#> [1] FALSE +#> +#> $meta_data$hpdi_trends +#> [1] FALSE +#> +#> $meta_data$gam_smooth_trends +#> [1] FALSE #> #> #> $meta_strata @@ -795,23 +869,22 @@ t_10 #> # ℹ 15 more rows #> #> $raw_data -#> # A tibble: 12,626 × 23 -#> country_num state_num state rpid bcr year strata_name route obs_n count n_routes -#> -#> 1 840 7 ARKANSAS 101 24 1967 US-AR-24 7-20 1190020 0 12 -#> 2 840 7 ARKANSAS 101 24 1968 US-AR-24 7-20 1190020 0 12 -#> 3 840 7 ARKANSAS 101 24 1969 US-AR-24 7-20 1190020 0 12 -#> 4 840 7 ARKANSAS 101 24 1970 US-AR-24 7-20 1190020 0 12 -#> 5 840 7 ARKANSAS 101 24 1971 US-AR-24 7-20 1190020 0 12 -#> 6 840 7 ARKANSAS 101 24 1972 US-AR-24 7-20 1190020 0 12 -#> 7 840 7 ARKANSAS 101 24 1973 US-AR-24 7-20 1190020 0 12 -#> 8 840 7 ARKANSAS 101 24 1974 US-AR-24 7-20 1190020 0 12 -#> 9 840 7 ARKANSAS 101 24 1975 US-AR-24 7-20 1190020 0 12 -#> 10 840 7 ARKANSAS 101 24 1976 US-AR-24 7-20 1190020 0 12 -#> # ℹ 12,616 more rows -#> # ℹ 12 more variables: non_zero_weight , first_year , max_n_routes_year , -#> # n_obs , mean_obs , year_num , strata , observer , site , -#> # obs_route , obs_site , n_obs_sites +#> # A tibble: 13,250 × 23 +#> country_num state_num state rpid bcr year strata_name route obs_n count n_routes non_zero_weight first_year +#> +#> 1 840 7 ARKAN… 101 24 1967 US-AR-24 7-20 1.19e6 0 12 1 1 +#> 2 840 7 ARKAN… 101 24 1968 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 3 840 7 ARKAN… 101 24 1969 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 4 840 7 ARKAN… 101 24 1970 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 5 840 7 ARKAN… 101 24 1971 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 6 840 7 ARKAN… 101 24 1972 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 7 840 7 ARKAN… 101 24 1973 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 8 840 7 ARKAN… 101 24 1974 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 9 840 7 ARKAN… 101 24 1975 US-AR-24 7-20 1.19e6 0 12 1 0 +#> 10 840 7 ARKAN… 101 24 1976 US-AR-24 7-20 1.19e6 0 12 1 0 +#> # ℹ 13,240 more rows +#> # ℹ 10 more variables: max_n_routes_year , n_obs , mean_obs , year_num , strata , +#> # observer , site , obs_route , obs_site , n_obs_sites ``` ### Trend maps - visualizing the spatial variation in trends @@ -820,19 +893,19 @@ We can plot trend estimates on a map to visualise the spatial patterns in population change. -```r +``` r trend_map <- plot_map(t) print(trend_map) ``` -Population trend map showing strata with increasing trends in blues and decreasing trends in reds. +Population trend map showing strata with increasing trends in blues and decreasing trends in reds. The maps are also [ggplot2](https://github.com/tidyverse/ggplot2) objects that can be modified like any other. For example, you can zoom into a section of the map. -```r +``` r library(ggplot2) # Get the meta data in trend object - strata information @@ -847,37 +920,37 @@ data_bounding_box <- load_map(stratify_by = t$meta_data$stratify_by) %>% t_mod <- trend_map + coord_sf(xlim = data_bounding_box[c("xmin","xmax")], ylim = data_bounding_box[c("ymin","ymax")]) +#> Coordinate system already present. Adding new coordinate system, which will replace the existing one. print(t_mod) ``` -Population trend map zoomed in to show just the relevant regions +Population trend map zoomed in to show just the relevant regions ### Barn Swallow example A model with a suitable number of iterations takes a long time to run -(the Barn Swallow model, a species with many data and many strata, took +(the Barn Swallow model, a species with many counts, years and strata, took 54 hours). -You can download a zip-file with a saved model output for Barn Swallow here: +You can download an example of the saved model output for Barn Swallow here: [An example of the output from applying the spatial gamye model to Barn -Swallow data](https://drive.google.com/file/d/1RNbM312_isopRN7Lb-jP1-wK4UvRKkHE/view?usp=sharing). +Swallow data](https://drive.google.com/file/d/1jFzzoJel6B2bg6yOmhMHnGTxkLaTRaRn/view?usp=sharing). -Unzip the file and store it in a local directory. In this example we've placed it in a sub-directory of our working directory called *output*. Let's take a look at the spatial GAMYE model for the Barn Swallow. First we load the data -```r +``` r BARS <- readRDS("output/Barn_Swallow_gamye_spatial.rds") ``` We can investigate the model meta data -```r +``` r BARS$meta_data #> $stratify_by #> [1] "bbs_cws" @@ -912,7 +985,7 @@ BARS$meta_data See the length of the run in seconds or hours -```r +``` r BARS$model_fit$time() #> $total #> [1] 197011.7 @@ -929,7 +1002,7 @@ BARS$model_fit$time()$total/3600 Now create the indices and trends -```r +``` r BARS_indices <- generate_indices(BARS) #> Processing region continent @@ -943,7 +1016,7 @@ BARS_continent <- BARS_index_plots[["continent"]] print(BARS_continent) ``` -Population trajectory graph for Barn Swallow, showing the estimated annual relative abundances, their associated 95% credible intervals, and points representing the raw mean observed counts. +Population trajectory graph for Barn Swallow, showing the estimated annual relative abundances, their associated 95% credible intervals, and points representing the raw mean observed counts. ### Smoothed population trajectories - gamye model @@ -965,7 +1038,7 @@ model applied to a short time-frame (it's probably unlikely that a linear smooth is reasonable for long periods of time). -```r +``` r BARS_smooth_indices <- generate_indices(BARS, alternate_n = "n_smooth") #> Processing region continent @@ -975,14 +1048,14 @@ BARS_trend_map <- plot_map(BARS_trends) BARS_trend_map ``` -Population trend map for Barn Swallow, showing strata with increasing trends in shades of blue and strata with decreasing trends in shades of red +Population trend map for Barn Swallow, showing strata with increasing trends in shades of blue and strata with decreasing trends in shades of red ### Modifying base plots We can also add the smoothed annual indices to the plots of the full annual indices from above, taking advantage of the [ggplot2](https://github.com/tidyverse/ggplot2) functions such as `geom_line()`. -```r +``` r library(ggplot2) smooth_cont_indices <- BARS_smooth_indices$indices %>% @@ -998,7 +1071,7 @@ BARS_continent_both <- BARS_continent + print(BARS_continent_both) ``` -Population trajectory graph for Barn Swallow, same as above plus the smoothed annual indices are added as a grey line +Population trajectory graph for Barn Swallow, same as above plus the smoothed annual indices are added as a grey line Check out the other articles to explore more advanced usage or the [function reference](../reference/) to see what functions diff --git a/vignettes/articles/bbsBayes2.Rmd.orig b/vignettes/articles/bbsBayes2.Rmd.orig index d339d57..b92252a 100644 --- a/vignettes/articles/bbsBayes2.Rmd.orig +++ b/vignettes/articles/bbsBayes2.Rmd.orig @@ -155,7 +155,7 @@ fetch_bbs_data() # Default - most recent release fetch_bbs_data(release = "2020") # Specify a different release ``` -```{r, echo = FALSE, eval = !have_bbs_data()} +```{r, echo = FALSE, eval = FALSE} fetch_bbs_data() ``` @@ -179,7 +179,7 @@ example, the output of `stratify()` is required input for Functions which are connected by a **solid, grey** arrow, indicate that the output of the first function is *optional* input to the second. For -example, the output of `grenerate_trends()` is an option input for +example, the output of `generate_trends()` is an option input for `plot_geofacet()`. Functions which are connected by a **dotted** arrow indicate that the @@ -193,8 +193,9 @@ which can be modified by the user and then used as input to See the [Function Reference](../reference) for more details on how to use a particular function. +![Workflow diagram demonstrating the steps, ordering, and dependencies of the key functions within the bbsBayes2 package](figures/workflow_diagram.png) -```{r, echo = FALSE, fig.cap = "", fig.alt = "", fig.width = 8, fig.asp = 1.5} +```{r, eval = FALSE, echo = FALSE, fig.cap = "", fig.alt = "", fig.width = 8, fig.asp = 1.5} library(DiagrammeR) grViz("digraph functions { @@ -418,8 +419,40 @@ print(sp$spatial_data$map) ## Workflow to explore the model outputs {#explore_output} If you would prefer to skip the model fitting steps for now, you can -[download a fitted model](https://drive.google.com/file/d/1zF8xOIn_ZuORmjNDHAu5YCJjIx4j-MHC/view?usp=drive_link) object (the output of `run_model()` function) -and test out the remaining package features. +[download a fitted model](https://drive.google.com/file/d/14SYabzAj_3IGmbBB-y0NZfBngKytiR0x/view?usp=sharing) object (the output of the code below) and test out the remaining package features. + +```{r, eval = FALSE} +library(bbsBayes2) +library(tidyverse) + +species <- "Scissor-tailed Flycatcher" + +# extract the unique numerical identifier for this species in the BBS database +species_number <- search_species(species) %>% + select(aou) %>% + unlist() + +mod <- "gamye" +var <- "spatial" + +out_name <- paste0("output/", + species_number, + "_", + mod, + "_", + var) + +d <- stratify("bbs_usgs", + species = species) %>% + prepare_data() %>% + prepare_spatial(s, strata_map = load_map("bbs_usgs")) %>% + prepare_model(model = mod, model_variant = var) + +m <- run_model(d, + output_basename = out_name, + output_dir = getwd()) # by default saves the model output using output_basename + +``` The outputs of the collection of functions required to fit a model are cumulative: each one retains the metadata from the previous step. As a @@ -640,15 +673,14 @@ print(t_mod) ### Barn Swallow example A model with a suitable number of iterations takes a long time to run -(the Barn Swallow model, a species with many data and many strata, took +(the Barn Swallow model, a species with many counts, years and strata, took 54 hours). -You can download a zip-file with a saved model output for Barn Swallow here: +You can download an example of the saved model output for Barn Swallow here: [An example of the output from applying the spatial gamye model to Barn -Swallow data](https://drive.google.com/file/d/1RNbM312_isopRN7Lb-jP1-wK4UvRKkHE/view?usp=sharing). +Swallow data](https://drive.google.com/file/d/1jFzzoJel6B2bg6yOmhMHnGTxkLaTRaRn/view?usp=sharing). -Unzip the file and store it in a local directory. In this example we've placed it in a sub-directory of our working directory called *output*. Let's take a look at the spatial GAMYE model for the Barn Swallow. diff --git a/vignettes/articles/figures/advanced_unnamed-chunk-10-1.png b/vignettes/articles/figures/advanced_unnamed-chunk-10-1.png index 897714ff02597934a610f6653402744da5d97bc5..5c568e812422ab61abfc22ea8d0ddca27a988f3a 100644 GIT binary patch literal 39993 zcmeFZ^;cBy7cfevbc3{n%+M)_NH>zhp@&f#q&tTWK}1SIq+Ke6|IV#k~$Ljz3;GFCDi92^R5Ej42t90C*$4nCR$ zAA5&3#H$ep2am!~&r}`z69-2g2geadULHpti_>u&9dR66go4t9vJ*jJsi5#wP(~6s z<`p>Z6*xXc*e^}QFHOulRo3wpmJCbtAKibKqr82JyrZMMW4gR!i+p;zd^#4-E7+tc z*rq(TOnz*Y{Mb5K(LDKyS<(|oveL7pr`m~6brPTIB|gmYNKn>HP}WLR zQHoZ18l$2dtD+L8Dj%V$5TW`wQdJSI`UDHns!GvnxTb1E5H%umHDYr$=^!=fU^ST# zHQ5lgM`3D@!qwy>)X4yK3QKhwYjt{Cbp|_iMmu#Ts5*=KU<)8Kd45Ws?mhM5l1G zXmL!RcWh~KY{B9?zfmAv9w*&VJ{?<(W!`_~>FF)=>GN2)YjMPBag=XK$AaU3x3NSm zSUle{kA=IIyOx%_`Ifu8p+&{{bou#o$N3g4q|alY_^$#izQaC+Me}!eJ3Bi!8+_Or z@8;A0Bl_N(acw;eKJ3w%q)#~Eabr% zauG6g(Gu@vj|igc7T=!!TapVsJK#ign4j%0DvjCLSsg6;{##rK|M&Bz&8^mUAzZov z0AsZMngj6xFk^}k5o5}Ld@3{c`;HV0+5jM@65#`|1_R#zTkwBb^8X)YxCaE*HAP%o zc}nG6w=Q)m=KOsgc^EiNzQ5ERqJGz*V^0%U&vE(Qd9ug$$+vk?J4GY2Upoiym56=5 zT8$82A9`-(oQ>LqHkD6$WN^CFu2E#P?tMl?Txl<9ZkPT0Q_Q#6t^e-UDwrc zIB!_t^x2)?lLPihd)CX}3awqU%ZDg#q<$7LW@e^u$qjT?Tc6Lfs2k?2iNDif{<;ZA zH(K!JludYo?XjIFDfsja#+4ogk)i^5-~Q2?>g|ZMQ}R3*u&b1cw635-26VBPksICI&1NA5N36=C;OHC6B|n9A#}k7AH#mL8y{z@`1tPP_I5Vw zf-&Gk->*^tRhAc(HIe*>dqyM@-yhq8==;`-O!F+^``u$whuZ=hG7)zzm)SYwJ$$w! z(S57-ssI~^9BgkZrC8_76!h&{2fUJt)`@Z!QD1y;GaGRGvtz+w;Q_QOVxF~razQrI zY=84$F0!!t52;Owpw<$ZKbJg*RBUrI8QN7UVxjWAdq@Epz}Q!Fa@A_2>W+L#iCVmz z`U&c&&1YN;4{f<7XX`fDu5&2{4?Vem-mv0P)WYB;rG>FN19`qzM40g&r}R+&X7saN|HQ&k@v<4ojfnQ&L|F%)gQiq z-nt*}ReeiypE>@jLbI}K_tI>>D{P~Ht;Y36!#c%RQ($?+dO^a&cbx2H>xI@2O;lWv zgF-o>>`;<@(x;Cu7AN8T83GP@3E`N)9jmHtwKaP&%kG4;>n?kjptA#_0Mm1MzJ#%} zSp9(UpokSJL%;v^o(ArJ(2^#ot9ntalph(smU^*sbztTf9;%b~EYRg|eM&n!mn?70pHsz5 z&WkEt=f%AKy`KQF*L`ecWt!(#%w3m8KwB3#IiZX&1cuCXYoPu2TK^G4NmWBMj((tG+W@t=z1lrErO<4SJ3_Si>DZb{HfPm zsGr?Av7?krHz!cMa(++J2ATXvr08byYg_4d_-TL_#IM8TNshS|@DIPz>x_s6`pxsM z(50&D-F`Xz9_sI(<)RrbWfV?0GxB!qN+`NRROiylzCTHcY1u9MPb1$8I<)csW&(r} z_;Vq(v}*G??keQ3SFqZEuS54U;S1SQ_Pa}^>RBQFaB~ZS-s%+H@PUgn(wXcF>HzPG zUmp@X#8I|JIk1I=dU^J~?-QK@@-1Ere-;m0?Y@LJ#o@n}H_xMVVZ9n+d%3r1F}Y`e z0}|@bWS`zz;35a#1f19EiEHt1ESMe}7n!kV2Qr5H(?{3?M+B#OlSIw|D09o8n0u(s_!0``{Xx*ypYkV&<}@3b1zsG`r>o-;PP%{Z8uxl<9Tqys z^0y-oF69DVHJ2wRl^Tc~F5RB?v>z4mvsr8Q7Es;REBSvAa4%}Li`Z1^0Y~J05eJ)H z?>wdnEEA5mdzHh6J@$YW{yeO~%6lx*hx1)Wf8@nwZJaU|c~6bmmccODL~DCkwjd41|r_{w@z;8#b;+JPN|()v%W>J>YI zs1NVG*I*CV3`vltmiTjjP}^&L)nRE?cieKg;{>E3wUmEGKAfFdS3TZlSTAIdW+#SB zys!x{wDiMr4AvP-LF%AM`sP25Nwck+o%3d&TQ4s3cn0%~w*K|kuFr2Wybshb{cHGw zo_iMeq2qG(>M65L>+R=O+j;`bgQMsixBjB3j^nMsjiT@MPj%Jdan{JV`zk4$l;A=- zYD$4+ru$UDB*h#DuyT;%bI;^8uOxy(7hE}1E z1akdORlR5m$KNWiRoe0rapXA+ac+1{ttpPYkE#*} zSKgK%8red+e@uA3f&p{JBwhMssB0B#Xj{3utRP*VkbaOLE{I_*|L#XsO2+HlrIjj% z^99jxwus^}{U#R4OWC`ic5bAHS|e)LF5lb*eZ)h&z59;;&WQGRapcb3`l(K;CMoBD zNWcym6@w<}$CvJg{wvE;CQnSCeSG-+Y(mWQvCig<$9~mIx)4SNAcC9nUf1`G(%2fk z$V{<(`S*m7qmRi-GWGfQe6DGHU-TsZ-JdVRzgf7dp9=Z?npcB!8CPa(2rJBWy}-cu z-W~H>)7lpsJ-+^@6jrf1t!<|-*V$~hlxno9jndLzdBrkW4J7E%$RAdd0m?H;2~)Wg zH3#7O0sT;NS&iM8NX>7!M&w09^Q#p?irgvcVa1K16D~+aI$qnmQ=KSQl))90|}N_e>|me4l9T z-um{2RD>cE2V--kURq>!`)2YF=WXJ}*@U*+-~C&~cTvaL2J;klm432olk>Mn5|jTO za8k{N`!Yrjw&3p*?ruEBziI{EVjJUo>|TOrF5my+c&*gf?B}Aj%Ktk1^1aZC{UbAj zy8bgY79e7#I^p;;dk_4rtudwMkoBm-^ovKUmsQ6-;%zs_aHZ7=1(55dqLnR>FZ@8n zDw}bU3m>e=Jt1yhs#{u*gP;A}VuW;GJ|(iZuNNbD262sc%S|zYAW?dfVbrRsL4dL&r?FF zZOhfhECBMA4%#wAaMO<8A(FYYZ_o5km&TipdB$fa%`VTP>^tAQSWUtFD;KljSU|F= zB3vdYo-qyg!^+K)?MZFlb-P6vWZOcKZ?wB+!N#+{lFg4=e+X!hz-SBvDOslCn;gWx{2u;4XU7h9-QdJ%8ONZb(4b!1^<}A2$@TA>|$I>=1>#t+(c_cQX<71Ebq5W!HMWoZ9 zfLc|z6W5!&*UC@a35ooe3-DQEdF?_22G6J?1q7F#1*ZGUK$g!TMA>gHuRlM;p&2MO zS)n2OLY zrbQgTeMN^R%zh-^J$)y=Ol#ROM85ibzv6(~K%|P~KBqR)Hn1=ektW?JqNf_w{9W;@ z%>o_+hwsx6wpcO)Gjz@G z385F|9j*soesIc8G{+Yo#`3T z5QJw~R`5)@28NHU0W~2|^u%|t%~80qr1es%pSdC3(oZam?C8-wAs)3yIm$RPO)J0m z^j<<%(8X}GR1gs(IRguze^V^mNQ6VqGOs(0H`jnKI!r09insbzJewA+@|1|wxqN>U zu&wPlrTAoN!MkG|_bHZ?9H9^DJNUeVJ1!=1nNvUTfJ3iaI!kcs3^R--qukVi(FvPu zkko!UP0f)&0S$?anB;ww$n}2LT(r4~%-mju>N~wLm16lqo&G^wB?142YN~O<$vtSJ4hdDP+unI$(T-VWtsF|I47_8y(dc_|0E9G|%+P+pi3OwOLZ|}EBHUMe= zerPq<-R&6Wh5W2km69q>$aovUPi4)h<2Y^P@EVh|V6raMzM2dlIBFUh8?P%ilv*kA z8oxA{gsz>^V0`@PP*P@IzzihFF3XiU3Zznt%r6UXt&x4C*XBFg_NO+By_7>q6+YAY z_Yb#T2t##D%up{HX0b;Oc4E}6c^j9MWsDds-d-_R?6~{X&7{#fNDZ30HTpC>JKXLv z#{%d$hJi~|r4k*df2j&d6c!{&+Ehuy{1L%#eTf_YUC08oqp=O3kA|qvma52G0AHM@4(s?k+&^R zxPo(kYgLS!C7GrjLWE?ODR#V*tN!Y*0Jq;3iOh|fk@<)|JU5!h{0yv2@Vs^k2>nZ( zccoj5{mj~VPBfLq|8hsF(#8Izf9U;s@Q?Tdgu_BmAs$fui^u~b zXcka{;*8m1_|&mk;UMJoRI6~4A{5t{eeTuYg=tJIY?`WWb*_SWI*80R zzS?w)3o?k-p@fL+Y4+{9h+uSB%{$;RNdr2yTir_aD$onnILbJ*Mq@$URQPd~)V6<(mg(lAOKHykYvW5f1d6Ph z&@_EAE~$$AEzj;NDr;cnz>I<=NNHtHe9*xKJ>nE328-Q&iGguFEaJ@98=+`A_(H*t zNu9Ni*=K=jTdj!l>VD39ywd8%kfDPQN`E{3baxz6rYk-e;+0s*h(pp4foe3?|B9af zS|2E80FeU^@iV%KE-Rn0v(mQk^k#iQSVUgrXrV~lTZs*6g8cO@UNSN&W-{P{P{~dH z3|Y>jQg@9%D#*zCzFaq=^T4Qr<0L!Z$N#6A@_>lNPb}W#J~YUmowP@(G*kBMRLEic z#x6L?UhEW$F~4^M?z6egB<@O)fjQb#^N_4}@_SqFosxH0zqQTLu<0S$>ed98yN6Wn ztH=tN;JRr*!pbEDH!K_+E((=32YqXslqAu^^pgZgHHhjhuLkDe!`<=a1GP%!1#3e%+`SAGw!9TnGJ_2cVLX5^j zZ`1tm%P<**d;nRPiHk|oVC)60GK8R$^^j65$wLysIcvp{RDehWEN|_8b5m&oE@XdH-hJHAT zY#mQ%z~h}eD$Ti)eiBLW;L-d z5{Hp$mYpiZ=b>Su`+CLB{f!U)N0TYnPK+{4_$!{@L;wvs&6yr^>r)%?%w_jxf3F9o z>*9Ha{OvU7s`C^n7Nq@V^)OWVnhqx=$^Wg{sNWJCkVA1yp(V6|OXBLJfH3_o8lI7G zi=24%Cw_aHvo=~2`p7)fAFt4N`p=|!oZi+UBe2JKS%8=T5^X*_h?oEUH(?{1#zqvv@!81KD$ig9%#gh)IsdNs^jJ3PH0q7{F~yEk%=AER$J+&kC8U^^2G zwGiS9&Z2N7jL5y#W*!|En32b#)`7CX6|K*se2cw`iK5dBdfrx#)kFDpdofwfp;qxH2Xcak5| zZ88^pSM64LOvI6&{;Vjt&Lk#3n|9|Ya>(_%+qO`6ScvgLrFY;lzA-oJr!5XVNFAC+ z)hB7=u*1#jz@2z2R8PAaSJpn#rWge}vXAx-A8w0hIg8@~vy%!YyIgG`JcDwDSaus+ zq|S^Go(IW(%O7vrT7nj>67t zaGPAZf3D-qe6}Yr#scAwe2i2XT3{>PS!Y}!={+vymvq+LonOo|0U|%^XotkTd)jU- z)HF7^T(kGxC66_{HQKk@rIg z>zAsH7T=pJBT7<~4a=F1K+T4(fjFkpQ461S4PQ3Lf6MVdpadtI=Qbij!u?WYlGbQzjdx=j3v=cq?zsI_5zLJB(}xj?c(prrSnZHX4$J|Y^aG;|7c4S z(f05FiU{LT8=I(}dP!v6fblryg%_Pw>PC&IcZA_Qg6ZYN{Cs8IA}8J&~ zsJc4TgDG6}xP}Js`HU=+rt8N2JR%|seHi0vZ^3B{deT?X549rRpNGr~!Y{h|32a8t}1F2%-umI=uNn zN}AMRnld$VIHV-{a!)}Pg{Ia#!SeS|*01gnW|KN?JSzzo5}-`;@O`u5P(6*JMC@!T zij`w7<2X=$keom#N_6x}MLn@IFCvEoJvS%-KGfkt%<$>qgHC^559v>_dkya3K_8J8 zQm~x-ctlxLH$z(NFU8{55?=J7)NQfw5zaj_Y{TRhH>QiRuu^J9T;O%>vKb$0+UP^U zdeKg&J-$}N#Dc8f1S)d5h1Wm$9x1$Bm=|Em^lQA2hP1RcddR8ZTip0%hLi5xLlW7R zw^Rr=r}!~)Waa7tVb}4Q1 z#_+*C#2MyCAZo<T`a>evoI2a6SI6MI zIu)3rr@1CE)M{EL(SLqA6C8C4$oZHPBTY9BV6dM^!2>lV2m}7es&!|X{$}`vra04d zt-zRoZ#=nqM8nIygb#Qa60CX{xkc}fS+``B{1s~a=$dH8LYZu!b>;YZV?6beki}Se zeR5P^x6yq_D1sc9G51jUIJNftdzjNHwRIw!ccNoMNJ<9AFw8Dh*&=*QkF`>4DI3In-OUkb6ZTD+%_$vZM^-~s}L_Tk6TGPnG@<4iLBm< zkcM`wy~>!ZjK}Xio^_{)jUosIl|NSXX3(h!ftDw^6A$#h=3vYIW4&}ORw?`urvYt3 z3K+zK+%2thud7WoZ=$c|o!>k%<=#z$6ZJ4)B~l~!ZvU{9J%DI3oHH_PpX#+z_jQ#i z1B$+hzW{is)DQ=hjW74vbaeVD#+u$xmwIZ^*oujw#{~E5 z-iiV_4~#29opqvaDD;BVKImLu1v!`^^2{?VNKg_#DNp-(!b!Ax{3KbWP#NMPXbOuZ zC%snLG@)`l2M)FQbbmj(ly3-f2n*n{Gb~BTab`xB;)#cOPLl6qe;)SyJI$`jRH5A@ zv_&LIzo&4dAOKHQ^k7JiK;JV-sv*;5#tauZqrpL>h_eJGxrWReNT8z4wk7GvFe{; zeX99kk1`^yJZ=(u}BPrMWOZ2y3>e@jnO=*%rf$^6&`BjAWz3~+U2(v`L|sSMulSCtHU<7 zMEw15HDT~o@3i3&^s9(H2e9d+EO|#2o%D+qh8&^hj%QH(IIEnaf0PV+-i+OyDnrJT zh4L)^NQgedm5}O-Ho(QdE-W$OoUx-CIjiquGO{-aAsA!XP!vKn%520+8A;QHKlsPA zx=mD7u$9*7#5hdQ-+6=!d4*pqiBcnFG%2Gfj>Ah_k1F5(OG3Q-xtEyN}hR# zY>YHO0ZN+_VN{43u@d6|nAOa=N9HU|FWO2b#UGrfQJ6nSE&8N)CCQ$YQsX1i`*ZJ{Q;n)J+2GhJS^<@WyiTc?=K+ZlQ;GBm{HFR z-53+TZX#IN!o2>vRmWLC}29*Iy zbL{;JjUE*8LME=Yr_n=em$Moh(^V93Qif?Hc~KV4{X!bUSvuh@7>aUdH-j>#6|n{p z^CkvOauvKL0Ro8JJ&i5IL)A=VyBb-ZlH39b)S>1%)TS;GEfk>hQLa$_QSvCSL*1I0 z6I8vNrm(k#E4!^*Y>atUGc@bq<2MG!W{!s=$CQG-~g=q1~AP`@_(bVZeJ~hi0@wG z0yQ=in31*PAk@HfdW9zmzleZliAb$!-4iMubGnp}0cWl0%yD$P79YIaPWm3~odao! zShn~_jiX^g#&5kkk(s=-BPopn-`@Mwh4#sIh@ymM-Lc{?(Lv`~%GWLePI9PZMvRUv zdj??3q3Q$Ae_36+sLnT-8ms32Qx8c_PXsfQv7ZcYNl!XKN_SAlPm7N+$ z^T@P#4Vt%__w6BLN_(!>mo0~#;PmnrKSO5#R1n&Dc_645A=6vxi6U4JvQ1tKZZ=y4Cnd73Uj-7m?%WfZS>cZGzeyv8*s+lxeraKpy9*Kh-a)`93}*i%I@OLD+I^ZB@t?mg zr+hC;dW(J6|BC`C>R%w4s@9{_iCfqcI?(+`UdGiv{ogHYvjU;vA3D#po-eHcp{}Y> zeffVPp=fxN8AHI*Yv84d@;R@9USj{Q4VC0Yu<3WTwMS{v4VO+nry}XiMJ)uF7qUr= zH&Jl)oWc0_LTacGT4k`G^rop4^|jsb^S8xL%?R6aEFmp7%9om*=2!F+6iRx}E5zhp6c4xR`$zt~ikLq~-%__Fuhu zD@jEh4Pl(L52e(>U&y6tJ}N(1=EBB^M6~AdMtCuB>)v?v>wnK7WWb8YS$JdtDsv#6 zL*f;k0+}OZb&d?bp|`)C-s2vU6sh}(1_h~?&r8!jkTm&nAsY--73Wk)w)Dz|(78RR zV+L|cYvFtl?yM_h8oB)`5ya7|aIe@5C)>BIJI9d%_1nxGnmX{GoS8i+kr&ELZf^oC z9Ed0?&tok+yvH)heCGS|B@ompI(RAH2d{0slpL2O%~$N@>iGFF<<6ndBqw4&pFT_2 z00e?lMTw>@|MU9g7i0!Ji-55>uH0mkv(Z(lP9Nw+x8K{tLB^T$uXo*P+0&s&`i(E1 zJ=*ZXcUAr?>8oRxlkWGc3f41KtA!mK$sR8F?O}JPrP~X2RX~`78y9%XF*_dLu?DOC z)*3$%`} zS<6ZJBIQ2iCH@N|-y}B5#`q${XxUr(8St^r2?5k@FNIs~dccQ7gOeM<&Di4p4ol3t zni_?Fu>x;rTt2Y|7?oU9(sdcfpvtnd4^hJZ4PM>Z7h25@QH1Kdje?zifGbSY$z0e` zK7%@kv5vS$`N8b0hEX1;>gd$Mh?r-q?=ljsvo=wW{v+kv6hvFX!3#0eZZ(d5qC&Qr z+>(3>!smA<^dEZUMcGRT8MD1l5@#MP*zur_{C?p7r%8BC(x_=(d~sCXoAMB9GH&^L z*QhM^8egNC1R#+!*OGX~^H+0Vg!*&vEZ4+~Br`!#{DeX;tm_YFj{unnR4_HsA|h^~ zZ1s=r#$%cABT0QdtTIVW2OH)RQ2$2LbMAJ2dSYk=Zx*OkySajlTOzum z)@gM8{y7zeWBM&>;AX7~;epU#9pb#<9GGuvhNoP-ZOLPI_`4@U`jPL&WOiMxtNC{q za4_;76JxqfjCEohJ|3RhC^^>T++a^oD zL=9A4vn;C2gV5d)!rq9&?Oli>Oj_C@dx$%tm{IL8yT4@?aSuDY#_IIp>q=l4-pR)l z(7Ah)%d%-4lJe8GCXxe<=b^Uz)B46CPyYS6Pus`{ ztqmmKG0rmH#sdd?zxm)WO&wDCmU_}kckfHdOi5{Tf>|jAoZ*{0oj4L|NA{pEkpwxD zL=j8}T7N&V(I%SM%5P(NC>VPXRNG&nbS3Q9XiQAK0L z)h9>cknT0?=drINCd@E?!6v{TH`~%hr&4J$amH;k)s`UQk3ZgvHW)@`{*VBh4A4DC z25i1{EA0IujiP;0-2H+2o26c@nIyS5>?eaf(&BXd#_A*MCL5UOpQ| zV<|MyI*(iBUDxqIZm_S2Bbsxw)i~vifM|$+T83bA6m5=-v@ffV)c-Dt~y@CfTT)CsWsk&sQ-Iy(hD6_hn3=`Y`EQD6740)M}X9m?zV zD8VRVsQnV9!tD#T$&A@C1{FyDeL#feQDqA*dH{;qmUR(OE5V_txj~iy*D=C+#4@3XMqPY{V4TEpF ztK%nS1t450Mrv43`pD3_8773JZ_}9pWQ05c3f)=aD5FN`qCmc#{m!V{c^GY}ou&cx zx7i%{GAd6#VvBsfJGc$2Om9w-!GVZGm;a%TPWBv`J?+ehYktv|5AQ@(aUg0leRI9~ z>I6_2R)7+9;yIT1fe=#ROvH%D|3{du<81gm76fmmKjS^^?~Nx;-IF%ejzqbA+ahF3 zRJpHwz`V&>-H27gm#kFCFr63+XVch4c!7ML;J#)=*>{0!-3N=5NoNSFDZfv$0t$HK z+ASIXs#%3zz#25%BBAj21|)OpVcGAK88ZLz8fT3r-|tm~&n%#(M5cpROZM|p$m>|b)iw(_(-y@*actU|rjz(<@^4Hqjsf?lty#H>itit16bYvev1zIB_ce<3Ap7--v@?Bc{TXW@j(jf zG`p|9K2-F~NE+BK{frh;s`@}o%6V40KhvM5KrsknpQx$C@ZlkZHL^Q2gqiuBBw&v` z?AZV$gFGJU#psQ*}J><;LIY8FPtAG%6>kdSVnMu^dF(vV9v=3F!3)J^9j% zY8q;O&kPg>F|t%lie^(RTkdGGQWrt{ZgToHvXBL zx81|+PJ*aBpZjY=EXz&j1#WsX6ow9Q9yNvoTcl8IjBmm39u)3F++})34S*77aDhUe z)t6*3?6`ytIS?k9V#|gp^O>zEN-&<^ylLP+|a_7 zG7Yn8R)D{-tkK?HN+j$X8df{S9mSVe?%VL|ml4T3v&|=cQG^)&ym+x4Lv*j?O!X0* zf&OzptoAzzRQhq|TrXZ%?>%|bA38|eP9M;=Uhe0~@T;tJ9@icET%cfYY`bz5M^{9$ zG&qX~Ly7JcDDji|*n$taSbL97)_D$Vz&PWeScCZzr3cW_3vlW3%fIbkCnL1OhqWIP zBPTm}j~f45>8VjK_BU6L?jF*)g+dwPiLb=mG@)@OE=2tsQNEfMh0~mX@Ut=we){o$ ztG9U+W-JF?a0g872xRVWQYnv2O8b|8ncauHP=;A-7GUiJc6p>_HJ!F0ZWM#@g=8kB z1+HgtWt&ITT)1^y#-mkK^h(`wPOCz(>5jFAflz71*AkO9AsPm23-WQ<7J{r#V~`3c z(}uEfRLLy%pEsF6cwAPc$q($N#DLwD+(~qw@!yMD*IeY4LJMf(?wB}siG1I1-aqg2 zxL*WBNQ9gX`_L$1m!8xRe8e~Gl1e**jR?SdRb;XW88wj7ojycl+MH$UQz_({S1%?@ zN~v!!&))HDsNMrZIw*0G+Vz`tlY}ox$O|FP3I)H-#(FJ@kBW+SZxc=1nUtT0 zy1d-c!NqR)bz^APaOTg=DEfLIv=24mTgxm{0(3h*Vz}4!J&&SSm;u=Z%yPcn_+!%g zxaV9qDe`!m3!Ud~8T0c9fdf_tPvBk*i0*Rq&QSvSL=7(r$9itEz)Zg_J)2s$WV1?3N(fflxzo~ zqXnbQ>|gj3We-ADH7!Cx?PPZWl+=$iI$>-n>R3b3Ux(x*08vi}(L++AYkuvz`Hy!n zLnrYLJVhvruX6^3HgnN=oWE6Z5kfzq;XQ2Med+ARwe+Zy-z%T~fx(28eoDSzn4tm| z9IX?pj6}&1Bb-(R==vD^3#c!TYjA;)g!AH3njL3! z#wSa65EG!|?$ltocMmy`oy?(sAJFfM4aIXKY>*+uJblh@F5xUz{UVSP&;v8p*rHw6 zvQP!lPLiKNL>Qg&?h-h88(ow%U(^6i5Mu>Cj_wb@pyZ0xmVyAn*T4+Wzy7QLak_&C zlfRlYu;X25Q5ZFI|FiM(LxD`fag9f%Ya|dgWQ6z`BeeO;;xndxm60KQT{d8U=diQg z(YDYMYpQln{E54IklOhaaz$-VfV{bfBm|80AOFDgZyUB~IvQIh7%=GLy4`DFHWx7G z{LkZCAeBqZSZMyFAq@w~KkhYO6-xD}A+!soC*-8AL-RF>(ETa+&&*G33MPfdF&XqL z*vM)7cmQ`N!4guyqKy2Eme4(3*CpcA8vEH-s1iUtE-Dpob~R83w2JzXOoGo?ZQJ^{ zdlA@x>SY;{0zTt(RC>6pQ_doiv>?b8GOz8v8A``&p7TL%qHBA^=HtsEf{bG#E|-0O zbYnj@25EU;b^h+^bl%MZ+F0ipTw!eQZ1}*I1?q6WcafiQb(<&iJ|FTarpEtD1`}kJg?(uid^zz^ z4nKm=HvI>JjF5$7zyaD!>!!{L;m@|S4fSq$m8ZcF#PEu#&W&Sr`@7mZ-P{|@EdEF< zs!4Y9Q@kcFWTvLHFRD3SOuP>3bPjmj3&!Ng-Q%mE8Ti!xc#>bKvgab}H31&DD@65* zYgy11>*1Q0>XTj$e5!HWLY$pc=VTCdiiTO+lvE+4%et>Q&__!++9+PUot&*IF5D4) z|Ef+;|H}LkjR*EKOn45owM1AcN~qh~5=G)blo*z2zxt4j6ctTrA#u?qY!+(J;LVyg z4~7l-_Ov=SaY8}S!k1=pZtN(m&eSBIqEHDR6i}mDn9I>gUtGjPx^BqiY%_O#CQCIw z5ck&nFxlI`t;P~98bXaxV*U$0+Ks3CkRLUZV9thz7!!8i9xjbC6B*o>Gy0uw5vEZ@ z(k!kpIKzkV8JPTSzxmghI%wt(T^cT97I2ELk!}p3M&!WNxsokIDqhG5FP~G5HbPU5 zmXERHZK=u83gArS7$<5UH~*yPgWn*3D1=Re0rb%|Jdi2FWiIGsc~aJ}bMEV~-}u;w znfF=%W$(-aLSXdZtd66wf;jSY@nTkCZ2r+rPiuXNx)mko#HS3jL?=)7lhO9%D8Acbyq!h7(%+-Ad?g%=H%GU7#b|6B zJ$}Nd?VSU1@DdcPmeIIDux!Bvg* zGCo8*aR0OIN!jRDM>WNxxs%@t=C3=&YkA1j-Qav`#E^u`P<&m*`{5ka)BR+2*3{-xGe*laDju+B{3*X;tU!1jgI_FWrs5m8yX?~F+R-t8@f^avN3gr$^0@X z0s8`o|MOk|&z`WI`M0Q76$8v6YZP$>vz~SfmxI4hbV)BpN#cFq6UXlig!_wJQ1{^DWk z!^igBN2h@)jGKc*jk7-+3wHJrnnjk+mW1<5yjBYLw2C-pI9u-)lBbUhBJZAU&@C-b zN4X4i$98dK{5=q;^7rd1Z%89V+KGswXUV{+wf<*fd>bG(dpqf8(qt~DxK0Y25~y}7 z^SQqkqaVs8wV?|%o48EC-BYz9j-*8YXBy=%yE5>yRi;(?+CrZk&Dv>R-4-I0dOYg7 zJx2=2ZCu~icY#Xnp2Z6MYP%F?VC;jhTRRQ=)VFeCs7X$U-^d+~{Y#0!tL1dL+iA4P zSXz3c-zfb7>vS@p(jh=PF`yt0Fj89zdc zE(XWR@T9HPj?w5Zq3z0P*Uyz)j$ds)Hobhb()ncem4#P-LT_J^8a>n%J~&5q?u;(E*og0NHsbdO%zLku&*{#NCvfTtT0ttN@Y%kM1 zZLO6s5rh?2ts9)asY`j;lZh9Yd$`#_dhu$MYplK?--V^KZV`U$fr_xlOBgkmL^!B2 zAn08?UM<{RLos<(4JJBt5C~Ss#iR@Tz4frCxz62JsG$=1^{y6|7$~Xy!d=xtM)UvB z^d=aA=j+_B&!*`{g>7278-VN3<=8 z*T}51R)VgcsayYI@kll_3BwB2?KmNJ`4BxiFOJ6<4>ZsJ&b9E;3;;UPl&{X_w`e@3R2X<0wUc8I%-HP;|pS~Sx&{z4hJ+l zv%N50@UcITMw5Z*q67?ODEIBW^-PFOrq0b}1BOGXvtG|NZhfW2GnJtCo29>WH%<09 z|NS{)68`-xnqRbBpL&v0e(zp`G**ziWby8+*I!&(R#~sUb0|SezHdD6`z?*AQ#;`#wK-yp|9Ba$G;h}!o{^s8uZ<-fwtX2@LztKQe zgescLxzx?$X}_(Xtbb|^C7+wN|9v&Y<*e8F>)5WFkIsz*eK`UtKxum~$FfR3pHDci zf2ygWVgCKmKQ_mLTHl6geVyjqdGBu}dh1I&!?jc@iQxm@SW5BME<#*5W7#L;>9IJ;&_Y`PFv0HFDx=_m+ zhuwiC(o6+-IG|KHzlV1UL-~fz9nOBfDs0y2(M2&5 zw;2dl6&2X0@Ph0s8kXzhzVQ=90RyjB#^#iLvsYgHZ;(6nH}S8#;!f&jxdSY|tK64~ zsph#pdsz!VTKEmuFz1IiU3vqR@Ba7lcA}F$G!%au9!uGOu6MP|DUw~(!(y{4gS~&* zqD6cDydjX#b&4WYLC^h(iQGBI`dY3FMzZp~l`HdJMiUHwE}bGdyRb$+)83%1ba?N_ zw;h{Gem-e>T-Is~&MP{=fl3HZmb#G`9*~jL~@lvBwojBBkRcF3+Jv~t_HBMUpW2#?; zRsOwfOt7dVq+A#e4^vIzb0ia2?hzynNfK$a&x2PQb^}>L2>FTRoPRP9-T8JftlZ%0 zr)-mD4mC1%F~9O`^3gb}*9XpTE06cczp>=OiBiABqL4osz90K*m^o_rzW;{*$nAR; zzH>3ZXwoxaYJTd(yyfdRLVVEBe`!y>ugqWl9I7-CThM6yrhknts5&R+H_0W&dR5qC zw4ee%GgE~9BGv)P2(2G80oCXJcQ@h*2PVcMZ@AOw@bcpk236Z{RtH*DeAuJg|K&qa zYvSa1d>6^zmSuZT4zxQWt`%LzFV}dOvVR@*KtW!j{RPwdvSapo>o0r!sN5}o((&ob zE4vcSOU%3Og6|X=_jYfX#==3lX0o*%P5>sadCsng^7`4$oAm>N^N$QZqwub8vuoKc z8qGi2o@1N1l!*BQ@fDbfI*bX#56|hq41J7K4+iX9#Au zK~s0q>l}RZ9FD119mGl&(Ji*uM4I)T&E}GKt0R)+<4@P9d&T79BBXCg1MsY)uR=z! zNm6r-U+Y!@y^q$bR=6{E|Bl0DlU!~@5 zrJ+WWqxCh$b@2FB$69iL&=|U$$1lQEa>}1$A!1FM)_N`T{6G)-CI2YAK;d@c9fZQR zKpNIeUx{$lmWLy)Viuzn^+j=;1!Ey>roH= zcGT*5;OicsQJuo-C*6<>7+yXc$fEMd)9yL}`8$HSjHvMPq`LJd`}bZrvx|+TKEEtO z@l4TS*7a!2PP9j_Lk73InX=N7r&u^wE!GQJ?=(Q}{;6)5)?YaZP=l;BXLe|YrvxRQ99z=r@UXJ9Elk zSbR%#I5HU#$Z{mG}K-TR%Iihjy>LK7|>}`Z=BNoVCa+Phee05B4@_OqrjK>00_a z({6}pW-Izx=}#@2qQAIL9bLNMI%o>{F>o=#cFT(Z<8t7(?_R9HxhgW8T4?&LmN{F| z+3AiIo`R0CsC3IF5f7vn(Ed){zCVqDk+<*KyLd)+NxSLPDRF0=+^R{&l!QKER(6~3 zZ{rX$y#k;Ko1!RN;k{hK6UR3?P;uFZGkqMFWy~j@@b-3oVfR73bp}$brWF*s&r0yU z+KZ!~3vC{0-5V-pjF~1xzMIm!tKImT*6#R@*;WqTBxmsFXtGy<2`mnFkJkNSdkw(c>`@OGs zU4Mfa`78~q*C>cSth;5ZL-bCYz`zj+Z`Ys|@5mOPUnA~CK|1j=kNG`~HTKPgt|fX9 z9`~ikP8|8-S;Ww#!xm>dQdNWLCsY-Yli!n`*k0r^gxak5&?1U6B`b5VrSS%aa#&r* zwR<5$iuG6=So(!8U{;mbvKhFX@SOqg-7~W<;nlgfGg5F}Zr!m4_`f_uT+B9eX1&ta zn#pm8y>OU~jbWgNl=tYmg}_k^nf zU^6qG&`8J!`QY2mYM%50{lH>)>wCt+tLEIm15&L2UbNTkNc$R6kJhYbuXWc^{+8P zHq=%mcK&iO89ykW;Lsny>>*yYSGqswnfN!$pO8~=3=-{seYNc|wNdBu?KZRmXqq!Q!I>R+3=u-^X5ekc0=u8Xao;DMXAk=TgE(u)dSjltec4n9p9KGDg?Y1ZD; zX7>V}W5vRBm**uM>qpoBd$W=8=*Z~R%U8l#!(!97rZTXlNSo8&O$%JOapw^6&+U{b zOx5o%cc!K4_b$Q3bmu=3Ec;V+o$c8B;*7?GsewnFN59P(V>P@m#E-RCOxxZ+AHOR+ zlh!DMrl)g9K3&<#W8j#_{fWp-3!K8Lo2@W<6Z|G@E_iWkVo35E*ko=p@s$soALdu@ zx_Z(negn%ZOxI&;;}$$|eMRGg)ySnhrwSgQAlPzfmkfY-$&Jz0qG`FL2T9aD!YhZ) z1)6Uaa@)iWv3lwd*H_b%rf|6Rr9&Ae=2Rx*kU|W%F57?aGRhTn!tvK;<_%Xr%hCE% zzTO+xC=#FVt5AS1E;T}KkMO_X-B}TbTbHpa<-%-H_YK0e9y&@Gy5DZ*c&mhFVuhIRcqql(0I$epQ_t`{X!9J#2Qn6FwG!_Pa0Q&S#cIEb z)cr?QrkAHeUcK3Db&t<;gr0$p1RFiTK+2JZA1BYl=ijdfk+`oT`%X~17i^BY|2lp` zN}^u5>V4=-hfsB&o#~hPhrCSuw|Vr17XGE8ueJSK2G~!^^nQP{~L(4%SN|V?AKI+PE9Nh0u9vxT1(*jg+~) z(_brJO+vGEJC?liMwBYA;<`d_ZIrG91mE&CK}JY4FaFeprTF8r7s+3)X0J^x8nvtK zF~lJW!+edl^xfG9MV9!?WDqFXtTuF_`I_gs5By8HYL8?nX<8>yVT*~u|)3-fGDgpxZv>*Xw`J!k{ZAyyXLf^Z4`480l;*I*#?&FsX}XPt9*&Sxnxc5Ji}zkZ1GF#nQh$x{5l$Pj85$C_9G-H|iCYlpOl;)AoeFUi+q zJy;u+0(+IA$*lgP1GOu(-jf|Z-9M`donT<0Uo+9$H_!v$HmS6kem-BT1c9`@F^C(v z4w0zD1W8kRfLKMycqqfvY&XKtzGOW{wfC{cPg!)Qx=Kry{A=Nab>b(tG=jpX{k*aa zJ+LkRwGeXP^lyQ~(7;E+;8AE5l3VcrPfL)uZY@-V zPjOrfnf^p!WB~nQr334YAEPZW1hke#aj2bC^`M+x%?XEDg|c-2a2CH^&L8iQ@jBE0 zM$P~ZnoEtw*mRgI7LrH_E}lrFnJQ zko2~$Dor=`XAIq%yft{$9je<;GS+#=h0 zO{c;Z?pul^Go4t$jhVIR3{88@F_rg>{<5&6<3B4IMA+W{%?16#-zRuQg{f!HNlUgT zl}lXHnC6zXbgP}5OzprE1d0>gDHM92fMzs?O*h`M-oyX<@>c_Waysv&i#TO3>;;c zgvSadwr^W1IgX|bz4XcDjc{QbWVOgiM>>pL1iaPu;RKv>EWw9<&;hEfUWo?&c9O8l zIq^$F%#s!U*vqjOm22~@P8|VN;fZ@0Pj;-a-AFfSAUMui1*^FdxMjA{r_936U-Jfy zKOR)NAXP0@W3CD*hcwMs?oL@;^AKqV`z|hze+yZPWOw_ZonE~Gk7;;VYpV*ji}fi= zLDYctC^H=^?jv^dy?CXr$M;|%fxltCNH;`lAGtY!02f_;;0|WmtkgeIe__bHvT3_J zW^#F>B})3QbfE}`EUlG)b@OA5t37TqS=8VuMKADgz{D(J_U+WEl4eDmq8IyH#*t^U z<>`8LgF$=IhAtlT9xR@5h$07R2g=^2Bl%qTGCDJ4y&|9{m?(-2Z~6Vk`xCx$8S98` z-hR90Neq$7&_h1_edri|U_KsA`4urvic^Vc%vFLpP*?Hb9$6Yo;_KbkYbka=J_Nek z$+1B$ig0n>^OUK(qu(|#^ProKO2e6P3I{CF&bMGFH`OpP4T;pbP9?9V-L2es-H@MX z%H}e59@l!-y~Cz12;>2PHZq!lfu5LUKT}d7!YTnXt6!i-)20PyMy4k`QrBkogJQn9 zn;L#17GIkMxe@+h8QK9L(fh!vOhqo#3|Bnd;T|;n^)^_jPeJ zSGrzd`njJUurXcNym%ClM!3{PGY6hPG8~ijUbWaa~XHnPi~@UE=6rzD_G{-R|eL zqQ+ee3>_;vQuF%X-xqKQd(qCBXskd5GB{wx8n%G<@~m+XhFC52D<@>h*fzdKwU6!9 z(1G1rj?$7az=5uB3>36iU?`7KoEKdqNCq$2!k#AxF0EU>fx4IJe*a#e-4?vZi937b zB_B^O1*5VfBX0{1bq9abyaCb|;c2Ol6udCkzY`^0>H8C}1uX~@@@qHwb?LsrLN0q> zFBSNO2^SU#O4Z$ciUnJD7Pu&eMLbuiB4U`eu9^z$4_TSw}3g)V&Zo!s*`%zZ{FhO8%wGoV7OEw%#_0iL518 zoR+EXQ-c3Gtdy37*x4b4NdP3kGiBIE27TwQ*DE92*pEgA2&dx4aLKkAUmme7Sao0J z6~nCYUCuas4mEx&i)^nBg^)RQg%B1oQU%)im1{0QUFzeb&(+Tl_N<*rxywAYzN^Pi z%v9csrEK|SD$Pv0bVe+!VU;blN9NT+ z9zMc(_V6;H&3QF#8VS;LJBX9IxLV+kevtmvF|8O29waAW*EZEm^1 zejh>NDSUGDehXEqwn*b#5=aZ=^mL$UQsbPDC+Oyr8cRtriii)F?p8(*-&7HCxVex! zAK_eC!PvYp5^{6p6XD+feG?GVT=Mc5a_}elG%eQMePMkrx6leFe|c!D z9}Ta4K_!rp3)iqo6PAb5fo8+OYJc3(J zj5XrK-hN#1?CXdftd`N8tl^xkCP~yn5QXN4*DR&{+YPIc)zybtj9F7}80`q8Uy_B+ zd{f;R9{6aFum??1z3j2}`1sU2HRAHdKs-GMF!nO>UHi_wKY`>If9^n2CNKK?fBDg# zpxAiVP6k;AwjOg#-R>4nc1YZ=6vaF;LR>{wc(C+kLv;bwj{CBU&GPnT9(7JsTo8xGD7**{jMOZ8jIomV~K&sYX1%Y7D7NC#68SdHa$(&m;$1l=?(M)IMp?#_D1GzOSy?obty{$Fa;M*Z;N_*XkR zvMpo3MfEF*%#*+uF$%S(&r$RppoKkG<#cKQQE=P*2PxYZ-Iz zyRpSrm&Whsnae_<$4rX-x~}fQ!;S%pbVJwIlgVJ?nzGBeF5l%=cC;2=yYpvmVj?U- z)~0tmH*?lhhJGR0+GF9wFI>(h`V9-jr*T3SmS-n7R@5MST=!cdw~Z*(l31vS2-$`> z{4B#tUU&{Lsny!=rq&{|-0#{fDy115jpGS?acSh;BkKwDD-Q=R{_{#a^`ac(F&lkA zzWBMg!c)BPpzzaEIYQa=8v_Xc5yp_-3 zS+7&15ea+N`u=||0Bj^0LtE`+URE0S{xW&9Uxt|usTBHGaqB$ql@$1w^7f(w8IS_} zV8Rn^O`=Xqy$$f6S&R;;!_XcJr_hACleRzN#i_;dy!=-34 z^bVY`;=2{H?^doH40A`Woir~{@J^Y!vVQbt3X9Rb?2{DTP&~+Z6YFdKK;>+)qtZ98 zB=fos%S_1X(%}$?#Y5Uq9B;h>#QAaTED`P;YR3NWEATkw0UtKKQ01;OLHn;*wC+PY z;e7gj+21{1E_msvct0Lo8~euB<4^n&K`S_9?+P?RlCaxYW_d|sv<9vC{0jgmurrPp z#VR=`&mqrFyhYQ?3aFpT2>#j-?`5C5!Sk>xYm_7=-K_U^JcaYH{FXnfpk5<`r3cK}hT)AC}q~v}w zk!PD-BSRs{sLzd*77XY(Y|;ZF3~bhwYY1EQ4g5w*Vo6M(Cay#$wW*h8TxQ$W9Sq&bYU~wIMKD z+T&O*I6*7ZLDcH-xoF%XVi&ev!oO87RkeO@2`6-p!#8B=Z!x>px#V!`*S)MTJ0qk| znrUCXB@bR`JWfYu#L;*rQRK-KOk{cAvkKppTOva*SAL8dU4ZZn-(uM!k0c1FU;jH} zPY5`H1!+@xX8ulAUKU{>`P>nrpKeTFfn4rmh8z4}O(CJ#(L-g@hdck~Be0b9Fu_yW zI^1U~K9Rl^{MwTa8FS|Ck8jqx7%hK&YRjJ8-<7nvAZd$a6P8h=VGD=U)&HCEuN+1o zbZwpIg^%P26Zxne3w3B`J0c|t-m=)p{vy=svIfb{n_l zV}B_FH45qmsmoS8Jtfe&(EmyAc`+{kM7>dli+;k{FNY|CJy<_<+E5poYG>@_G169tDTRC zQ@3xTylo^c18(3C8saCd+z;1-e;`MOea?nANyRu+UnbFdR5*2KI<0TVp?#GHBb*^A zmV>f%fYA}ZEgy2^Lq@nGzzreg*x6HT)dnUR(G8JPqu~TgBpsq#w@uFdW?3Ohv_a~i zazJK$M7G+&6pTmlrdYWH^`<`!fyBtF=H$)t$WP}EL~sfFTKN~%n=eCW-ZG>i%=>Pk z%e?Yfe4F!Q@F9FG;G#2(piaFSo}yNe1Hq4l-KI#_g|^lMZTvWFwH+j{%&Z~K(^@W(l=8DjhJ-kjQr2jMo?Is~99I2v z|6&#y7ZZE_nq#5jX$z1RnU-1aIZ5y9>^Kuk9QjZrCF)*pXMvnMDqw@&Oje`&MabZs zQ30fS#&TR~M(PCgBGU5E+VEX9UKaQ+YhXS{VJq4o9pdPe^c@_K(wtrcBD0@`a*Rj# zQyXKc7gatUorh0J!E0aX{n1#0w!~vt{H)Aaf+j z(CEV{J2>&90A1tC@~*y0K2F}@y;fL%RPmCPJL=>~C(tV~K{Vi6#Z-l!MA7Mg%~XE+ zr*-an+Da1RW@AFK{Z)}P0}yr|VwkhXUSZ&Sz&^rkQ`ez4vH{kqBfIXbn$w_h2}`Pt zVn?#-G!VgJ1t9`I@3YfhJ^OL6QG

cC+T?nJyjg#l__pgOEh!Cp?-U4j(V8*SH)BXFt01{rcQ`7J;S3*0NnP&S*3pfGm(t z_8*Ug?eS7Y;&x14c;=q>@7{>;$G5V%^CgCr8>c5~FDm@Hez|@A^lmd`>h;2!)1-Y@ zJNvbd8wum?je-CVbYniYWfL$7VY34c&EqAWbj%iPm!@w?nTUEvBKp4lGtxkT-eQO< ziQBM571ogiN7j7OCK@;X?>Dte5+twU{CTY`I1TMo>v9}7L{s#QtcZtKZ|tTWp=Ys{ z+-jZGuBpe}O%g~0J2n|Sv-n{x2}-Oki?q)HjwF*|iq4eeqYIYEWnR?S%bib>#HKi! z7tG*IEkTT$RpL&{a|i}=3UqnI9e-?seuSZW-v?b#k%sqLwp^7Fy}0@a?C(O#v`z** z7il|>I_;sKgkqPoeuk99&fRDPJlR7vw|F(b8W*-{#=lX77WF-P4mrZw{{u?YtFDHlMAu95zjHtj!2}Ps;JS9i`Q_?uMho|MOV)?IFv$nC zbKT0k!Qy~mE{LbnIAOPtj$qc~SBI!_T@=E~1&lR2MqWBB_d)ZoUf)3yey{BSV`Ns2 z4=q~oWP3lUvcup=R(TeH3sQ{7o*e#YC6*O@BR<|6gomZ74@qt`cb!ie!4TgbT<{oF zfbj5%nsg$$ab=4ma<`Us2ei-31!?0X`g9VkBq2lWG z2<6C+2Md??JiA)`Q0)5;uUG&sIu`;APN)GC2&U*T36vJ=nk*L*O;aWP>k(8Dd4 z)PG%}0Nr$;tv~k+M|Tk_?^l4g*RK2rM4#V#e_@>sxI!e5-`L9KQ?k_i4s85>e7loL zR(Y07gy6ku1^KMwROMTl6#jQzB>nNB=gJ+k6VBO;Sx00ABKCcVHiS*otqeQ=`cDr752M0B=NNTF+rcR! zO4A%jcGT$I1Krv2GIIAf`Nz*)Mi8?nTi?IO& z+)%+ceo{ebhXVoLRC@D0$rQr=zICec*W?!1=bebndc9l`BY7SfnR%F$;WT7tjI1Jh z%te?Y?rSJ|P`lW@hq?zZ$$w&4`}*zmqXSEr*Y6koq18X3jKD>!r6IFOz*u|Pv9KCY zomV&mPbxoFow?-9C}?AFy&)suh88)tZDj3I|Cs5lh@F8htnufA1SlKoeYm3A(eoF` zvrHpYSIa}bX0@wAO3*+l*}BbG;gQArr0QiqJfDiS3GiT`qS8$iN5|7w9Na-bHeB#u z8K0ah|Iq%qY8HT!q79L2rY}^i5g*j@c_0CfsQW-}oWO!?6*PBLh;`M69M8q9TIYok z3|w^jw04+&xgIllJu|+pA=LNJ#JmXwUHQL+Z6}uz7P$m%9a`Y5JP~jaA5-VL1xvBW z8u?Z%UR5%?8Rx%{l4-K-OrOrjx8E2zh*&G|Ji*Yr_+xq%vhNH)i%6$~f990}D!3p) zxg^s+m`e@Zj-{(USn$jTK&YJ>&Czqr8%M{+q!GhTPkm=~uXwy1-94fiTIIT&M?F<% zU8UwwilPl0fx0lq-P>TryWE-17ACcl!gq$m7w*lKmxg~iAL4G(a7>=R?)0WDt=|Rf zH~rJqxEMUa6PIZ~w-nKn9f3?+w2Zn4KN++`9UVEG|PzvLBNUTcf6GMBU$>c6WRaTVuvm zH)4fHYdUO|G!e<6Q96f6E1}R=J`B~#adM0U8 zcQ&{GiMVE2e&T;KO&i!7w%J|#E0)z|Jubg{4`3`a`!7*j&<2YEUC39rc*DWLk$0AR z(bBb9dYp*&pQ0zKlg8VIY8&IOsQ=6yvWUNEhb8VIF=gqikF~fmWa%QuTUJi>6L)t> zdq@2bPjldq*B6SY^ZWqJ-%rJrSf+m9HW~T`TtI@$)*pnko;UuKtj(BBwnj^p)$+OI zxrWK*LcLW`rZ^=qH6!Mf@Eb^>Z8rbH#LQeEKaTs8-Kzk=|9-TuH@gKC-Ng$xi?gpp zyy!j_3Q0XNyH5YR?z?Vdxb%-cG_FLQ6r+oLIAh!@{F#bSm}B@z9>F`^x~i~YX2Rum z>X$cQ@@^#HB_Gz6pLy4hqeBmc1<>EKXIv`_DCEXKPq;YngKC%IxW>82ZCZC@;Gpu;Qchsi4u?=0?HEA z93^_e@61>Jrb$~$fFRI~9-mZ)5e{Ra$|HdF8U3_!f8t&#; z;nai5a~MX<4LqQI$1*#FQH7lOSz_(w!!vGL8fwkkn`c6<@mEwwh4ImbqrZ5&TO`K& z=k|axui#L5b>4`<7bG}$$@`0^h6%?><(H-8yboQig7#$s3HBe3B)FmCWlcBw1 z*du?EVZ8&g5-zRWRX?#euprJ}&@Tm2;_5?taKsmF zc-pXPm9#(uHT@d>RnZxU`90}g^t*PKp}6Swa~~O6kX?uRh~8MdlTLEop3T3?-Z6fr z>et=*eajIE8C8)`?6d*8r1*~`>9FJ zNGSIxzpp_5Gn$e;rkHD4dFZQNSA`6?JS*scR18rM4-o*Z8TmMLUmmim8hU|+if_o> zi_rm78wNUA7e8nZ{ft`2dYVk-66B#aQHu!4XUx$mwEtmUDW#$F@U0#^oVEmRyI=8L z)(oKpX|b?+(0UP=CY`s~uDr8116zdgX#O+8Wz(n8$nJ=WaeqHEWGL;Y#Acztr*ljf zC24&DZXHV`q@8KSGW5LqUTN4{#YFA67%W?>NmXUmZWd!2w3@{IzAl0BM}tV#^Rx(CgM8__eH6v6F}WSi-S?Yo3% zL(LT=4XM&UA|VE9mTB#2&f3PAt5c~s z5AWd?E+b+mcW1~5uO9=q?ICeedhpC$VP+jE(rGILW3QXv92SO>#eqp9YB44duOgNF z?|4v>f~)CAza3!3pStV8YC77YviH@c0^b1EQy#(Sb+G5kJpeEBH?kpOCBIFjCG7A@ z5kd)(WB)`4RGBq@wvMa<1?~fkM`cJEogO!naw9*pf)7K;cvUn{5OV!7|_X6Vc8CLu059P zeF4WDVTF;P&W>~n-UH`R5I|+MHI`Ps8UvQ^zuv*DU4H>;2}k zrQrsJzSW2&xTHdcqQarxS!VooLKxcikB_mp+!-{UCBP7(*-C1RL%e}j$TuA=`u*Ki_~`9BYe&`llytL?K<7hZsUVc>@SowvC2l}hRzbYd6#E;`f8!*|tH zNdeCF%z?VGGmT)9>NO#y>Wmd&k4Otl41(}nhM@r1&#F3bsq4od4*M3{Ek}T{Smgr@ zF>d{E0=n=SK9xDs89NEeMDsXLHNgKNGzUltSp1+n$GL3-E+?>*blMAXG>%#6stGK3 z&{8F}&2`)9FdZqA+pRIM5YJ+Xz5yM2rdpTQvO#&sV_k5hwI8l4qh`5yKnJp%*eWGC zSut9i_`)KS02SK>72YGMP3Fh%Vc9N|Bv1r{Y_^u#9y}!zNc2px7e;_G^8N{ojd0n7%_DcJ3Q9w%pD)Od(xE5;qG7}*=kse}BdC!5VZVYfY-o4#LF zyl4GsHr3gvf%8fWxF*=-l;Z4z-MDF~g)%DfL zGVqWc;2}9YLP-gz0@XvxH}UTJ<0sXAo{WC1fvc|I%%^S~7{kGDf`*=D1fHaQb!xmV zP0?f>nMi{3+3esdB|Pi~uPscF(_v1(!b2N86J$(Y=#|K|pYK6QM5+vGNm|1X*I1q( zfRCB+gzobjY8Ww;G`sOxq|T_g5XYYNqk1 z+aoyhH}RVh3UFCtp1?8JG3z4(z5|hu3Uq36X(FEac-8P1mnDhH(8qZktQF8~uSQg_ zJ_(>z9e~@5?1+eVRwka-Ce-7)7*P}<9z~rCPF|a%YU@JeSY{nKA|0szW%NL!<5ADi zDGVL@6WXD(SB3&wMNaS#I+IMs($)Y?;Zo$KnEkoT7c0z#mLt-+q(6I1tx7tCX=sXE zbtMK~TBZKKZsN`5lA+UzAdZz!Y(t%Z+TG)K^im}4TU6Ap@`H{m#+l%yUPN8T2#@F>re839i>azZa9ZgyV9JCn(CMJ3{NJ- zy91vJb3YTDgf0WQuz|mB^UKs&GBR^e?gdu3Cp?c!oe_3Nr2Mh~zMZ19^jG=HI@44HpyAT=6+jx^42<`3eS`A}CUbYkS60~}Cj zlM_m_czisC)Ef90bi}j7^2wl;-$GMJn$Ity*JHYtfFc#?HV`LK&y@cSL8})B4*X+` zZqbv6GM`Hm>94&k#o9PnL8O4}5@&N%r3Bh|?3Bgj?Vujth%ShUEQ8(9=B| zYPbMgypc)u9DML^E|cx#fMP?11(MTlsn#JhdaKT3>?8r&V`eyAp@E&+QiO z6Nah!>U8c_+(v+Z*5)h1>(PZeymxAX7;RV$W~@yt%}L~b;HxFNwgyC_uIGnJ(3C`Lx4|7p15LP`I+3{|WQpLuTw-jj^u>DkOtx)# zH@i%CBMuR`ZDj4Io&msWV(zZ3#vyYF=8n1*8!CsAueRA{{@eucTefjdt56e)J~+Dahx>G= zn=V;RH*_r)BnTSi2k|thuH_{F|K%l;k7(!hhG!fyN%#nrcVkEkBKdn-*L%D1fzf8! zRjd$kkCUY*{wE!^-BB0PzoWg*sdaGFoC0p2DB1B62it`t!{8pPgx+Bee=rLtkH+P6 z;AriDgC-`p-oZxwa&yHLfD);zTU!9sn7hgk_=SqARSOE+Iy8P{19P ziX>|cRCXp61FKj6X8e+>C@ZDzUvqR_A#n241tkM6&;l@}jb=I@QV2mS*q;^Yq^cXz zAQ$SY(1fldRT=-BK_6ggXa7@qX1WnXp+(7pok$vl~A~Z&BG}hE!eif&!5@aU3V-*>=9Pt&<2Z!YC!S=PV(?{}o zic+i=`!{zFmGqk#&F4JY1V#YSYmd}((4>@xnlSyfI)8aHHk^4{@%D)k~VoKE#`Q?k!iK= zKEU05HBRD0_!}I#E;(tMWYXVjI@{^|!ZFjaPp_#T1@@&|Xc3`iV$y-7xGHo<{r<3X zQhbVfG9M$6O9FxX-$&C5`HwJUT}5F&)q7yaGW)Cbz1RPkhwNTJ*7WfppZB6~yJESF zzjBw9WW_(qz{nW=UxtpOEZ?=lFkXuC`?k*0^uJHlmhy3u!yWOmlgaZjDL3CKAeRz0 zU77hLr2JzT?*KCjsC&xopAFj}QP9p`Ah#Z z__0#wUp{Fz_dX{dF15>uTJvvBUOk8*c4ZMPAg)_D-6!y~Rzuq?|U z4{)SZjW1MemNjO%oQVU%2TP=8XGX^@-LFq_pSWj&0ABh4OEhN6`O6|fjE1;UTw}D~Z%x#*SN@+*>=*|P^z(uh5Z0B<@=IuzKb3`D z9%73IdJ3XLZuT<{*qlLW4;$R?9g9-B69bM%=Z8{~d37jYH9HLTsh?o6+QjLn<&(o^ zPgkr3Dm)L^0VDWwn(3fUBX!9ztwkIR>{*e?8LN8Y2CnweC~?Ml zIPRzu&veru72pRn)~TokdM_Yisso&=A4_WyhQ?)*Xcx5-1i{P8{{3PWlXK?e$lYTg z*=FZ)GR^b)mFUj&C#VsCz$)+vD2Y&0CETSG{vhJ@f?Er1A=&%f`Kw$W--tqhe&nag zv4H;pxEbOBAeRjq(-m>RX-;SIC7PW@u(j&K5I3Yx)T7x!PDY4Ab=efc!Kn)m3+O=QSsQf_Baj=f5T25T zXNRM~QINhB11BYf$p>8Ve~@y$29VuL!~h>P`qkN{@Sn-aqXrcrXPz1+Dk|d8Ajb_+_%Eq-p0P}6nEMoqIWlVi}CmX6sHWyigIP(Cx`)Q9+b{^-LjPV>z!p22S7d> zep~(hMfFb)TJYCKoFX^Mn(jXkK>|0>6lp=T58@y9+SRgIpBIlTn=tXr$W6+$%j}hh zpT|Kl9BR@?rwnsLb-L?vhi;BPhf^T{9!ounaFfA)iQN*4r031}Wc@Mw`Hpq!)I5^%{NJ%dgK2}N zfsF>sgB_UXA&=_DV)dSmfo~_P;}N@ROHN%}N0V_(t6yq*s}C*J>c=jmU8Y9;*gVgF zV0MZW(h%IXvdKvBkhYPYda7i6s*q2ChiF*3m1@i|0|OTT+1JU`$d|5G$kD|4>wd}g z3$xzioL_yyr$!!?{`;85f~m5d(2G32I^7Na)>(9|jHMV-E*&$)0FZP-+0n)M^FM$5 z&_v|Z=Rb7b{-!#7D6f1{aO7-*oFde4R=FYcR(F2$m@NHGooyOmv20GD;)QpMe;s9_ zH8xw<*n?YXM@|-opZDKcB|g&HBaGye#~IEN-mKy7t9KQk24b3f5+Q)Qa`$ch)@+ro zbxP~LC*N<-PNj0@zbEnP=G<{HCQ{bL!k z63X{~%9{Vh{J-|D{Huv<-3B3m(#!@B1q20z1ZbgyA_CnsNNW&U%}_EHK@fxD1dYrA zT81E^b|=c9TxUoMQUqvZG|XZ^1WlA7ASyF5hk#74?tAOqwch{m>bF|8*LO~RXa3IF z`*cw)_+FCNiTM6nD?1>=!PyGfQyfd(3XU(*_9x2_A|^)z?z@x6IN5x4oH_&pTG05z zY&y`&w_bX&`~ZVEQ3lEyw;a0kT&D{OK8Z1Q5!Z%uYto)p-qUpJ^a*Z8LZ*a~34?X< z+Fp1h^>$#r*RHGneS5;C^}6CF+5y0mE2_^K=smVbGiR0A7pUU`29S%cj5@=eGNE1I zbrJBm;^DYuaVX0thCdO8+mkGjPWi}bM(K;RVD}im#zm7yN0w-61Rr0sMaHS(3EcPY zyuVC-)`GWCB{PkpeX9v064GvgT)o%I-*02~AE&{NIAZXeTHeNqE&}&Z$(f?}iPy>H z{|tLIXtr;QPaLXAsRXcoZD7R3#zId|_`w+q*h>M6V<|u%ZN#HzD;1C}_vubc3vS9^ zJDtIE^NeOv^M#saJ1Oy%9BUsr5-YiVvyng_J$2yiy6&nU+VFC>uHpTgYXYVKXcp9HCeZu_oX(|hiiIOSaUO~OH^b^ z?Ij#|&?oq66FM9rHE6oiq?96uO3$N3tu8DZ#(5O>i^uTh2Op{K4@Z5NGlldUFtjcZm z;-|ZTDNQdw-zdHY-_V9y$KEw;1x9`Zz7-EmnKv}>qpwH^RzQA8M6QbX@=q%+Jqt8) z5sCZVjpO0D$G1-1n;Q+MXzuDin`+PJh4dhoN;y7^tw0h!CP(;w@5iq~tK5C$wu%rG z$2($KtIcdw@P@(|VyknQ7K-FiA*UL8TU^nPPWgrysK0_O5-W(^G9WRCb~IX(VE2(L zeI5$M$1ZzH&y)ra3S6RvY<%U(v*RRH)|c^!uOH%JcU94RK*tZ!)>NULnaSG$N}49;mtU4|A;KCY?h)|9ER9t@DXx?( z1zW_#1dI4Qsw=Weo*ZY&iQaRb0_ZEvzbvh?=J)%%J@49Z(kp#6?^qSTWIYKgQ(g0g zFltg99)|yYhxE&cn~6F=DA9%2s2#QD`Z%~MB0ZmQEyP-HrF8Pliv9{d;r1@j;)O1^ zEc(rqF6Za7Xf!>h^Nw8r#9~tMf^+_*7?hG1hA#9IR$imse3ZH+QcW}Z(pPQu%(hN5w)tVO$k zpE>%_Bn6mK?1pMUhkx2DiKlG7%UlnHb$Q{5#sinbkFgYRnm)b~YIa#}&{fb?z)Kcx zKOnhtyb~y?TD5lhrCbfWe2aVEK)pCg@+5dCPz&e*lR!BrG5F1A0d=X&$p1NAl6E@8 zIPYH#VGmKF7F&9GC+EN(>Ac2^N_QPx3@_$yvIVfi*4<}H@y^H7ApW{3wcGBH7H3Fs zt-jZo)mF=o{;RIYlwx%sDDjhcc9pmdIT_W`9L?HG1IV)2Z4oBGaci%0qvP-^>m_}l zjRLG_0qONT18tQ}bqn${Wz8RoLY|h^)8-#DquGC)soeR~z2S6VRSWo#`0tKFMC5k( z-Iv$$>WZe&g=Km7$IpgV6kB&V32emplt=%4(|bz#0mry-ZV0{ z2*UmF$ULx6P6-Mjd`J?$fAi7joh?e_hy)z}@Xygy5D5gk$?>p>_VrOsbWup)hh)hm zrK0mT6u-b7(k8u`=p)~meo!d|K!ne@M*QAV{_DM3_DN-rjrh@D@z}NZqa)pChk7*E zS8`VQjKgDf7)W~^OvHSHbl|C%)*XSJ;{NBLvTE>sI^O?s`OA7ACDs^I1?DqUh}(fB zg&kcvJiJWk_rA5&q*K-N-!zKTBIF?7R=7J6O%8`Y^Ld-MFZku&_I3asv^puMwysW( z#D8*ua_MOD-~V#vdwC2)3w*GXT)2Oon3^| zSMD9;`{P_A)k3u@wSHTAggJ1z71p3fG}}J@eoBUgkoRArMV9y*8XVclvtv>-S(lMY-4vzfBfu2UM$n4n@s*tT=->VS4` z(|od!5tKiENfB4Nv^BsSt}*!4Wi2QWbN{vnJZ12DL;iHNZS<9m0u)PA@M3gdYckRt z^Z+b1d#2MivDtF>{kwh$u03|3k%3SFMTdZ}+vP-olE?>F8m%GP28hje4F>XaGK|GS zUG~`5@Z_M)OCoy*m$aZma8=B*!{*?kQ+$5Xuy=4XuEgj~!+aXPN`5{j-ybKfmV;T| zitMpF2uX3dsdH(m2X2XO7`{cj2|I0$&qiwmdBO3zGhNbau&73tpM#aesfgBOsA6t} z)4g?c=SFb}qqtB7?iYN$X6l-bx4R`Qdgil~>g3j33_qhb>ow@|=T8aKjlD!`IX`F- zyM{?}dx@7N~ zoFwCnVVTJQFStKGU`z)IxbzJA-m&;O9JWss##eqjAA}~%BFY$cHznRN+XWk*s7W){ zP$$G!I|@_lZ0_|2VYRLsKX!kl=&R5*XCt@EF35RMG5?FD97lRgZjuA%dEI=} z)?TR_A2ux{Le3SMVjQ0_W}^k+OJXCN5bE4&)fUk^PLH(eN7^0f9~61`x1)5-yEgFn zQ!fRMlZC_QFS1z_BOtJZc;1xl$Y+@8LYR^o=`OqyROgVJVXWWqeJ%D8CV`qAsenjO zXEvQIxnJr~0ZQxelYo_R{ENlS+pyt^p>^Ib0%KbyG2n>+88T4=$jI$H zuONuEVL>;|WpG%QThYh?{Ux@#KuL>w;xqzrg!_-?e5;?+f#tZm589EFeUwZfxbn@F zv-Qt)hH`*o|7;hEo58{;ZQRV41NNk=dbl1eL3AY%zxwyvo`X(*GGB30U9`XxM`g(8 z7jmJPgwuH1+Jq0j{;3 z+Tcc{5ie=fcB~g5o~4%;-b9uOEf5RKx$BCfMhO`hi9eVkEl1=h_XpF^h}Q(klzHi=SY40Ho|kyl zaXa{rc(PCjTE%9iem*^D$r3ghY+P<^T9?(W#epY!WXRn$)Rmffh+DidV4wjM0g?+A z-P)kBg$CqYyDgbCG-4FtyOn(XBK;t&GOap7KxG(fF*U%a7Du3yA1Ky<2c%n}ZKecw zo5XsA5RukHjHWYRNL06tf<^iL@m@v%88WZX9^VFQn9}iS`2OEpd~;6SAgd~oKZzcb z!mPT5*FmA(=9hZj%j!HKv*R}qPZd_y|3;!St7aXC#$+3K1y>x_f5_|oeOzk~BJnhl z1S&_4VKs4c9&Naif;1F1N~Yw909!iLU2h|cGq0TFv;SC9xJk{FDr9^$pS2r01Rd&47S-(Q^FK$`0Z1z^XWKenZ6>N3#CUt#pX;e9xAVJi20y)n6??*>s0 zu+vZtWY#)`D9vow@a+u(g;T;WHaK$6%<3l(!>*??aU(wbuS0lvk zauw%hzE*{=oN=pABQ&Z@E%}d(WT9O$S|?a2?5|;${9wlB4Op;hX9#vR`^u5Un*Qrjb4-E}w|4G24<5L?JSB?Xqq$U%BJS1^X8)QIYs`Uk0-;d}Y7-=3i# zaRBZE)0)W>75dD6G$?fX@_bJoj<*=+zC6aKy4tx8{led9UN6BEkU zb@t&g$HI+oZfFHyoD=&eQ#FgB0(VnZ6tM>SNEtun&a0Ch51UuLtFNjL=fqZ&l|%fc^gg1pYUG&aCTgEr^NDuX?#& z9cc|z+`|b~PtKs6hK@xMU|v|axBJ}*g~D)p2DwIcR!AC23~ zBQEYg$2NFUC&PQeHlEWVvyR7Roj$d`kEyIyWNse*)?q!RuC=K!{_h<5G;&1wyjj5K zj<~E!1R?wZu@Smnmh$J$b(7NP8v$$`LoXrlJ_;zbT|aK}`+6fT;m;7#xf0WxCfTS1 z*}qCuOJ~&|k!mj-e78RP(+dHPosegog%}CzdurEe(&%f_t=w{YLamFvWb02@u1xUg z53&@4d9EtzMPYA?GxDV!H~QM2?fjvv#_*BQp*N-?MNg@y+P%R3Mk&1ik?_KyD>2!b zA>tqpaX_ANrh3uz`>xf13->G{v&j`YXAP4NUvgm*S)b(NZ~rx7t2wD9YXRN@BU&|( z#W8idKlqB6`Y(#A1{Bsi-f6tosCOr*eme)1k@j8=aCu_FH!{M@XsIKuIqkRObXOPJ n7M#&Z&Hsn|zhC}OW!O;Fx|&gG-H84Hg*-=HJzR>N!KD8J{be&V literal 36163 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

g&uA@eprrojVz0GUXu2k#Y{OV9AF|Y6hzGQT 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 diff --git a/vignettes/articles/figures/advanced_unnamed-chunk-12-1.png b/vignettes/articles/figures/advanced_unnamed-chunk-12-1.png index 722cb5f5a53c3a4439db9452410da4cc5dea59c6..a73383a6a7125efc3a65084eb2956cd55d1e0420 100644 GIT binary patch literal 28066 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