Nothing
## ----setup, include = FALSE---------------------------------------------------
# rmd style
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
warning = FALSE,
message = FALSE,
fig.align = "center",
fig.width = 6
)
options(tibble.print_min = 5, tibble.print_max = 5)
# load packages
library(hatchR)
library(dplyr)
library(lubridate)
library(tidyr)
library(purrr)
library(ggplot2)
library(ggridges)
## ----eval=FALSE---------------------------------------------------------------
# library(hatchR)
# library(purrr) # for mapping functions
# library(tidyr) # for nesting data
# library(dplyr) # for data manipulation
# library(lubridate) # for date manipulation
# library(ggplot2) # for plotting
# library(ggridges) # for plotting
## ----echo = FALSE, out.height='70%'-------------------------------------------
knitr::include_graphics("img/isaak-2019.png")
## -----------------------------------------------------------------------------
# look at the first few rows
idaho
# count number of unique sites
idaho |>
pull(site) |>
unique() |>
length()
## -----------------------------------------------------------------------------
# create a vector of site names with temps at or below 13 C
bull_trout_sites <- idaho |>
mutate(month = month(date)) |> #make a month column (numeric)
filter(month == 8) |> # filter out Aug.
group_by(site) |> # apply grouping by site
summarise(mean_aug_temp = mean(temp_c)) |>
filter(mean_aug_temp <= 13) |> # keep only sites 13 C or cooler
pull(site) |>
unique()
# we now have a list of 139 sites
length(bull_trout_sites)
# only keep sites in our vector of bull trout sites
idaho_bt <- idaho |>
filter(site %in% bull_trout_sites)
# still lots of data!
idaho_bt
## -----------------------------------------------------------------------------
# lets look at a couple individual sites
PIBO_1345 <- idaho_bt |> filter(site == "PIBO_1345")
# looks nice
plot_check_temp(PIBO_1345,
dates = date,
temperature = temp_c)
# order by sample date
PIBO_1345 |> arrange(date)
# looks like there are multiple records per day
# so we need to summarize those in the larger dataset (idaho_bt)
## -----------------------------------------------------------------------------
idaho_bt |>
group_by(site) |> # we group by site
nest() |> # nest our grouped data
head()
## -----------------------------------------------------------------------------
isaak_summ_bt <- idaho_bt |>
group_by(site) |>
nest() |>
mutate(
summ_obj = map(
data,
summarize_temp,
temperature = temp_c,
dates = date
)
) |>
select(site, summ_obj)
# look at first rows of full object
isaak_summ_bt
# use purrr::pluck() the first site to see its structure
isaak_summ_bt |> pluck("summ_obj", 1)
## -----------------------------------------------------------------------------
isaak_summ_bt |> unnest(cols = summ_obj)
## -----------------------------------------------------------------------------
# Pull data from one sits
PIBO_1345_summ <- isaak_summ_bt |>
filter(site == "PIBO_1345") |>
unnest(cols = "summ_obj")
# We create a column that either contains NA, TRUE, or FALSE
# NA is for first data
# TRUE is if the difference between one row and the row preceding it is 1
# FALSE is the difference is not 1
PIBO_1345_summ |>
mutate(diff = c(NA, diff(date)) == 1) |>
filter(diff == FALSE) # since the output is empty there are no FALSE in diff
# We can do the same to our isaak_summ_bt dataset
# only difference here is we are mapping with an anonymous function hence the
# ~{..., .x$date...} syntax.
# ~{} tells us it's an anonymous function while the .x allows to us to
# call the column from whatever data is piped in
isaak_summ_bt |>
mutate(diff = map(
summ_obj, ~ {
c(NA, diff(.x$date) == 1)
}
)
) |>
unnest(cols = c(summ_obj, diff)) |>
filter(diff == FALSE)
# all continuous!
## -----------------------------------------------------------------------------
# spawn dataest
spawn_dates <- map(
c(2011:2014), # year vector to map for custom function
function(year) { # custom paste function
c(
paste0(year, "-09-01"),
paste0(year, "-09-15"),
paste0(year, "-09-30")
)
}
) |>
unlist()
# bull trout hatch model
bt_hatch <- model_select(
development_type = "hatch",
author = "Austin et al. 2019",
species = "bull trout",
model = "MM"
)
## -----------------------------------------------------------------------------
hatch_res <- isaak_summ_bt |>
mutate(
dev_period = map2(
summ_obj, spawn_dates,
predict_phenology,
temperature = daily_temp,
model = bt_hatch,
dates = date
) |>
map_df("dev.period") |>
list()
) |>
select(site, dev_period) |> # just select the columns we want
unnest(cols = c(dev_period)) |> # unnest everything
mutate(days_to_hatch = stop - start) # make a new column of days to hatch
hatch_res
## -----------------------------------------------------------------------------
hatch_res |>
mutate(day = day(start)) |>
mutate(spawn_time = case_when(
day == 1 ~ "Early",
day == 15 ~ "Mid",
day == 30 ~ "Late"
)) |>
mutate(spawn_time = factor(
spawn_time, levels = c("Late", "Mid", "Early"),
ordered = TRUE)
) |>
ggplot(aes(
x = as.integer(days_to_hatch),
y = spawn_time,
fill = spawn_time,
color = spawn_time
)) +
geom_density_ridges(alpha = 0.9) +
scale_fill_brewer(palette = "Blues", direction = 1) +
scale_color_brewer(palette = "Blues", direction = 1) +
labs(x = "Days to hatch", y = "Spawn time") +
theme_classic() +
theme(legend.position = "none")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.