Purpose: join redd count and environmental covariate data and explore correlations between key environmental variables.
3.1 Redd Count Data
Load YCT redd count data and plot time series
Code
redds <-read_csv("Data/ReddCounts_WGFD_1971-2021_cleaned.csv") %>%filter(!stream %in%c("Cody", "Christiansen", "Dave", "Laker")) # drop Cody (too few data points) and Salt River tribsredds %>%ggplot() +geom_point(aes(x = year, y = reddspermile)) +geom_line(aes(x = year, y = reddspermile)) +facet_wrap(~ stream, scales ="free_y") +theme_bw() +theme(panel.grid =element_blank())
Pearson's product-moment correlation
data: ddd1$jld_winmean and ddd1$natq_winmean
t = 1.563, df = 12, p-value = 0.144
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1526044 0.7731439
sample estimates:
cor
0.4112756
3.2.2.2 Peak timing
While the timing of peak natural vs. managed flows are not correlated during the full or either partial time period, this may be driven by years of missing data for JLD peak flows…where there was not a JLD peak. Time series plots are suspicious
Pearson's product-moment correlation
data: ddd$jld_peaktime and ddd$natq_peaktime
t = -0.43671, df = 36, p-value = 0.6649
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.3833791 0.2529610
sample estimates:
cor
-0.07259273
Code
plot(ddd$jld_peaktime, ddd$natq_peaktime, ylab ="brood year DOY", xlab ="year")
Code
plot(jld_peaktime ~ broodyr, ddd, type ="b", col ="blue")lines(natq_peaktime ~ broodyr, ddd, type ="b", col ="red")legend("bottomright", legend =c("JLD", "natural"), lty =1, col =c("blue", "red"))
Pearson's product-moment correlation
data: ddd$jld_peakmag and ddd$natq_peakmag
t = 4.9086, df = 46, p-value = 1.194e-05
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.3625576 0.7461337
sample estimates:
cor
0.586295
Code
plot(jld_peakmag ~ broodyr, ddd, type ="b", col ="blue", ylim =c(3000,20000))lines(natq_peakmag ~ broodyr, ddd, type ="b", col ="red")legend("topleft", legend =c("JLD", "natural"), lty =1, col =c("blue", "red"))
Pearson's product-moment correlation
data: jldflow$jld_peaktime and lead(jldflow$jld_peaktime)
t = 1.0467, df = 44, p-value = 0.3009
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1407981 0.4268542
sample estimates:
cor
0.1558709
Code
d <- natflow %>%filter(flowstn =="SnakeNat")cor.test(d$natq_peakmag, lead(d$natq_peakmag))
Pearson's product-moment correlation
data: d$natq_peakmag and lead(d$natq_peakmag)
t = 0.17576, df = 45, p-value = 0.8613
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.2629533 0.3110188
sample estimates:
cor
0.02619124
Code
cor.test(d$natq_peaktime, lead(d$natq_peaktime))
Pearson's product-moment correlation
data: d$natq_peaktime and lead(d$natq_peaktime)
t = 0.85953, df = 45, p-value = 0.3946
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1661387 0.3996718
sample estimates:
cor
0.1270916
Code
d <- airtemp %>%filter(tempstn =="moose")cor.test(d$temp_falmean, lead(d$temp_falmean))
Pearson's product-moment correlation
data: d$temp_falmean and lead(d$temp_falmean)
t = 2.5647, df = 56, p-value = 0.01303
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.07193934 0.53749544
sample estimates:
cor
0.3242108
Code
cor.test(d$temp_winmean, lead(d$temp_winmean))
Pearson's product-moment correlation
data: d$temp_winmean and lead(d$temp_winmean)
t = 0.82595, df = 58, p-value = 0.4122
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1502169 0.3521051
sample estimates:
cor
0.1078205
Code
cor.test(d$temp_sprmean, lead(d$temp_sprmean))
Pearson's product-moment correlation
data: d$temp_sprmean and lead(d$temp_sprmean)
t = 0.96896, df = 52, p-value = 0.337
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1395630 0.3871302
sample estimates:
cor
0.1331742
Code
cor.test(d$temp_summean, lead(d$temp_summean))
Pearson's product-moment correlation
data: d$temp_summean and lead(d$temp_summean)
t = 1.3246, df = 53, p-value = 0.191
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.09059664 0.42415727
sample estimates:
cor
0.1790029
Code
# correlations among natural, managed, and combined winter flowddd <- jldflow %>%select(broodyr, jld_annmin) %>%left_join(natflow %>%filter(flowstn =="SnakeNat") %>%select(broodyr, natq_annmin)) %>%left_join(natflow %>%filter(flowstn =="SnakeBeFlat") %>%select(broodyr, natq_annmin) %>%rename(expq_annmin = natq_annmin)) ggpairs(ddd)ggpairs(ddd %>%filter(broodyr >=1989))ddd <- jldflow %>%select(broodyr, jld_peakmag) %>%left_join(natflow %>%filter(flowstn =="SnakeNat") %>%select(broodyr, natq_peakmag)) %>%left_join(natflow %>%filter(flowstn =="SnakeBeFlat") %>%select(broodyr, natq_peakmag) %>%rename(expq_peakmag = natq_peakmag)) ggpairs(ddd)ggpairs(ddd %>%filter(broodyr >=1989))ddd <- jldflow %>%select(broodyr, jld_peaktime) %>%left_join(natflow %>%filter(flowstn =="SnakeNat") %>%select(broodyr, natq_peaktime)) %>%left_join(natflow %>%filter(flowstn =="SnakeBeFlat") %>%select(broodyr, natq_peaktime) %>%rename(expq_peaktime = natq_peaktime)) ggpairs(ddd)ggpairs(ddd %>%filter(broodyr >=1989))# winter flow time series plotsddd <- jldflow %>%select(broodyr, jld_annmin) %>%left_join(natflow %>%filter(flowstn =="SnakeNat") %>%select(broodyr, natq_annmin)) %>%mutate(tot_annmin = jld_annmin + natq_annmin,prop_annmin = jld_annmin/tot_annmin) %>%filter(!is.na(tot_annmin))ddd$cor <-NAddd$cor[5:44] <-rollapply(ddd, width =9, function(x) abs(cor(x[,2], x[,3])), by.column =FALSE)par(mfrow =c(3,1), mar =c(3,4,0.5,0.5), mgp =c(2.5,1,0))plot(tot_annmin ~ broodyr, ddd, type ="n", ylim =c(0,2500), xlab ="", ylab ="Winter flow (cfs)", bty ="l")polygon(x =c(ddd$broodyr, rev(ddd$broodyr)), y =c(rep(0, times =dim(ddd)[1]), rev(ddd$tot_annmin)), border =NA, col ="grey")polygon(x =c(ddd$broodyr, rev(ddd$broodyr)), y =c(rep(0, times =dim(ddd)[1]), rev(ddd$natq_annmin)), border =NA, col ="white")polygon(x =c(ddd$broodyr, rev(ddd$broodyr)), y =c(rep(0, times =dim(ddd)[1]), rev(ddd$jld_annmin)), border =NA, col ="white")polygon(x =c(ddd$broodyr, rev(ddd$broodyr)), y =c(rep(0, times =dim(ddd)[1]), rev(ddd$natq_annmin)), border =NA, col = scales::alpha("darkorchid2", 1))polygon(x =c(ddd$broodyr, rev(ddd$broodyr)), y =c(rep(0, times =dim(ddd)[1]), rev(ddd$jld_annmin)), border =NA, col = scales::alpha("goldenrod1", 1))legend("topright", legend =c("Total", "Natural", "Managed"), fill =c("grey", "darkorchid2", "goldenrod1"), bty ="n")plot(prop_annmin ~ broodyr, ddd, type ="l", bty ="l", xlab ="", ylab ="JLD contribution to winter flow")points(prop_annmin ~ broodyr, ddd, pch =16)plot(cor ~ broodyr, ddd, type ="l", bty ="l", xlab ="", ylab ="Correlation (rolling 9-year window)", ylim =c(0,1))points(cor ~ broodyr, ddd, pch =16)abline(h =0.6, lty =2, col ="red")
3.3 Select Covariates and Standardize
Pull out relevant variables, trim to temporal extent of redd count data (by brood year. I.e., redd counts start at 1971 but environmental data starts at 1967), and standardize (mean centered and scaled).
Code
# Managed flow variablescovsrc_jldq <- jldramp %>%select(broodyr, jld_rampdur, jld_rampratemindoy, jld_rampratemin_log) %>%filter(broodyr >= minby) %>%left_join(jldflow %>%select(broodyr, jld_winmean, jld_winmin, jld_winvar, jld_summean, jld_peakmag, jld_peaktime)) %>%#mutate(jld_winmin_log = ifelse(jld_winmin_log < 4, NA, jld_winmin_log)) %>%mutate(z_jld_rampdur =scale(jld_rampdur, center =TRUE, scale =TRUE)[,1], z_jld_rampratemindoy =scale(jld_rampratemindoy, center =TRUE, scale =TRUE)[,1], z_jld_rampratemin_log =scale(jld_rampratemin_log, center =TRUE, scale =TRUE)[,1],z_jld_winmean =scale(jld_winmean, center =TRUE, scale =TRUE)[,1],z_jld_winmin =scale(jld_winmin, center =TRUE, scale =TRUE)[,1],z_jld_winvar =scale(jld_winvar, center =TRUE, scale =TRUE)[,1],z_jld_summean =scale(jld_summean, center =TRUE, scale =TRUE)[,1],z_jld_peakmag =scale(jld_peakmag, center =TRUE, scale =TRUE)[,1],z_jld_peaktime =scale(jld_peaktime, center =TRUE, scale =TRUE)[,1])#ggpairs(covsrc_jldq %>% select(broodyr, jld_rampdur, jld_rampratemindoy, jld_rampratemin_log, jld_winmean, jld_winmin, jld_winvar, jld_summean, jld_peakmag, jld_peaktime))# Managed flow variables - ramp-down onlycovsrc_jldq_rd <- jldramp %>%select(broodyr, jld_rampdur, jld_rampratemindoy, jld_rampratemin_log) %>%filter(broodyr >= minby) %>%#mutate(jld_rampratemin = ifelse(jld_rampratemin < -2000, NA, jld_rampratemin)) %>%mutate(z_jld_rampdur =scale(jld_rampdur, center =TRUE, scale =TRUE)[,1], z_jld_rampratemindoy =scale(jld_rampratemindoy, center =TRUE, scale =TRUE)[,1], z_jld_rampratemin_log =scale(jld_rampratemin_log, center =TRUE, scale =TRUE)[,1])#ggpairs(covsrc_jldq_rd %>% select(broodyr, jld_rampdur, jld_rampratemindoy, jld_rampratemin_log))# Natural/wild flow variables covsrc_natq <- natflow %>%filter(flowstn %in%c("SnakeNat")) %>%# make sure flow station is correct!select(flowstn, broodyr, natq_falmean_log, natq_winmean_log, natq_sprmean_log, natq_summean_log, natq_winvar, natq_peakmag, natq_peaktime) %>%#rename(flowstn = site) %>% filter(broodyr >= minby) %>%mutate(z_natq_winvar =scale(natq_winvar, center =TRUE, scale =TRUE)[,1]) %>%mutate(z_natq_falmean_log =scale(natq_falmean_log, center =TRUE, scale =TRUE)[,1], z_natq_winmean_log =scale(natq_winmean_log, center =TRUE, scale =TRUE)[,1], z_natq_sprmean_log =scale(natq_sprmean_log, center =TRUE, scale =TRUE)[,1], z_natq_summean_log =scale(natq_summean_log, center =TRUE, scale =TRUE)[,1], z_natq_peakmag =scale(natq_peakmag, center =TRUE, scale =TRUE)[,1], z_natq_peaktime =scale(natq_peaktime, center =TRUE, scale =TRUE)[,1]) %>%ungroup()#ggpairs(covsrc_natq %>% select(broodyr, natq_falmean_log, natq_winmean_log, natq_sprmean_log, natq_summean_log, natq_winvar, natq_peakmag, natq_peaktime))# Experienced flow variablescovsrc_expq <- natflow %>%filter(flowstn %in%c("SnakeBeFlat")) %>%select(flowstn, broodyr, natq_winmean, natq_winvar, natq_summean, natq_peakmag, natq_peaktime) %>%filter(broodyr >= minby) %>%mutate(z_natq_winmean =scale(natq_winmean, center =TRUE, scale =TRUE)[,1], z_natq_winvar =scale(natq_winvar, center =TRUE, scale =TRUE)[,1], z_natq_summean =scale(natq_summean, center =TRUE, scale =TRUE)[,1], z_natq_peakmag =scale(natq_peakmag, center =TRUE, scale =TRUE)[,1], z_natq_peaktime =scale(natq_peaktime, center =TRUE, scale =TRUE)[,1])#ggpairs(covsrc_expq %>% select(broodyr, natq_winmean, natq_winvar, natq_summean, natq_peakmag, natq_peaktime))# Temperature variablescovsrc_temp <- airtemp %>%filter(tempstn %in%c("moose")) %>%select(tempstn, broodyr, temp_falmean, temp_winmean, temp_sprmean, temp_summean) %>%#rename(tempstn = site) %>% #group_by(tempstn) %>%filter(broodyr >= minby) %>%mutate(z_temp_falmean =scale(temp_falmean, center =TRUE, scale =TRUE)[,1], z_temp_winmean =scale(temp_winmean, center =TRUE, scale =TRUE)[,1], z_temp_sprmean =scale(temp_sprmean, center =TRUE, scale =TRUE)[,1], z_temp_summean =scale(temp_summean, center =TRUE, scale =TRUE)[,1]) %>%ungroup()#ggpairs(covsrc_temp %>% select(broodyr, temp_falmean, temp_winmean, temp_sprmean, temp_summean))
Create and write out summary tables (means and standard deviations)
3.4.1 Separate natural and managed flow components
Age-0 (4-year lag)
Code
redds3a <- redds2redds3a$broodyr <- redds3a$year -4# create broodyr variable for joiningredds3a$tempstn <-ifelse(redds3a$stream %in%c("Christiansen", "Dave", "Laker"), "afton", "moose") # basin ID to match to NWS temp stationredds3a$flowstn <-ifelse(redds3a$stream %in%c("Christiansen", "Dave", "Laker"), "Salt", "SnakeNat") # basin ID to match to USGS flow station redds3a <- redds3a %>%left_join(covsrc_jldq, by ="broodyr") %>%left_join(covsrc_natq, by =c("broodyr", "flowstn")) %>%left_join(covsrc_temp, by =c("broodyr", "tempstn"))
Age-1 (3-year lag)
Code
redds3b <- redds2redds3b$broodyr <- redds3b$year -3# create broodyr variable for joiningredds3b$tempstn <-ifelse(redds3b$stream %in%c("Christiansen", "Dave", "Laker"), "afton", "moose") # basin ID to match to NWS temp stationredds3b$flowstn <-ifelse(redds3b$stream %in%c("Christiansen", "Dave", "Laker"), "Salt", "SnakeNat") # basin ID to match to USGS flow station redds3b <- redds3b %>%left_join(covsrc_jldq, by ="broodyr") %>%left_join(covsrc_natq, by =c("broodyr", "flowstn")) %>%left_join(covsrc_temp, by =c("broodyr", "tempstn"))
3.4.2 Experienced flow
Age-0 (4-year lag)
Code
redds3c <- redds2redds3c$broodyr <- redds3c$year -4# create broodyr variable for joiningredds3c$tempstn <-ifelse(redds3c$stream %in%c("Christiansen", "Dave", "Laker"), "afton", "moose") # basin ID to match to NWS temp stationredds3c$flowstn <-ifelse(redds3c$stream %in%c("Christiansen", "Dave", "Laker"), "Salt", "SnakeBeFlat") # basin ID to match to USGS flow station redds3c <- redds3c %>%left_join(covsrc_jldq_rd, by ="broodyr") %>%left_join(covsrc_expq, by =c("broodyr", "flowstn")) %>%left_join(covsrc_temp, by =c("broodyr", "tempstn"))
Age-1 (3-year lag)
Code
redds3d <- redds2redds3d$broodyr <- redds3d$year -3# create broodyr variable for joiningredds3d$tempstn <-ifelse(redds3d$stream %in%c("Christiansen", "Dave", "Laker"), "afton", "moose") # basin ID to match to NWS temp stationredds3d$flowstn <-ifelse(redds3d$stream %in%c("Christiansen", "Dave", "Laker"), "Salt", "SnakeBeFlat") # basin ID to match to USGS flow station redds3d <- redds3d %>%left_join(covsrc_jldq_rd, by ="broodyr") %>%left_join(covsrc_expq, by =c("broodyr", "flowstn")) %>%left_join(covsrc_temp, by =c("broodyr", "tempstn"))