library(knitr) library(ggplot2) library(gridExtra) library(GroundfishCondition) library(viridis) options(stringsAsFactors = FALSE) source(paste0(getwd(), "/R/get.lwdata.R")) # Consider for 2020 setting a lower limit on N for computing length-weight residuals. 2 or 10 fish might # be too variable to really mean much in this kind of analysis. Maybe there is support from the literature # for a minimum sample size for length-weight residuals used to indicate fish condition. EBS.lwdata <- get.lwdata(region = "BS") # lwdata["YEAR"] <- round(lwdata["CRUISE"]/100,digits=0) -- (now 10/2019 handled in get_data_geostat) head(EBS.lwdata) str(EBS.lwdata)
Contributed by Ned Laman^1^
^1^ Resource Assessment and Conservation Engineering Division, Alaska Fisheries Science Center, National Marine Fisheries Service, NOAA
Contact: ned.laman@noaa.gov
Last updated: October 2018
Description of Indicator: Length-weight residuals represent how heavy a fish is per unit body length and are an indicator of somatic growth (Brodeur et al., 2004). Therefore, length-weight residuals, as proxy for fish condition via somatic growth, can be considered an indicator of ecosystem productivity. Positive length-weight residuals indicate better condition (i.e., heavier per unit length) than negative residuals indicating poorer condition (i.e., lighter per unit length). Fish condition calculated in this way reflects fish growth trajectories which likely have implications for their survival (Paul and Paul, 1999; Boldt and Haldorson, 2004).
```rFigure 1. AFSC/RACE GAP summer bottom trawl survey strata (10-90) and station locations (x) on the eastern Bering Sea Shelf and in the Northern Bering Sea. ", echo=FALSE} include_graphics("EBS_NBS_2019.png")
Paired lengths and weights of individual fishes were examined from the Alaska Fisheries Science Center's Resource Assessment and Conservation Engineering (AFSC/RACE) - Groundfish Assessment Program's (GAP) bottom trawl surveys of the eastern Bering Sea (EBS) shelf and Northern Bering Sea (NBS). Fish condition analyses were applied to Walleye pollock (_Gadus chalcogrammus_), Pacific cod (_Gadus macrocephalus_), Arrowtooth flounder (_Atheresthes stomias_), Yellowfin sole (_Limanda aspera_), Flathead sole (_Hippoglossoides elassodon_), Northern rock sole (_Lepidopsetta polyxystra_), and Alaska Plaice (_Pleuronectes quadrituberculatus_) collected in bottom trawls at standard stations (Figure 1); no corner stations or non-standard strata were included. For these analyses and results, survey strata 31 and 32 were combined as stratum 30; strata 41, 42, and 43 were combined as stratum 40; and strata 61 and 62 were combined as stratum 60. Non-standard survey strata 82 and 90 were excluded from these analyses. Length-weight relationships for each species were estimated with a linear regression of log-transformed values over all years and areas where data were available (EBS: 1982-2019, NBS: 2010 & 2017-2019); length-weight relationships for age-1 pollock (fork length = 100-250 mm) and older (fork length > 250 mm) were calculated independently. Outliers were removed using a Bonferroni outlier test with a cutoff test statistic of 0.7 for removal. Predicted weights-at-length were calculated and subtracted from corresponding observed weights to compute individual residuals per fish. Length-weight residuals were then averaged by summer bottom trawl survey year over each survey area (i.e., EBS or NBS) and plotted relative to the long-term average. Average length-weight residuals were also compared by stratum and year on the EBS shelf to examine spatial variation in fish condition over this area. **Status and Trends**: Fish condition, indicated by length-weight residuals, has varied over time for all species examined (Figure 2 & 3). On the EBS shelf, with the exception of age-1 pollock, length-weight residuals in 2019 are positive or have continued an upward trend that began in 2017 or 2018 (Figure 2). Condition of age-1 pollock has remained relatively constant on the EBS shelf. It is interesting to note that the length-weight residuals for all EBS shelf species, where there were data, were negative in 1999; a cold year in the Bering Sea. In the NBS, the trends in fish condition are similar to those on the EBS shelf with length-weight residuals becoming more positive for adult pollock and Pacific cod, although length-weight residuals overall for adult pollock were negative (Figure 3). ```r ##EBS Calculations and figures EBS.species <- c(21740, 21741, 21720, 10261, 10210, 10110, 10285, 10130) EBS.speciesnames <- c("Pollock", "Age-1 Pollock", "Pacific cod", "Northern rock sole", "Yellowfin sole", "Arrowtooth flounder", "Alaska plaice", "Flathead sole") # EBS.lwdata<-subset(lwdata,lwdata["REGION"]=="BS") # EBS.lwdata <- subset(lwdata, lwdata["STRATUM"] > 9 & lwdata["STRATUM"] < 100) -- (now 10/2019 handled in get_data_geostat) ebsstrata <- EBS.lwdata$STRATUM # following code assigned stratum 30 to 31&32, 40 to 41,42,&43, etc (now 10/2019 handled in get_data_geostat) # EBS.lwdata["STRATUM"] <- round(EBS.lwdata["STRATUM"], digits = -1) EBS.lwdata$STRATUM[ebsstrata == 71 | ebsstrata == 70 | ebsstrata == 81] <- "NBS" #p<-substr(EBS.lwdata[,"STATIONID"],2,2) #p<-strtrim(EBS.lwdata[,"STATIONID"],2) #EBS.lwdata<-subset(EBS.lwdata,p=="-") EBS.lwdata$SPECIES_CODE <- ifelse(EBS.lwdata$SPECIES_CODE == 21740 & EBS.lwdata $LENGTH < 250 & EBS.lwdata$LENGTH >= 100, 21741, EBS.lwdata$SPECIES_CODE) EBS.lwdata <- na.omit(EBS.lwdata) myplot <- list() myplot2 <- list() ebs_lwdata_by_year <- array(dim=c(0,6)) colnames(ebs_lwdata_by_year) <- c("species", "yrs", "ymeans", "yn", "ysd", "yse") nbs_lwdata_by_year <- array(dim=c(0,6)) colnames(nbs_lwdata_by_year) <- c("species", "yrs", "ymeans", "yn", "ysd", "yse") # loop for length-weight residuals for(i in 1:length(EBS.species)){ # EBS tempdata <- subset(EBS.lwdata, EBS.lwdata$SPECIES_CODE == EBS.species[i]) tempdata <- subset(tempdata, tempdata$WEIGHT > 0) # this should be handled in the data call now, but leaving it for security tempdata["residuals"] <- lw.resids(tempdata$LENGTH, tempdata$WEIGHT, outlier.rm = TRUE) tempdata <- subset(tempdata, is.na(tempdata$residuals) == FALSE) # in 2020, change basis for NBS residuals to NBS only...in 2019 generated error in lm.fit: 0 (non-NA) cases # ebs.resid.dat <- subset(tempdata, tempdata$STRATUM != "NBS") # nbs.resid.dat <- subset(tempdata, tempdata$STRATUM == "NBS") # ebs.resid.dat["residuals"] <- lw.resids(ebs.resid.dat$LENGTH, ebs.resid.dat$WEIGHT, outlier.rm = TRUE) # nbs.resid.dat["residuals"] <- lw.resids(nbs.resid.dat$LENGTH, nbs.resid.dat$WEIGHT, outlier.rm = TRUE) # NBS tempdata.nbs <- subset(tempdata, tempdata$STRATUM == "NBS" & tempdata$YEAR > 2009) # tempdata.nbs <- subset(nbs.resid.dat, nbs.resid.dat$YEAR > 2009) # EBS tempdata <- subset(tempdata, tempdata$STRATUM != "NBS") # tempdata <- ebs.resid.dat yrs = sort(unique(tempdata$YEAR)) sp.name <- rep(EBS.speciesnames[i], length(yrs)) ymeans = tapply(tempdata$residuals, tempdata$YEAR, mean) yn = tapply(tempdata$residuals, tempdata$YEAR, length) ysd = tapply(tempdata$residuals, tempdata$YEAR, sd) yse = ysd/sqrt(yn) ebs.data.summary <- data.frame(yrs, ymeans, yn, ysd, yse) ebs.named.summary <- data.frame(cbind(sp.name, ebs.data.summary)) ebs_lwdata_by_year <- rbind(ebs_lwdata_by_year, ebs.named.summary) # plot EBS length-weight residuals, all species on list p <- ggplot(ebs.data.summary, aes(x = yrs, y = ymeans), cex = 2) + geom_bar(position = position_dodge(), stat = "identity", fill = "plum", col = "black") + geom_errorbar(aes(ymin = ymeans-yse, ymax = ymeans+yse), width = 0.30) + xlim(1996.5, 2020.5) + ggtitle(paste(EBS.speciesnames[i])) + geom_hline(yintercept = 0, color = "black") + theme_bw() + theme(plot.title = element_text(size = 20, face = "bold")) + theme(panel.grid.major = element_blank()) + theme(axis.text.x = element_text(size = 20)) + theme(axis.text.y = element_text(size = 20)) + theme(axis.title.x = element_text(size = 20)) + theme(axis.title.y = element_text(size = 20)) + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + labs(title = paste(EBS.speciesnames[i]), y = "Length-weight residual", x = "Year") print(p) pltName <- paste( EBS.speciesnames[i],"plot", sep = '' ) myplot[[pltName]] <- p # NBS yrs = sort(unique(tempdata.nbs$YEAR)) sp.name <- rep(EBS.speciesnames[i], length(yrs)) ymeans = tapply(tempdata.nbs$residuals, tempdata.nbs$YEAR, mean) yn = tapply(tempdata.nbs$residuals, tempdata.nbs$YEAR, length) ysd = tapply(tempdata.nbs$residuals, tempdata.nbs$YEAR, sd) yse = ysd/sqrt(yn) nbs.data.summary <- data.frame(yrs, ymeans, yn, ysd, yse) nbs.named.summary <- data.frame(cbind(sp.name, nbs.data.summary)) nbs_lwdata_by_year <- rbind(nbs_lwdata_by_year, nbs.named.summary) # plot NBS length-weight residuals, p <- ggplot(nbs.data.summary, aes(x = yrs, y = ymeans), cex = 2) + geom_bar(position = position_dodge(), stat = "identity", fill = "plum", col = "black") + geom_errorbar(aes(ymin = ymeans-yse, ymax = ymeans+yse), width = 0.30) + xlim(2009, 2020) + ggtitle(paste(EBS.speciesnames[i])) + geom_hline(yintercept = 0, color = "black") + theme_bw() + theme(plot.title = element_text(size = 20, face = "bold")) + theme(panel.grid.major = element_blank()) + theme(axis.text.x = element_text(size = 20)) + theme(axis.text.y = element_text(size = 20)) + theme(axis.title.x = element_text(size = 20)) + theme(axis.title.y = element_text(size = 20)) + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + labs(title = paste(EBS.speciesnames[i]), y = "Length-weight residual", x = "Year") print(p) pltName <- paste( EBS.speciesnames[i], "plot", sep = '' ) myplot2[[pltName]] <- p } # write.csv(ebs.data.summary, "EBS_data_summary.csv", row.names = FALSE) # write.csv(nbs.data.summary, "NBS_data_summary.csv", row.names = FALSE)
```rFigure 2. Length-weight residuals for seven groundfish species and age-1 pollock collected on the AFSC/RACE GAP standard summer bottom trawl survey of the eastern Bering Sea shelf, 1997-2019.", message=FALSE, warning=FALSE} grid.arrange(grobs=myplot,ncol=2)
```r png("EBSbyyear.png",width=6,height=7,units="in",res=300) grid.arrange(grobs=myplot,ncol=2) dev.off() write.csv(ebs_lwdata_by_year,"EBS_lwdata_by_year.csv",row.names=FALSE)
```rFigure 3. Length-weight residuals for two groundfish species and age-1 pollock collected on the AFSC/RACE GAP summer bottom trawl survey of the Northern Bering Sea, 2010 and 2017-2019.", message=FALSE, warning=FALSE} grid.arrange(grobs=myplot2[1:3],ncol=2)
```r png("NBSbyyear.png",width=6,height=7,units="in",res=300) # drop indexing in the following statement to present all 7 species in the NBS grid.arrange(grobs=myplot2[1:3],ncol=2) dev.off() write.csv(nbs_lwdata_by_year,"NBS_lwdata_by_year.csv",row.names=FALSE)
Spatial patterns of length-weight residuals over the EBS shelf were apparent for most species (Figure 4); the legend identifying each stratum is plotted in the Arrowtooth flounder plate over a section of the plot without data. Generally, fish were in better condition on the outer shelf (strata 50 and 60) and length-weight residuals were positive for nearly all species in the last 3-5 survey years; gadids tended toward having negative residuals on the inner shelf (strata 10 and 20). Flatfishes demonstrated more mixed results within species and across strata with positive residuals in all strata for Northern rock sole, Yellowfin sole, and Arrowtooth flounder as well as lower condition for Alaska plaice on the inner shelf and for Flathead sole on the outer shelf.
#By stratum graphs lwdata_by_strata<-array(dim = c(0,7)) colnames(lwdata_by_strata) <- c("species", "strata", "yrs", "ymeans", "yn", "ysd", "yse") for(i in 1:length(EBS.species)){ tempdata <- subset(EBS.lwdata, EBS.lwdata$SPECIES_CODE == EBS.species[i] & EBS.lwdata$STRATUM != "NBS") tempdata["residuals"] <- lw.resids(tempdata$LENGTH, tempdata$WEIGHT, outlier.rm = TRUE) tempdata <- subset(tempdata, is.na(tempdata$residuals) == FALSE) yrs = sort(unique(tempdata$YEAR)) ymeans = aggregate(tempdata$residuals, by = list(tempdata$YEAR, tempdata$STRATUM), mean) ysd = aggregate(tempdata$residuals, by = list(tempdata$YEAR, tempdata$STRATUM), sd) yn = aggregate(tempdata$residuals, by = list(tempdata$YEAR, tempdata$STRATUM), length) yse = ysd$x/sqrt(yn$x) data.summary <- data.frame(species = EBS.species[i], strata = ymeans$Group.2, yrs = ymeans$Group.1, ymeans = ymeans$x, yn = yn$x, ysd = ysd$x, yse = yse) lwdata_by_strata<-rbind(lwdata_by_strata, data.summary) dat1 <- subset(data.summary, data.summary$ymeans >= 0) dat2 <- subset(data.summary, data.summary$ymeans < 0) p2 <- ggplot() + geom_bar(data = dat1, aes(x = yrs, y = ymeans, fill = factor(strata)), stat = "identity", col = "black") + geom_bar(data = dat2, aes(x = yrs, y = ymeans, fill = factor(strata)), stat = "identity", col = "black") + scale_fill_brewer(palette = "BrBG") + geom_hline(yintercept = 0, color = "black") + xlim(1996.5, 2020.5)+ theme_bw() + theme(plot.title = element_text(size = 20, face = "bold")) + theme(axis.text.x = element_text(size = 18)) + theme(axis.text.y = element_text(size = 18)) + theme(axis.title.x = element_text(size = 18)) + theme(axis.title.y = element_text(size = 18)) + theme(legend.title = element_text(size = 20)) + theme(legend.text = element_text(size = 20)) + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + labs(title = paste(EBS.speciesnames[i]), y = "Length-weight residual", x = "Year", fill = "Stratum") # In 2019 placed legend in ATF plot since no data on lefthand side of graph if(i == 6){ p2 <- p2 + theme(legend.background = element_blank(), legend.box.background = element_rect(size = 1)) + theme(legend.position = c(0.15, 0.5)) + theme(legend.title = element_text("Stratum", face = "bold")) + theme(legend.text = element_text(size = 18))} if(i != 6){ p2 <- p2 + theme(legend.position = "none")} pltName <- paste0( EBS.speciesnames[i], "plot" ) myplot[[pltName]] <- p2}
```rFigure 4. Length-weight residuals by survey stratum (10-60) for seven eastern Bering Sea shelf groundfish species sampled in the AFSC/RACE GAP standard summer bottom trawl survey. Legend describing survey strata is located in the Arrowtooth flounder panel.",message=FALSE, warning=FALSE} grid.arrange(grobs = myplot, ncol = 2)
```r png("EBSbystrata.png", width = 6, height = 7, units = "in", res = 300) grid.arrange(grobs = myplot, ncol = 2) dev.off() write.csv(lwdata_by_strata, "EBS_lwdata_by_strata.csv", row.names = FALSE)
Factors influencing observed trends: There are several factors that may inlfuence the observed temporal and spatial patterns in fish condition over the EBS shelf and NBS. Water temperature could explain some of the spatial and temporal variability in length-weight residuals. Water temperatures during the 1999 survey were particularly cold in the Bering Sea and this corresponded to a year of negative length-weight residuals for all groundfish examined where data existed. Despite the abundant large crustacean zooplankton and relatively high microzooplankton productivity present in 1999 (Hunt et al., 2008), temperature-dependent groundfish spatial distributions may have affected the spatial overlap of fish and their prey thereby impacting fish growth and condition in that year. Cold temperatures may have also affected fish energy requirements in that year. Conversely, recent and continuing warm temperatures across the Bering Sea shelf since the "Warm Blob" (Bond et al., 2015; Stabeno et al., 2019) may be influencing the present positive trend in fish condition for the species examined.
Other factors that could affect length-weight residuals include survey timing, stomach fullness, and fish movement patterns, all of which may be confounded by warming water temperatures as the AFSC/RACE GAP summer bottom trawl survey progresses from the southeast to the northwest across the study area. The starting date of length-weight data collections has varied annually from late May to early June (except 1998, where the first data available were collected in late July). Since the survey begins on the inner shelf and progresses to the outer shelf, higher fish condition on the outer shelf could relate to the timing of collection as well as to the location where fish are caught. Another consideration that cannot be addressed with the present data set is that the fish weights used in these analyses are typically inclusive of stomach weights so that gut fullness could influence the length-weight residuals. Since feeding conditions likely change over space and time, how much the fish ate at its last meal and the proportion of its total body weight attributable to the gut weight could be an important factor influencing the length-weight residuals. We can also expect some fish to exhibit seasonal or ontogenetic movement patterns during the survey months. For example, seasonal migrations of pollock occur from overwintering areas along the outer shelf to shallow waters (90-140 m) for spawning; Pacific cod concentrate on the shelf edge and upper slope (100-250 m) in the winter and move to shallower waters (generally <100 m) in the summer; and Arrowtooth flounder are distributed throughout the continental shelf until age 4, when, at older ages, they disperse to occupy both the shelf and the slope (Witherell, 2000). How these and other factors influence fish condition derived from length-weight residuals is not known at this time and it is unlikely that we can separate in-season spatiotemporal trends with these data. It is also important to note that the data and analyses reported here depict spatial and temporal variation of length-weight residuals for a small subset of the fish species collected in the AFSC/RACE GAP summer bottom trawl surveys of the EBS and NBS and that they do not inform the mechanisms or processes behind the observed patterns.
Implications: Fish condition can be considered an indicator of ecosystem productivity with implications for fish survival. In Prince William Sound, the condition of herring prior to the winter may determine their subsequent survival (Paul and Paul, 1999). Thus, the condition of EBS and NBS groundfishes may provide us with insight into ecosystem productivity as well as fish survival and population health. However, survivorship is likely affected by many factors not examined here. We also must consider that, in these analyses, fish condition was computed for all sizes of fishes combined. Examining condition of early juvenile stage fishes not yet recruited to the fishery, or the condition of adult fishes separately, could provide greater insight into the value of length-weight residuals as an indicator of individual health or survivorship. Research on this topic in Alaska is currently under way and will examine correlative relationships between length-weight residuals and survivorship for early and late juvenile stages as well as for adults (Rooper et al., in prep.).
The positive trend in fish condition observed over the last two to three AFSC/RACE GAP EBS and NBS bottom trawl surveys (i.e., increasingly positive length-weight residuals) could be related to concurrent trends in other ecosystem covariates and needs to be examined further. Trends such as warmer water temperatures following the "Warm Blob" event of 2014-15 (Bond et al., 2015) and reduced sea ice and cold pool areal extent in the eastern Bering Sea (Stabeno et al., 2019) may affect fish condition here in ways that are yet to be determined. As we continue to add years of fish condition indices to the record and expand on our knowledge of the relationships between condition, growth, production, survival, and the ecosystem, these data may increase our insight into the health of fish populations in the EBS and NBS.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.