R/change_em_binning.r
change_em_binning.Rd
change_em_binning()
alters the bin structure for the population and
length-composition data in a Stock Synthesis estimation model (EM).
The original length-composition data from the EM .dat
is changed
according to the user's specification. If the data file also contains
conditional age-at-length data, then these data will be re-binned as well.
change_em_binning(
dat_list,
outfile = NULL,
bin_vector,
lbin_method = NULL,
pop_binwidth = NULL,
pop_minimum_size = NULL,
pop_maximum_size = NULL
)
A Stock Synthesis data list object as read in from
SS_readdat
.
Be sure to correctly specify which section of the data file you want
to work with when reading it in using the section
argument.
Where, section = 1
reads in the input values used to run the model
and section = 2
reads in the expected values generated given all the
input to the OM. section = 3
is not used within ss3sim, but this
section provides bootstrapped data sets that have been sampled internally
within SS.
A character string specifying the file name to use
when writing the information to the disk. The string must include
the proper file extension. No file is written using the default value
of NULL
, which leads to increased speed because writing the
file takes time and computing resources.
A numeric vector of new length bins to substitute into the
*.dat
file.
A numeric value of either NULL, 1, 2, 3
to change
the lbin_method for the population bin.
NULL
means to not re-bin.
Population length bin width.
Only necessary for lbin_method = 2
.
Note that this value must be smaller than the bin width
specified in length-composition data len_bins
or
Stock Synthesis will fail (see notes in the Stock Synthesis manual).
Population minimum length bin value.
Only necessary for lbin_method = 2
.
Population maximum length bin value.
Only necessary for lbin_method = 2
.
Other change functions:
change_data()
,
change_e()
,
change_f()
,
change_o()
,
change_retro()
,
change_tv()
# Note that typically this function is used with estimation models in ss3sim,
# but it is used with an operating model data file in the following examples.
f <- system.file("extdata", "models", "cod-om", "codOM.dat", package = "ss3sim")
d <- r4ss::SS_readdat(f, verbose = FALSE)
# An example with lbin_method = 1
l1 <- change_em_binning(d,
outfile = NULL, lbin_method = 1,
bin_vector = seq(20, 152, by = 4)
)
l1$lbin_vector
#> [1] 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92
#> [20] 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152
head(l1$lencomp)
#> year month fleet sex part Nsamp l20 l24 l28 l32 l36 l40 l44 l48 l52 l56 l60
#> 1 26 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 2 27 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 3 28 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 4 29 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 5 30 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 6 31 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> l64 l68 l72 l76 l80 l84 l88 l92 l96 l100 l104 l108 l112 l116 l120 l124 l128
#> 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 2 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 3 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 4 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 5 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 6 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> l132 l136 l140 l144 l148 l152
#> 1 1 1 2 1 1 1
#> 2 1 1 2 1 1 1
#> 3 1 1 2 1 1 1
#> 4 1 1 2 1 1 1
#> 5 1 1 2 1 1 1
#> 6 1 1 2 1 1 1
# An example with lbin_method = 2
new_bin_vec <- seq(min(d$lbin_vector), max(d$lbin_vector), by = 4)
# add the max value if necessary.
if (new_bin_vec[length(new_bin_vec)] != d$lbin_vector[length(d$lbin_vector)]) {
new_bin_vec <- c(
new_bin_vec,
d$lbin_vector[length(d$lbin_vector)]
)
}
pop_bin_input <- 5
pop_min_size_input <- min(d$lbin_vector_pop) - 1
pop_max_size_input <- max(d$lbin_vector_pop) + 5
lbin_vec_pop <- seq(pop_min_size_input,
pop_max_size_input,
length.out = (pop_max_size_input - pop_min_size_input) /
pop_bin_input + 1
)
l2 <- change_em_binning(
dat_list = d,
bin_vector = new_bin_vec,
lbin_method = 2,
# Note: need more inputs with lbin_method = 2
pop_binwidth = pop_bin_input,
pop_minimum_size = pop_min_size_input,
pop_maximum_size = pop_max_size_input
)
l2$lbin_method
#> [1] 2
# note bin width is now the same as the input
pop_bin_input
#> [1] 5
l2$binwidth
#> [1] 5
# note the minimum size has changed based on the input:
pop_min_size_input
#> [1] 9
l2$minimum_size
#> [1] 9
# so has max
l2$maximum_size
#> [1] 206
l2$lbin_vector
#> [1] 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92
#> [20] 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152
# other modified components:
l2$lbin_vector_pop
#> [1] 9.000 13.925 18.850 23.775 28.700 33.625 38.550 43.475 48.400
#> [10] 53.325 58.250 63.175 68.100 73.025 77.950 82.875 87.800 92.725
#> [19] 97.650 102.575 107.500 112.425 117.350 122.275 127.200 132.125 137.050
#> [28] 141.975 146.900 151.825 156.750 161.675 166.600 171.525 176.450 181.375
#> [37] 186.300 191.225 196.150 201.075 206.000
head(l2$lencomp)
#> year month fleet sex part Nsamp l20 l24 l28 l32 l36 l40 l44 l48 l52 l56 l60
#> 1 26 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 2 27 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 3 28 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 4 29 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 5 30 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> 6 31 1 1 0 0 100 2 1 1 2 1 1 2 1 1 2 1
#> l64 l68 l72 l76 l80 l84 l88 l92 l96 l100 l104 l108 l112 l116 l120 l124 l128
#> 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 2 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 3 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 4 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 5 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> 6 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
#> l132 l136 l140 l144 l148 l152
#> 1 1 1 2 1 1 1
#> 2 1 1 2 1 1 1
#> 3 1 1 2 1 1 1
#> 4 1 1 2 1 1 1
#> 5 1 1 2 1 1 1
#> 6 1 1 2 1 1 1