library(dplyr)
library(tidyr)
library(janitor)
library(kde1d)
library(kableExtra)
library(survival)
library(ggsurvfit)
library(ggpubr)
library(patchwork)
# at time of publication we need the ggplot v3.4.4 because the most recent version (3.5.0) does not work with the patchwork package
<- "http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_3.4.4.tar.gz"
old.version install.packages(old.version, repos=NULL, type="source")
library(ggplot2)
set.seed(123)
1 Survival curves model
The aim of this chapter is to model the pre-slaughter mortality rates of farmed shrimp across the production cycle. We use the Guesstimate model by Waldhorn and Autric (2023), in which they estimated the number of shrimp farmed annually and alive at any time, to form the basis of our model.
We focus on three taxa: P. vannamei, P. monodon, and Macrobrachium—the latter covers M. rosenbergii and M. nipponese.
First, load the required packages and set the seed so that our data is reproducible.
Next, create functions to compare the summary statistics of two data frames.
=function(x,y){
give.summary::kable(data.frame("original"=c(quantile(x, probs=c(0.05,0.5,0.95)),
knitrmean=mean(x), sd=sd(x), min=min(x), max=max(x)),
"new"=c(quantile(y, probs=c(0.05,0.5,0.95)),
mean=mean(y), sd=sd(y), min=min(y), max=max(y))), table.attr = 'data-quarto-disable-processing="true"') %>%
kable_styling(full_width=FALSE, font_size=9)
}
=function(a1, b1, c1, a2, b2, c2){
give.full.summary::kable(data.frame(
knitr"original"=c(quantile(a1, probs=c(0.05,0.5,0.95)),
mean=mean(a1), sd=sd(a1), min=min(a1), max=max(a1)),
"new"=c(quantile(a2, probs=c(0.05,0.5,0.95)),
mean=mean(a2), sd=sd(a2), min=min(a2), max=max(a2)),
"original"=c(quantile(b1, probs=c(0.05,0.5,0.95)),
mean=mean(b1), sd=sd(b1), min=min(b1), max=max(b1)),
"new"=c(quantile(b2, probs=c(0.05,0.5,0.95)),
mean=mean(b2), sd=sd(b2), min=min(b2), max=max(b2)),
"original"=c(quantile(c1, probs=c(0.05,0.5,0.95)),
mean=mean(c1), sd=sd(c1), min=min(c1), max=max(c1)),
"new"=c(quantile(c2, probs=c(0.05,0.5,0.95)),
mean=mean(c2), sd=sd(c2), min=min(c2), max=max(c2))),
table.attr = 'data-quarto-disable-processing="true"',
col.names = rep(c("original", "new"), 3)) %>%
kable_styling(full_width=FALSE, font_size=9)
}
1.1 Preparing data
For all the .csv files used in this chapter, see the GitHub repository.
We downloaded the 5000 samples created by the Guesstimate model for the three taxa for each of:
- The number of individuals that die on farms annually
- Days lived by life stage, given the shrimp dies in the life stage (e.g., a shrimp that dies in the larval stage lives for an average of two days)
- Mortality rates within each life stage, conditional upon having lived to that life stage
Note: the guesstimate model re-samples each time it is opened so the figures you see may differ slightly from those used here.
To best sample from the Guesstimate data (especially the tails of the distributions) and to remove errors created by Guesstimate (e.g., negative values), we generated 100,000 synthetic samples for each of these, based off the original 5000 guesstimate samples. To do this, we use the kde1d
function, which estimates a kernel density function from the 5000 samples, and the rkde1d
function, which generates n (in our case 100,000) samples from the estimated kernel density.
1.1.1 Number of shrimp that die on farms annually
Starting with the number of individuals that die on farms annually, we first load the samples from Guesstimate, then make the 100,000 samples.
# loading die on farms samples, taken from Guesstimate model
<-read.csv("../data/guesstimate/die_on_farm_samples.csv", header=TRUE, sep=",")
allspecies_dof_samp
<-allspecies_dof_samp$vannamei[allspecies_dof_samp$vannamei>0] %>% # Cell GZ in the Guesstimate model
vannamei_dof# removing negative values created by Guesstimate
kde1d(xmin=0) %>% # running kde1d function and ensuring no values below 0 are created
rkde1d(100000,.) # creating 100,000 samples from the data
# now we can compare the summary statistics of the old and new data
give.summary(allspecies_dof_samp$vannamei, vannamei_dof)%>%
add_header_above(c("P. vannamei"=3)) # creating a header that spans the full 3 columns of the table
# repeat this for other taxa
<-allspecies_dof_samp$monodon[allspecies_dof_samp$monodon>0] %>% # Cell ES in the Guesstimate model
monodon_dofkde1d(xmin=0) %>%
rkde1d(100000,.)
give.summary(allspecies_dof_samp$monodon, monodon_dof)%>%
add_header_above(c("P. monodon"=3))
<-allspecies_dof_samp$macrobrachium[allspecies_dof_samp$macrobrachium>0] %>% # Cell BZ in the Guesstimate model
macro_dofkde1d(xmin=0) %>%
rkde1d(100000,.)
give.summary(allspecies_dof_samp$macrobrachium, macro_dof) %>%
add_header_above(c("Macrobrachium"=3))
original | new | |
---|---|---|
5% | 3.539500e+11 | 3.517307e+11 |
50% | 5.810000e+11 | 5.791339e+11 |
95% | 9.980500e+11 | 1.003184e+12 |
mean | 6.192688e+11 | 6.234259e+11 |
sd | 4.229737e+11 | 2.956778e+11 |
min | -1.490000e+13 | 5.696191e+08 |
max | 8.250000e+12 | 8.060032e+12 |
original | new | |
---|---|---|
5% | 29395000000 | 29124727717 |
50% | 52900000000 | 52723011534 |
95% | 93605000000 | 93893586229 |
mean | 56130860000 | 56014290871 |
sd | 20685345595 | 20640193828 |
min | 16000000000 | 21079491 |
max | 216000000000 | 215982898786 |
original | new | |
---|---|---|
5% | 9.400000e+10 | 9.381296e+10 |
50% | 1.650000e+11 | 1.646129e+11 |
95% | 3.180000e+11 | 3.190560e+11 |
mean | 1.802238e+11 | 1.804668e+11 |
sd | 8.362092e+10 | 8.210190e+10 |
min | 4.660000e+10 | 3.012260e+08 |
max | 1.620000e+12 | 1.604432e+12 |
Now we can calculate the proportion of farmed shrimp accounted for by each species for each of our 100,000 samples.
<-cbind(vannamei_dof, monodon_dof, macro_dof) # combining the 100,000 samples for each species into a data frame
allspecies_dof
<-as.data.frame(allspecies_dof) %>%
prop_allspeciesrowwise() %>%
mutate(van_prop=vannamei_dof/sum(vannamei_dof, monodon_dof, macro_dof), # calculating each sample as a proportion of the total shrimp, row-wise
mon_prop=monodon_dof/sum(vannamei_dof, monodon_dof, macro_dof),
macro_prop=macro_dof/sum(vannamei_dof, monodon_dof, macro_dof))
<-as.data.frame(prop_allspecies[,4:6]) # keeping only the proportions prop_allspecies_dof
1.1.2 Days lived by life stage
Next we load the data for the number of days lived by a shrimp, given that it dies within a certain life stage. The four life stages are larval, postlarval, juvenile-adult, and (if a shrimp survives all three) the days lived before slaughter, which we call the total farmed days.
# First load the data
<-read.csv("../data/guesstimate/vannamei_days_lived.csv", header=TRUE,sep=",") # Cells TE, VO, XM, and QV in the Guesstimate model
vannamei_days_samp<-read.csv("../data/guesstimate/monodon_days_lived.csv", header=TRUE, sep=",") # Cells MF, HI, OZ, and LW in the Guesstimate model
monodon_days_samp<-read.csv("../data/guesstimate/macrobrachium_days_lived.csv", header=TRUE, sep=",") # Cells AS, BJ, EY, and XT in the Guesstimate model
macrobrachium_days_samp
# Next make the 100,000 samples
<-data.frame(larval=rep(NA, 100000), # create empty data frame
vannamei_days_livedpostlarval=rep(NA, 100000),
juvenile.adult=rep(NA, 100000),
total.farmed=rep(NA, 100000))
# fill empty data frame with data simulated from Guesstimate data using kde1d function
$larval<-vannamei_days_samp$larval %>%
vannamei_days_livedkde1d(xmin=0) %>% # shrimp can't live for fewer than 0 days so we limit the distribution
rkde1d(100000,.)
$postlarval<-vannamei_days_samp$postlarval %>%
vannamei_days_livedkde1d() %>%
rkde1d(100000,.)
$juvenile.adult<-vannamei_days_samp$juvenile.adult %>%
vannamei_days_livedkde1d() %>%
rkde1d(100000,.)
give.full.summary(vannamei_days_samp$larval,
$postlarval,
vannamei_days_samp$juvenile.adult,
vannamei_days_samp$larval,
vannamei_days_lived$postlarval,
vannamei_days_lived$juvenile.adult) %>%
vannamei_days_livedadd_header_above(c(" "=1, "larval" = 2, "postlarval" = 2, "juvenile-subadult" = 2)) %>%
add_header_above(c("P. vannamei"=7))
# repeat for other species
<-data.frame(larval=rep(NA, 100000),
monodon_days_livedpostlarval=rep(NA, 100000),
juvenile.adult=rep(NA, 100000),
total.farmed=rep(NA, 100000))
$larval<-monodon_days_samp$larval %>%
monodon_days_livedkde1d(xmin=0) %>% # shrimp can't live for fewer than 0 days so we limit the distribution
rkde1d(100000,.)
$postlarval<-monodon_days_samp$postlarval %>%
monodon_days_livedkde1d() %>%
rkde1d(100000,.)
$juvenile.adult<-monodon_days_samp$juvenile.adult %>%
monodon_days_livedkde1d() %>%
rkde1d(100000,.)
give.full.summary(monodon_days_samp$larval,
$postlarval,
monodon_days_samp$juvenile.adult,
monodon_days_samp$larval,
monodon_days_lived$postlarval,
monodon_days_lived$juvenile.adult) %>%
monodon_days_livedadd_header_above(c(" "=1, "larval" = 2, "postlarval" = 2, "juvenile-subadult" = 2)) %>%
add_header_above(c("P. monodon"=7))
<-data.frame(larval=rep(NA, 100000),
macro_days_livedpostlarval=rep(NA, 100000),
juvenile.adult=rep(NA, 100000),
total.farmed=rep(NA, 100000))
$larval<-macrobrachium_days_samp$larval %>%
macro_days_livedkde1d(xmin=0) %>% # shrimp can't live for fewer than 0 days so we limit the distribution
rkde1d(100000,.)
$postlarval<-macrobrachium_days_samp$postlarval %>%
macro_days_livedkde1d() %>%
rkde1d(100000,.)
$juvenile.adult<-macrobrachium_days_samp$juvenile.adult %>%
macro_days_livedkde1d() %>%
rkde1d(100000,.)
give.full.summary(macrobrachium_days_samp$larval,
$postlarval,
macrobrachium_days_samp$juvenile.adult,
macrobrachium_days_samp$larval,
macro_days_lived$postlarval,
macro_days_lived$juvenile.adult) %>%
macro_days_livedadd_header_above(c(" "=1, "larval" = 2, "postlarval" = 2, "juvenile-subadult" = 2)) %>%
add_header_above(c("Macrobrachium"=7))
original | new | original | new | original | new | |
---|---|---|---|---|---|---|
5% | 0.5023743 | 0.4902677 | 11.154996 | 11.154865 | 53.13992 | 54.03571 |
50% | 2.1023025 | 2.1120241 | 14.918215 | 14.957922 | 80.29052 | 80.32173 |
95% | 8.5356682 | 8.9065270 | 20.017363 | 20.061194 | 106.91953 | 106.09696 |
mean | 3.1018999 | 3.0744436 | 15.171321 | 15.198329 | 80.38564 | 80.26579 |
sd | 3.2349854 | 3.1241976 | 2.734755 | 2.732966 | 17.21552 | 16.85421 |
min | 0.1249571 | 0.0002519 | 7.741822 | 7.395876 | 50.03272 | 44.74333 |
max | 33.8854679 | 33.7981077 | 30.754078 | 31.837442 | 109.99987 | 115.53883 |
original | new | original | new | original | new | |
---|---|---|---|---|---|---|
5% | 0.4963115 | 0.4996946 | 11.001184 | 11.068435 | 34.93126 | 35.489895 |
50% | 2.2152736 | 2.1858878 | 16.571929 | 16.617385 | 70.11952 | 70.076832 |
95% | 9.6407133 | 9.5278613 | 25.015574 | 24.962607 | 136.61865 | 136.631247 |
mean | 3.2634577 | 3.2441306 | 17.106562 | 17.157913 | 76.12007 | 76.350636 |
sd | 3.6398201 | 3.4359323 | 4.356787 | 4.337294 | 33.43386 | 33.148128 |
min | 0.0212167 | 0.0009423 | 6.723713 | 5.253515 | 13.39687 | 2.849361 |
max | 96.7623124 | 68.5132450 | 44.915889 | 46.008715 | 337.47740 | 338.425447 |
original | new | original | new | original | new | |
---|---|---|---|---|---|---|
5% | 1.9786751 | 1.9602180 | 29.987507 | 30.20970 | 60.63581 | 61.08796 |
50% | 7.6767357 | 7.6056272 | 42.342525 | 42.52669 | 95.11617 | 95.69554 |
95% | 29.9404670 | 29.3428149 | 59.741628 | 59.89201 | 149.64495 | 150.46335 |
mean | 10.6956641 | 10.6289836 | 43.351758 | 43.47981 | 98.96567 | 99.29394 |
sd | 10.5057846 | 10.1343738 | 9.262974 | 9.20008 | 27.81269 | 27.65936 |
min | 0.4628982 | 0.0007937 | 20.471376 | 17.33767 | 31.35562 | 23.32129 |
max | 159.2862181 | 155.5098833 | 82.711654 | 85.97558 | 300.38509 | 301.48431 |
Guesstimate produced a few large numbers of over one year for the total days farmed, which seems incorrect, so we remove these and restrict to:
- 215 days for P. vannamei (FAO (2009a) suggests the maximum cycle is 6 months in ongrowing with around a month of development prior to that, 7 months = ~214 days)
- 245 days for P. monodon (FAO (2009b) suggests the maximum cycle is >6 months in ongrowing, so we assume ~7 months, with around a month of development prior to that, 8 months = ~244 days)
- 335 day for Macrobrachium (New (2010, p.22; p.129) suggests that 11 months is the typical maximum length of a production cycle, 11 months= ~335.5 days)
The kde1d
function will still produce a few samples just above this estimation.
<-vannamei_days_samp$total_farmed_d[vannamei_days_samp$total_farmed_d<215]
vannamei_days_lived_total$total.farmed<-vannamei_days_lived_total %>%
vannamei_days_livedkde1d() %>%
rkde1d(100000,.)
give.summary(vannamei_days_lived_total, vannamei_days_lived$total.farmed) %>%
add_header_above(c("P. vannamei" = 3))
<-monodon_days_samp$total_farmed_d[monodon_days_samp$total_farmed_d<245]
monodon_days_lived_total$total.farmed<-monodon_days_lived_total %>%
monodon_days_livedkde1d() %>%
rkde1d(100000,.)
give.summary(monodon_days_lived_total, monodon_days_lived$total.farmed) %>%
add_header_above(c("P. monodon" = 3))
<-macrobrachium_days_samp$total_farmed_d[macrobrachium_days_samp$total_farmed_d<335]
macro_days_lived_total$total.farmed<-macro_days_lived_total %>%
macro_days_livedkde1d() %>%
rkde1d(100000,.)
give.summary(macro_days_lived_total, macro_days_lived$total.farmed) %>%
add_header_above(c("Macrobrachium" = 3))
original | new | |
---|---|---|
5% | 112.62194 | 112.85176 |
50% | 150.30559 | 150.24385 |
95% | 197.10220 | 195.97661 |
mean | 151.83696 | 151.71481 |
sd | 25.42041 | 25.13249 |
min | 82.55418 | 70.23521 |
max | 214.96775 | 225.03162 |
original | new | |
---|---|---|
5% | 143.34503 | 143.12522 |
50% | 172.88283 | 173.10137 |
95% | 211.21792 | 210.46603 |
mean | 174.34588 | 174.47863 |
sd | 20.53002 | 20.37596 |
min | 112.22230 | 107.01303 |
max | 244.54303 | 257.60783 |
original | new | |
---|---|---|
5% | 136.15204 | 136.34583 |
50% | 175.76759 | 176.33558 |
95% | 243.83641 | 242.91388 |
mean | 180.73839 | 180.95648 |
sd | 33.15951 | 32.80125 |
min | 100.31524 | 94.01438 |
max | 334.92005 | 348.78935 |
We will need the total farmed days in future chapters so we save them as csv files.
write.csv(data.frame(total.farmed=vannamei_days_lived$total.farmed),
file="../data/survival_curves/vannamei_totalfarmed_days.csv")
write.csv(data.frame(total.farmed=monodon_days_lived$total.farmed),
file="../data/survival_curves/monodon_totalfarmed_days.csv")
write.csv(data.frame(total.farmed=macro_days_lived$total.farmed),
file="../data/survival_curves/macro_totalfarmed_days.csv")
1.1.3 Mortality rates by life stage
Now we load the data for the mortality rates samples, then make the 100,000 samples.
<-read.csv("../data/guesstimate/vannamei_mortality_rates.csv",header=TRUE, sep=",") # Cells UY, UJ, and TF in the Guesstimate model
vannamei_mort_samp<-read.csv("../data/guesstimate/monodon_mortality_rates.csv", header=TRUE, sep=",") # Cells ZA, XZ, and YR in the Guesstimate model
monodon_mort_samp<-read.csv("../data/guesstimate/macrobrachium_mortality_rates.csv", header=TRUE, sep=",") # Cells VG, OX, and QS in the Guesstimate model
macrobrachium_mort_samp
<-data.frame(larval=rep(NA, 100000), # create empty data frame
vannamei_stage_probpostlarval=rep(NA, 100000),
juvenile.adult=rep(NA, 100000))
# fill empty data frame with data simulated from Guesstimate data using kde1d function
$larval<-vannamei_mort_samp$larval %>%
vannamei_stage_probkde1d(xmin = 0,
xmax = 1) %>% # Probabilities cannot be less than 0 or more than 1 so we add these as xmin and xmax
rkde1d(100000,.)
$postlarval<-vannamei_mort_samp$postlarval %>%
vannamei_stage_probkde1d(xmin = 0,
xmax = 1) %>%
rkde1d(100000,.)
$juvenile.adult<-vannamei_mort_samp$juvenile.adult[vannamei_mort_samp$juvenile.adult<1] %>%
vannamei_stage_probkde1d(xmin = 0, # The juvenile-adult samples from Guesstimate sampled some instances over 1 so we get rid of these first, or else the xmin and xmax functions won't work
xmax = 1) %>%
rkde1d(100000,.)
give.full.summary(vannamei_mort_samp$larval,
$postlarval,
vannamei_mort_samp$juvenile.adult[vannamei_mort_samp$juvenile.adult<1],
vannamei_mort_samp$larval,
vannamei_stage_prob$postlarval,
vannamei_stage_prob$juvenile.adult) %>%
vannamei_stage_probadd_header_above(c(" "=1, "larval" = 2, "postlarval" = 2, "juvenile-subadult" = 2)) %>%
add_header_above(c("P. vannamei"=7))
# repeat for other taxa
<-data.frame(larval=rep(NA, 100000),
monodon_stage_probpostlarval=rep(NA, 100000),
juvenile.adult=rep(NA, 100000))
$larval<-monodon_mort_samp$larval %>%
monodon_stage_probkde1d(xmin = 0,
xmax = 1) %>%
rkde1d(100000,.)
$postlarval<-monodon_mort_samp$postlarval %>%
monodon_stage_probkde1d(xmin = 0,
xmax = 1) %>%
rkde1d(100000,.)
$juvenile.adult<-monodon_mort_samp$juvenile.adult %>%
monodon_stage_probkde1d(xmin = 0,
xmax = 1) %>%
rkde1d(100000,.)
give.full.summary(monodon_mort_samp$larval,
$postlarval,
monodon_mort_samp$juvenile.adult,
monodon_mort_samp$larval,
monodon_stage_prob$postlarval,
monodon_stage_prob$juvenile.adult) %>%
monodon_stage_probadd_header_above(c(" "=1, "larval" = 2, "postlarval" = 2, "juvenile-subadult" = 2)) %>%
add_header_above(c("P. monodon"=7))
<-data.frame(larval=rep(NA, 100000),
macro_stage_probpostlarval=rep(NA, 100000),
juvenile.adult=rep(NA, 100000))
$larval<-macrobrachium_mort_samp$larval %>%
macro_stage_probkde1d( xmin = 0,
xmax = 1) %>%
rkde1d(100000,.)
$postlarval<-macrobrachium_mort_samp$postlarval %>%
macro_stage_probkde1d(xmin = 0,
xmax = 1) %>%
rkde1d(100000,.)
$juvenile.adult<-macrobrachium_mort_samp$juvenile.adult %>%
macro_stage_probkde1d(xmin = 0,
xmax = 1) %>%
rkde1d(100000,.)
give.full.summary(macrobrachium_mort_samp$larval,
$postlarval,
macrobrachium_mort_samp$juvenile.adult,
macrobrachium_mort_samp$larval,
macro_stage_prob$postlarval,
macro_stage_prob$juvenile.adult) %>%
macro_stage_probadd_header_above(c(" "=1, "larval" = 2, "postlarval" = 2, "juvenile-subadult" = 2)) %>%
add_header_above(c("Macrobrachium"=7))
original | new | original | new | original | new | |
---|---|---|---|---|---|---|
5% | 0.0996531 | 0.0972387 | 0.1001447 | 0.0999791 | 0.0508207 | 0.0506593 |
50% | 0.1500220 | 0.1496121 | 0.1504374 | 0.1507727 | 0.1420997 | 0.1439536 |
95% | 0.2266631 | 0.2282536 | 0.2224142 | 0.2237825 | 0.3944276 | 0.3936253 |
mean | 0.1547854 | 0.1556152 | 0.1545581 | 0.1551854 | 0.1719317 | 0.1725749 |
sd | 0.0392371 | 0.0526141 | 0.0383756 | 0.0416042 | 0.1161365 | 0.1155133 |
min | 0.0696998 | 0.0000104 | 0.0578250 | 0.0012256 | 0.0179568 | 0.0000372 |
max | 0.3435277 | 0.9980489 | 0.3702702 | 0.9978175 | 0.9591167 | 0.9985386 |
original | new | original | new | original | new | |
---|---|---|---|---|---|---|
5% | 0.2001242 | 0.1997098 | 0.1995617 | 0.1989895 | 0.2104763 | 0.0639917 |
50% | 0.2449577 | 0.2449867 | 0.2447093 | 0.2453887 | 0.2991240 | 0.3483152 |
95% | 0.2997172 | 0.2995932 | 0.2994525 | 0.3017630 | 0.3896331 | 0.9384648 |
mean | 0.2466252 | 0.2466316 | 0.2467749 | 0.2485648 | 0.2998994 | 0.4302422 |
sd | 0.0301440 | 0.0351535 | 0.0306094 | 0.0465916 | 0.0573127 | 0.2615026 |
min | 0.1525521 | 0.0000248 | 0.1552940 | 0.0002576 | 0.2000194 | 0.0000026 |
max | 0.3766730 | 0.9934958 | 0.3703696 | 0.9999699 | 0.3999908 | 0.9999854 |
original | new | original | new | original | new | |
---|---|---|---|---|---|---|
5% | 0.4006129 | 0.3996983 | 0.1008623 | 0.1006506 | 0.3992222 | 0.3987035 |
50% | 0.5273712 | 0.5285526 | 0.1724686 | 0.1729053 | 0.4911646 | 0.4906385 |
95% | 0.6972928 | 0.7002748 | 0.3006805 | 0.3030567 | 0.5980952 | 0.5996646 |
mean | 0.5365256 | 0.5366353 | 0.1832576 | 0.1840283 | 0.4936169 | 0.4935724 |
sd | 0.0919400 | 0.0932098 | 0.0629856 | 0.0668443 | 0.0604250 | 0.0653766 |
min | 0.2764604 | 0.0028506 | 0.0508418 | 0.0001643 | 0.3071373 | 0.0001255 |
max | 0.9617491 | 0.9555300 | 0.5317322 | 0.9961765 | 0.7339364 | 0.9953234 |
We will need these stage probabilities in future chapters, so we save them as .csv files.
<-vannamei_stage_prob
van.stages<-monodon_stage_prob
mon.stages<-macro_stage_prob
macro.stages
$species<-rep("vannamei")
van.stages$species<-rep("monodon")
mon.stages$species<-rep("macrobrachium")
macro.stages
<-rbind(van.stages, mon.stages, macro.stages)
shrimp_prob.stages
write.csv(shrimp_prob.stages, file="../data/survival_curves/bystage_farmed_shrimp_model_probs.csv")
Right now we have the probability that a shrimp dies in each stage, conditional on the shrimp having survived previous stages. However, we want the cumulative probability of a shrimp dying at each life stage—for example, the probability of dying in the postlarval stage is \(1-p(dying\ in\ larval\ stage)*p(dying\ in\ postlarval\ stage)\).
We also calculate the probability of a shrimp surviving to slaughter age, which means it has survived all of the larval, postlarval, and juvenile-adult stages.
# create four new columns with the total probability they make it to each stage
<-vannamei_stage_prob %>%
vannamei_stage_prob_totalrowwise() %>%
mutate(larval.total=larval, postlarval.total=(1-larval)*postlarval,
juvenile.adult.total=(1-larval)*(1-postlarval)*juvenile.adult,
slaughter.age=(1-larval)*(1-postlarval)*(1-juvenile.adult))
<-as.data.frame(vannamei_stage_prob_total[,4:7]) # keep only the totals
vannamei_stage_prob_total
# repeat for other species
<-monodon_stage_prob %>%
monodon_stage_prob_totalrowwise() %>%
mutate(larval.total=larval, postlarval.total=(1-larval)*postlarval,
juvenile.adult.total=(1-larval)*(1-postlarval)*juvenile.adult,
slaughter.age=(1-larval)*(1-postlarval)*(1-juvenile.adult))
<-as.data.frame(monodon_stage_prob_total[,4:7])
monodon_stage_prob_total
<-macro_stage_prob %>%
macro_stage_prob_totalrowwise() %>%
mutate(larval.total=larval, postlarval.total=(1-larval)*postlarval,
juvenile.adult.total=(1-larval)*(1-postlarval)*juvenile.adult,
slaughter.age=(1-larval)*(1-postlarval)*(1-juvenile.adult))
<-as.data.frame(macro_stage_prob_total[,4:7]) macro_stage_prob_total
We will need the probability that a shrimp makes it to slaughter age in future chapters, so we save .csv files of that data here.
<-data.frame(slaughter.age=vannamei_stage_prob_total$slaughter.age,
van.slaughtspecies=rep("vannamei"))
<-data.frame(slaughter.age=monodon_stage_prob_total$slaughter.age,
mon.slaughtspecies=rep("monodon"))
<-data.frame(slaughter.age=macro_stage_prob_total$slaughter.age,
macro.slaughtspecies=rep("macrobrachium"))
write.csv(van.slaught, file="../data/survival_curves/vannamei_model_slaughter_probs.csv")
write.csv(mon.slaught, file="../data/survival_curves/monodon_model_slaughter_probs.csv")
write.csv(macro.slaught, file="../data/survival_curves/macro_model_slaughter_probs.csv")
1.2 Calculating pre-slaughter mortality rates
Now we can calculate the pre-slaughter mortality rate across the production cycle. This will form the survival curves model.
To get a weighted average mortality rate we need to weight the life stage rates by the probability a shrimp is from a given species. We start by creating vector of species chosen according to probabilities from proportions calculated above (see Section 1.1.1).
= vapply(
psm_species_chosen 1:100000,
function(i) {sample.int(3, size=1, prob=prop_allspecies_dof[i, ])},
integer(1))
# Check that the proportions look correct
print(data.frame(vannamei.prop=length(psm_species_chosen[psm_species_chosen==1])/length(psm_species_chosen),
monodon.prop=length(psm_species_chosen[psm_species_chosen==2])/length(psm_species_chosen),
macro.prop=length(psm_species_chosen[psm_species_chosen==3])/length(psm_species_chosen)))
vannamei.prop monodon.prop macro.prop
1 0.71295 0.07009 0.21696
Now, we make a data frame of 100,000 stage probabilities, weighted by the proportion of farmed shrimp that comes from each species.
= matrix(NA, nrow=100000, ncol=4)
psm_stage_probabilities for (i in 1:100000){
if (psm_species_chosen[i] == 1){
= as.matrix(vannamei_stage_prob_total[i,])
psm_stage_probabilities[i, ]
}if (psm_species_chosen[i] == 2){
= as.matrix(monodon_stage_prob_total[i,])
psm_stage_probabilities[i, ]
}if (psm_species_chosen[i] == 3){
= as.matrix(macro_stage_prob_total[i,])
psm_stage_probabilities[i, ]
}
}head(psm_stage_probabilities)
[,1] [,2] [,3] [,4]
[1,] 0.2397400 0.18531724 0.12371699 0.4512258
[2,] 0.1203589 0.10773300 0.08474946 0.6871587
[3,] 0.1533023 0.16083359 0.12652428 0.5593398
[4,] 0.1441758 0.10392355 0.07251141 0.6793893
[5,] 0.2165459 0.08968865 0.43641968 0.2573458
[6,] 0.6248090 0.03477258 0.16410685 0.1763116
Now we can calculate the weighted days lived for each life stage of each species.
= rep(NA, 100000)
psm_overall_proportion_days_lived
for (i in 1:100000){
<- sample.int(4, size=1, prob=psm_stage_probabilities[i, ])
psm_stage_chosen # P. vannamei
if (psm_species_chosen[i] == 1){
if (psm_stage_chosen == 1){
= vannamei_days_lived$larval[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 2){
= vannamei_days_lived$postlarval[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 3){
= vannamei_days_lived$juvenile.adult[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 4){
= vannamei_days_lived$total.farmed[i]
psm_overall_proportion_days_lived[i]
}
}# P. monodon
if (psm_species_chosen[i] == 2){
if (psm_stage_chosen == 1){
= monodon_days_lived$larval[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 2){
= monodon_days_lived$postlarval[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 3){
= monodon_days_lived$juvenile.adult[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 4){
= monodon_days_lived$total.farmed[i]
psm_overall_proportion_days_lived[i]
}
}# Macrobrachium
if(psm_species_chosen[i]==3){
if (psm_stage_chosen == 1){
= macro_days_lived$larval[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 2){
= macro_days_lived$postlarval[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 3){
= macro_days_lived$juvenile.adult[i]
psm_overall_proportion_days_lived[i]
}if (psm_stage_chosen == 4){
= macro_days_lived$total.farmed[i]
psm_overall_proportion_days_lived[i]
}
}
}
# Clean up the output by making it a data frame and labeling variables
<-as.data.frame(psm_overall_proportion_days_lived)
df_all$species<-rep("all", 100000)
df_allcolnames(df_all)<-c("value", "species")
The above gives us a vector of 100,000 samples which equate to the days lived by the weighted average farmed shrimp.
We now need to repeat the method, without weighting, for each species so that we can compare mortality across species.
P. vannamei
<-as.matrix(vannamei_stage_prob_total)
vannamei_stage_probabilities
= rep(NA, 100000)
vannamei_overall_proportion_days_lived for (i in 1:100000){
<- sample.int(4, size=1, prob=vannamei_stage_probabilities[i, ])
vannamei_stage_chosen if (vannamei_stage_chosen == 1){
= vannamei_days_lived$larval[i]
vannamei_overall_proportion_days_lived[i]
}if (vannamei_stage_chosen == 2){
= vannamei_days_lived$postlarval[i]
vannamei_overall_proportion_days_lived[i]
}if (vannamei_stage_chosen == 3){
= vannamei_days_lived$juvenile.adult[i]
vannamei_overall_proportion_days_lived[i]
}if (vannamei_stage_chosen == 4){
= vannamei_days_lived$total.farmed[i]
vannamei_overall_proportion_days_lived[i]
}
}
# Cleaning the output
<-as.data.frame(vannamei_overall_proportion_days_lived)
df_vannamei$species<-rep("vannamei", 100000)
df_vannameicolnames(df_vannamei)<-c("value", "species")
P. monodon
<-as.matrix(monodon_stage_prob_total)
monodon_stage_probabilities
= rep(NA, 100000)
monodon_overall_proportion_days_lived for (i in 1:100000){
<- sample.int(4, size=1, prob=monodon_stage_probabilities[i, ])
monodon_stage_chosen if (monodon_stage_chosen == 1){
= monodon_days_lived$larval[i]
monodon_overall_proportion_days_lived[i]
}if (monodon_stage_chosen == 2){
= monodon_days_lived$postlarval[i]
monodon_overall_proportion_days_lived[i]
}if (monodon_stage_chosen == 3){
= monodon_days_lived$juvenile.adult[i]
monodon_overall_proportion_days_lived[i]
}if (monodon_stage_chosen == 4){
= monodon_days_lived$total.farmed[i]
monodon_overall_proportion_days_lived[i]
}
}
<-as.data.frame(monodon_overall_proportion_days_lived)
df_monodon$species<-rep("monodon", 100000)
df_monodoncolnames(df_monodon)<-c("value", "species")
Macrobrachium
<-macro_stage_prob_total
macro_stage_probabilities
= rep(NA, 100000)
macro_overall_proportion_days_lived for (i in 1:100000){
<- sample.int(4, size=1, prob=macro_stage_probabilities[i, ])
macro_stage_chosen if (macro_stage_chosen == 1){
= macro_days_lived$larval[i]
macro_overall_proportion_days_lived[i]
}if (macro_stage_chosen == 2){
= macro_days_lived$postlarval[i]
macro_overall_proportion_days_lived[i]
}if (macro_stage_chosen == 3){
= macro_days_lived$juvenile.adult[i]
macro_overall_proportion_days_lived[i]
}if (macro_stage_chosen == 4){
= macro_days_lived$total.farmed[i]
macro_overall_proportion_days_lived[i]
}
}
<-as.data.frame(macro_overall_proportion_days_lived)
df_macro$species<-rep("Macrobrachium", 100000)
df_macrocolnames(df_macro)<-c("value", "species")
With all three taxa calculated, we now combine this with the weighted average into one data frame.
<-rbind(df_vannamei, df_monodon, df_macro, df_all)
df_spec$species<-factor(df_spec$species, levels=c(
df_spec"vannamei", "monodon", "Macrobrachium", "all"))
1.3 Fitting and plotting survival curves
To fit the survival curves, we use the survfit2
function from the ggsurvfit
package and the Surv
function from the package survival
. The survival curves are made using Kaplan-Meier estimation.
<-survfit2(Surv(
plot_datatest$value, event = rep(1, length(df_spec$value))) ~ species, data = df_spec) %>%
df_spectidy_survfit()
Finally, we plot the results.
<-ggplot(data=plot_datatest[!plot_datatest$strata=="all",],
survival_curvesaes(x=time, y=estimate*100, color=strata)) +
geom_line()+
labs(x="Age (days)", y="Survival probability (%)") +
scale_x_continuous(#limits=c(0,300),
expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
theme(legend.position="bottom",
legend.title=element_blank(),
legend.key.size = unit(5, "mm"),
legend.text=element_text(size=10, hjust=0),
legend.spacing.x = unit(2, "mm"),
axis.text=element_text(size=10),
axis.title.y=element_text(size=10, face="bold"),
axis.title.x=element_text(size=10, face="bold"),
legend.box.spacing = unit(1, "mm"),
plot.margin = unit(c(1,1,1,1), "mm")) +
coord_cartesian(ylim=c(0,100), clip="off") +
# theme(plot.margin = unit(c(l=2,r=2,b=.2,t=.2), "lines")) +
geom_bracket(data=NULL, inherit.aes=FALSE,
xmin=quantile(vannamei_days_lived$total.farmed, probs=0.025),
xmax=quantile(vannamei_days_lived$total.farmed, probs=0.975),
y.position=62, label="Slaughter", tip.length=0.03,
color="#E69F00", size=.7) +
geom_bracket(data=NULL, inherit.aes=FALSE,
xmin=quantile(monodon_days_lived$total.farmed, probs=0.025),
xmax=quantile(monodon_days_lived$total.farmed, probs=0.975),
y.position=36.5, label="Slaughter", tip.length=0.03,
color="#56B4E9", size=.7) +
geom_bracket(data=NULL, inherit.aes=FALSE,
xmin=quantile(macro_days_lived$total.farmed, probs=0.025),
xmax=quantile(macro_days_lived$total.farmed, probs=0.975),
y.position=25, label="Slaughter", tip.length=0.03,
color="#009E73", size=.7) +
# we plot the weighted average with a separate geom so that it plots over the brackets
geom_line(data=plot_datatest[plot_datatest$strata=="all",],
aes(x=time, y=estimate*100, color=strata), show.legend=TRUE) +
scale_color_manual(values=c("#E69F00", "#56B4E9","#009E73", "#000000"),
labels=c(expression(italic("P. vannamei")),
expression(italic("P. monodon")),
expression(italic("Macrobrachium")),
"All, weighted average"
))
# plotting each species separately as well
<-ggplot(data=plot_datatest[plot_datatest$strata=="vannamei",],
p1aes(x=time, y=estimate*100, color=strata)) +
geom_line(color="#E69F00") +
labs(y="") +
scale_x_continuous(limits=c(0,350),
expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
theme(legend.position="none", plot.margin=unit(c(b=0.5,t=0.5,r=0.5, l=0), "lines"),
axis.title.x=element_blank()) +
#scale_color_manual(values=c("#E69F00","#56B4E9","#009E73")) +
geom_vline(xintercept=10, linetype="dashed", colour="#E69F00") + # cell NX in the Guesstimate model
geom_vline(xintercept=22, linetype="dashed", colour="#E69F00") # cell DA in the Guesstimate model
<-ggplot(data=plot_datatest[plot_datatest$strata=="monodon",],
p2aes(x=time, y=estimate*100)) +
geom_line(color="#56B4E9")+
labs(y="")+
scale_x_continuous(limits=c(0,350),
expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
theme(legend.position="none",
plot.margin=unit(c(b=0.5,t=0.5,r=0.5, l=0), "lines"),
axis.title.x=element_blank()) +
geom_vline(xintercept=10, linetype="dashed", colour="#56B4E9") + # cell LQ in the Guesstimate model
geom_vline(xintercept=27, linetype="dashed", colour="#56B4E9") # cell HJ in the Guesstimate model
<-ggplot(data=plot_datatest[plot_datatest$strata=="Macrobrachium",],
p3aes(x=time, y=estimate*100)) +
geom_line(color="#009E73")+
labs(x="Age (days)", y="") +
scale_x_continuous(limits=c(0,350),
expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
theme(legend.position="none",
plot.margin=unit(c(b=0.5,t=0.5,r=0.5, l=0), "lines"),
axis.title.y=element_blank()) +
geom_vline(xintercept=29, linetype="dashed", colour="#009E73") + # cell OD in the Guesstimate model
geom_vline(xintercept=63, linetype="dashed", colour="#009E73") # cell TK in the Guesstimate model
We also extract the average probability of making it to slaughter age for each species:
mean(vannamei_stage_probabilities[,4])
[1] 0.5902775
mean(monodon_stage_probabilities[,4])
[1] 0.3225594
mean(macro_stage_probabilities[,4])
[1] 0.1914582
1.4 Comparing to slaughter statistics
We next compare the slaughter figures to the number that died on farms (including pre-slaughter mortality) in the same year.
<-read.csv("../data/guesstimate/slaughtered_samples.csv")
slaughter
<-slaughter$vannamei %>%
vannamei_slaughtkde1d() %>%
rkde1d(100000,.)
give.summary(slaughter$vannamei, vannamei_slaught) %>%
add_header_above(c("P. vannamei" = 3))
<-slaughter$monodon %>%
monodon_slaughtkde1d() %>%
rkde1d(100000,.)
give.summary(slaughter$monodon, monodon_slaught) %>%
add_header_above(c("P. monodon" = 3))
<-slaughter$macrobrchium %>%
macro_slaughtkde1d() %>%
rkde1d(100000,.)
give.summary(slaughter$macrobrchium, macro_slaught) %>%
add_header_above(c("Macrobrachium" = 3))
<-cbind(vannamei_slaught, monodon_slaught, macro_slaught) # combining the 100,000 samples for each species into a data frame
allspecies_slaught
<-as.data.frame(allspecies_slaught) %>%
slaught_prop_allspeciesrowwise() %>%
mutate(van_prop=vannamei_slaught/sum(vannamei_slaught, monodon_slaught, macro_slaught), # calculating each sample as a proportion of the total shrimp, row-wise
mon_prop=monodon_slaught/sum(vannamei_slaught, monodon_slaught, macro_slaught),
macro_prop=macro_slaught/sum(vannamei_slaught, monodon_slaught, macro_slaught))
original | new | |
---|---|---|
5% | 220957800000 | 222476066766 |
50% | 342228500000 | 343470146341 |
95% | 529217650000 | 532874614636 |
mean | 354766329600 | 356150888840 |
sd | 96851040159 | 96858142911 |
min | 144325000000 | 104518134351 |
max | 952712000000 | 987182924790 |
original | new | |
---|---|---|
5% | 11860315356 | 11923173880 |
50% | 20858815142 | 20984152771 |
95% | 36622412461 | 36434870776 |
mean | 22092898841 | 22176970451 |
sd | 7815695540 | 7784774999 |
min | 5996479921 | 4618419389 |
max | 71459992373 | 73715081829 |
original | new | |
---|---|---|
5% | 20277647900 | 20563786382 |
50% | 31033290274 | 31051657941 |
95% | 46842577016 | 46844762225 |
mean | 31986343208 | 32058892477 |
sd | 8291128218 | 8209105772 |
min | 10376290701 | 10599353581 |
max | 86753502536 | 87744803041 |
Now we can compare the proportion of farmed shrimp from each species that are slaughtered annually and that die on farms annually.
# make all the data of interest into a data frame
<-data.frame(Species=rep(c("vannamei", "monodon", "macrobrachium"), 2),
comp_slaught_dofType=c(
rep("Slaughtered", 3),
rep("Die on farms (including pre-slaughter mortality)", 3)),
Proportion=c(
mean(slaught_prop_allspecies$van_prop),
mean(slaught_prop_allspecies$mon_prop),
mean(slaught_prop_allspecies$macro_prop),
mean(prop_allspecies_dof$van_prop),
mean(prop_allspecies_dof$mon_prop),
mean(prop_allspecies_dof$macro_prop)),
Lower=c(
quantile(slaught_prop_allspecies$van_prop, probs=0.025),
quantile(slaught_prop_allspecies$mon_prop, probs=0.025),
quantile(slaught_prop_allspecies$macro_prop, probs=0.025),
quantile(prop_allspecies_dof$van_prop, probs=0.025),
quantile(prop_allspecies_dof$mon_prop, probs=0.025),
quantile(prop_allspecies_dof$macro_prop, probs=0.025)),
Upper=c(
quantile(slaught_prop_allspecies$van_prop, probs=0.975),
quantile(slaught_prop_allspecies$mon_prop, probs=0.975),
quantile(slaught_prop_allspecies$macro_prop, probs=0.975),
quantile(prop_allspecies_dof$van_prop, probs=0.975),
quantile(prop_allspecies_dof$mon_prop, probs=0.975),
quantile(prop_allspecies_dof$macro_prop, probs=0.975)))
# plot the results as individual bars
ggplot(comp_slaught_dof, aes(y=Type, x=Proportion, fill=Species)) +
geom_bar(stat="identity", position="dodge") +
geom_errorbar(aes(xmin=Lower, xmax=Upper), position=position_dodge(width=.9), width=.7) +
scale_fill_manual(values=c("#009E73","#56B4E9", "#E69F00"),
labels=c(
expression(italic("Macrobrachium")),
expression(italic("P. monodon")),
expression(italic("P. vannamei")))) +
scale_x_continuous(expand=c(0,0), limits=c(0,1)) +
scale_y_discrete(labels=c("Died on farms\n(including\npre-slaughter\nmortality)", "Slaughtered")) +
theme(legend.text = element_text(hjust=0)) +
ylab("") +
xlab("Proportion")
# plot as stacked bars
ggplot(comp_slaught_dof, aes(y=Type, x=Proportion, group=Species, fill=Species)) +
geom_bar(stat="identity", position="stack") +
geom_text(aes(label=round(Proportion, 2)),stat="identity",position=position_stack(vjust=.5), color="black", size=3.7) +
scale_fill_manual(values=c("#009E73","#56B4E9", "#E69F00"),
labels=c(expression(italic("Macrobrachium")), expression(italic("P. monodon")), expression(italic("P. vannamei")))) +
scale_x_continuous(expand=c(0,0), limits=c(0,1)) +
scale_y_discrete(labels=c("Died on farms\n(slaughter and\npre-slaughter)", "Slaughtered")) +
theme(legend.position="bottom",
legend.title=element_blank(),
legend.key.size = unit(5, "mm"),
legend.text=element_text(size=10, hjust=0),
legend.spacing.x = unit(2, "mm"),
axis.text=element_text(size=10),
axis.title.y=element_text(size=10, face="bold"),
axis.title.x=element_blank(),
legend.box.spacing = unit(1, "mm"),
plot.margin = unit(c(1,4,1,1), "mm")) +
ylab("") +
xlab("Mean proportion")
1.5 Stage specific rates and numbers of individuals
Finally, we extract the mean and 95% credible intervals for mortality rate at each life stage (including cumulative mortality rate) and number of individuals who die on farms at each stage (and in total).
# calculate individual deaths for each life stage of each species
<-mean(vannamei_dof)*mean(vannamei_stage_prob$larval)
van_total_larval_deaths<-mean(vannamei_dof)-van_total_larval_deaths
van_left_after_larval<-van_left_after_larval*mean(vannamei_stage_prob$postlarval)
van_total_postlarval_deaths<-van_left_after_larval-van_total_postlarval_deaths
van_left_after_postlarval<-van_left_after_postlarval*mean(vannamei_stage_prob$juvenile.adult)
van_total_juvenile_deaths<-van_left_after_postlarval-van_total_juvenile_deaths
van_left_after_juvenile<-mean(vannamei_dof)*(1-mean(vannamei_stage_probabilities[,4]))
van_total_psm
<-mean(monodon_dof)*mean(monodon_stage_prob$larval)
mon_total_larval_deaths<-mean(monodon_dof)-mon_total_larval_deaths
mon_left_after_larval<-mon_left_after_larval*mean(monodon_stage_prob$postlarval)
mon_total_postlarval_deaths<-mon_left_after_larval-mon_total_postlarval_deaths
mon_left_after_postlarval<-mon_left_after_postlarval*mean(monodon_stage_prob$juvenile.adult)
mon_total_juvenile_deaths<-mon_left_after_postlarval-mon_total_juvenile_deaths
mon_left_after_juvenile<-mean(monodon_dof)*(1-mean(monodon_stage_probabilities[,4]))
mon_total_psm
<-mean(macro_dof)*mean(macro_stage_prob$larval)
macro_total_larval_deaths<-mean(macro_dof)-macro_total_larval_deaths
macro_left_after_larval<-macro_left_after_larval*mean(macro_stage_prob$postlarval)
macro_total_postlarval_deaths<-macro_left_after_larval-macro_total_postlarval_deaths
macro_left_after_postlarval<-macro_left_after_postlarval*mean(macro_stage_prob$juvenile.adult)
macro_total_juvenile_deaths<-macro_left_after_postlarval-macro_total_juvenile_deaths
macro_left_after_juvenile<-mean(macro_dof)*(1-mean(macro_stage_probabilities[,4]))
macro_total_psm
# make a data frame of the required data
<-data.frame(
mort_indivsspecies=c(rep("P. vannamei", 4), rep("P. monodon", 4), rep("Macrobrachium", 4)),
stage=rep(c("Larval", "Postlarval", "Juvenile-subadult", "Cumulative"), 3),
mortality_mean=c(
mean(vannamei_stage_prob$larval),
mean(vannamei_stage_prob$postlarval),
mean(vannamei_stage_prob$juvenile.adult),
1-mean(vannamei_stage_probabilities[,4])),
(mean(monodon_stage_prob$larval),
mean(monodon_stage_prob$postlarval),
mean(monodon_stage_prob$juvenile.adult),
1-mean(monodon_stage_probabilities[,4])),
(mean(macro_stage_prob$larval),
mean(macro_stage_prob$postlarval),
mean(macro_stage_prob$juvenile.adult),
1-mean(macro_stage_probabilities[,4]))
(
),mortality_lower=c(
quantile(vannamei_stage_prob$larval, probs=0.025),
quantile(vannamei_stage_prob$postlarval, probs=0.025),
quantile(vannamei_stage_prob$juvenile.adult, probs=0.025),
1-quantile(vannamei_stage_probabilities[,4], probs=0.975)),
(quantile(monodon_stage_prob$larval, probs=0.025),
quantile(monodon_stage_prob$postlarval, probs=0.025),
quantile(monodon_stage_prob$juvenile.adult, probs=0.025),
1-quantile(monodon_stage_probabilities[,4], probs=0.975)),
(quantile(macro_stage_prob$larval, probs=0.025),
quantile(macro_stage_prob$postlarval, probs=0.025),
quantile(macro_stage_prob$juvenile.adult, probs=0.025),
1-quantile(macro_stage_probabilities[,4], probs=0.975))
(
),mortality_upper=c(
quantile(vannamei_stage_prob$larval, probs=0.975),
quantile(vannamei_stage_prob$postlarval, probs=0.975),
quantile(vannamei_stage_prob$juvenile.adult, probs=0.975),
1-quantile(vannamei_stage_probabilities[,4], probs=0.025)),
(quantile(monodon_stage_prob$larval, probs=0.975),
quantile(monodon_stage_prob$postlarval, probs=0.975),
quantile(monodon_stage_prob$juvenile.adult, probs=0.975),
1-quantile(monodon_stage_probabilities[,4], probs=0.025)),
(quantile(macro_stage_prob$larval, probs=0.975),
quantile(macro_stage_prob$postlarval, probs=0.975),
quantile(macro_stage_prob$juvenile.adult, probs=0.975),
1-quantile(macro_stage_probabilities[,4], probs=0.025))
(
),individuals_mean=c(
van_total_larval_deaths,
van_total_postlarval_deaths,
van_total_juvenile_deaths,
van_total_psm,
mon_total_larval_deaths,
mon_total_postlarval_deaths,
mon_total_juvenile_deaths,
mon_total_psm,
macro_total_larval_deaths,
macro_total_postlarval_deaths,
macro_total_juvenile_deaths,
macro_total_psm
)
)
# add brackets to show the 95% credible intervals
$Mortality<-paste0(
mort_indivsround(mort_indivs$mortality_mean, 2), " [",
round(mort_indivs$mortality_lower, 2), "; ",
round(mort_indivs$mortality_upper, 2), "]")
<-mort_indivs %>%
mort_indivis_pivotpivot_wider(id_cols = species, names_from = stage, values_from = c(Mortality, individuals_mean))
<-t(mort_indivis_pivot)
transpose_mort_indivis_pivot
# print the results
kbl(transpose_mort_indivis_pivot) %>%
kable_styling(full_width=F, position="center", font_size=9, bootstrap_options = c("condensed"))
species | P. vannamei | P. monodon | Macrobrachium |
Mortality_Larval | 0.16 [0.09; 0.25] | 0.25 [0.19; 0.31] | 0.54 [0.38; 0.74] |
Mortality_Postlarval | 0.16 [0.09; 0.24] | 0.25 [0.19; 0.31] | 0.18 [0.09; 0.34] |
Mortality_Juvenile-subadult | 0.17 [0.04; 0.48] | 0.43 [0.03; 0.97] | 0.49 [0.38; 0.62] |
Mortality_Cumulative | 0.41 [0.27; 0.65] | 0.68 [0.44; 0.98] | 0.81 [0.71; 0.9] |
individuals_mean_Larval | 97014532629 | 13814892071 | 96844873542 |
individuals_mean_Postlarval | 81691380200 | 10489285669 | 15388806842 |
individuals_mean_Juvenile-subadult | 76747517895 | 13643028391 | 33677996607 |
individuals_mean_Cumulative | 255431609229 | 37946354695 | 145914976464 |
1.6 Data and method limitations
The data underpinning the survival curves does not account for broodstock (shrimp used as breeders). The figures also likely miss some small-scale or illegal farms and may not include “failed crops” with mass mortality due to, for example, diseases. The number of individuals is also sensitive to the inputted individual weight of shrimp, but data is scarce for this metric and slaughter weight likely changes over time and between locations. For a complete description of the limitations of the Monte-Carlo Guesstimate model which underpins our survival curves, see the appendix in Waldhorn and Autric (2023).