#' Prepare data for a state-space SRA fit
#'
#' Takes the output of the \code{SimFit} functions to prepare
#' for fitting a state-space spawner recruit model
#'
#' @param params a list object created by \code{SimFit::init_sim()} or \code{kusko_data_prep()$params}.
#' Contains the driving parameters and dimensional variables.
#' @param obs a list object created by the functions that generate observations in the
#' \code{SimFit} package or the \code{kusko_data_prep()$obs} function.
#' @param covariance a character vector of length 1: \code{"simple"} or \code{"complex"}
#'
#' @export
ssm_data_prep = function(params, obs, covariance) {
output = with(append(params, obs), {
# vectorize escapement observations
# don't want to waste time looping over NAs
S_ts_obs_m = S_ts_obs
S_ts_obs_v = as.numeric(S_ts_obs_m)
S_obs_s = rep(1:ns, each = nt)
S_obs_t = rep(1:nt, ns)
no_na_yrs = which(!is.na(S_ts_obs_v))
S_obs = S_ts_obs_v[no_na_yrs]
S_obs_s = S_obs_s[no_na_yrs]
S_obs_t = S_obs_t[no_na_yrs]
S_obs_n = length(S_obs)
sig_S_obs_ts_v = as.numeric(sig_S_ts_obs)
sig_S_obs = sig_S_obs_ts_v[no_na_yrs]
# remove NAs from age comps: turn them to zeros
x_tas_obs[is.na(x_tas_obs)] = 0
# do the covariance matrix info
if (covariance == "simple") { # this is if common variance, common rho
m = matrix(1:(ns^2), ns, ns, byrow = T)
d = diag(m)
vcov_list = list(
vcov_row = rep(1:ns, each = ns),
vcov_col = rep(1:ns, ns),
vcov_ind = ifelse(1:ns^2 %in% d, 1, 2),
vcov_N = ns * ns
)
}
if (covariance == "complex") { # this is if full Sigma_R mat estimated as inverse wishart
vcov_list = list(
R_wish = diag(rep(1,ns)),
df_wish = ns + 1
)
}
# the base data needed regardless of covariance structure
base = list(
# dimension variables
ns = ns,
nt = nt,
ny = ny,
na = na,
a_max = a_max,
# observed harvest states
C_tot_t_obs = C_tot_t_obs,
tau_C_obs = 1/sig_C_t_obs^2,
v = v,
# vectorized observe escapement counts
S_obs = S_obs, # the count
S_obs_t = S_obs_t, # the year of the ith count
S_obs_s = S_obs_s, # the stock of the ith count
S_obs_n = S_obs_n, # the number of escapement observations
tau_S_obs = 1/sig_S_obs^2,
# observed age comp states
x_tas_obs = x_tas_obs,
ESS_ts = apply(x_tas_obs, 3, rowSums),
age_stocks = age_comp_stocks,
n_age_stocks = length(age_comp_stocks)
)
append(base, vcov_list)
})
return(output)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.