From 0ab4bef6d13b3b33aa22fe730770caff1fb35491 Mon Sep 17 00:00:00 2001 From: Grant Adams Date: Thu, 8 Oct 2026 14:17:43 -0700 Subject: [PATCH 1/3] fix(convert_output): repair the Rceattle branch Fixes #400. `convert_output(model = "rceattle")` errored on every Rceattle fit, in both input modes: - `index_ln_q` is `index_log_q` and `catch_h` is `catch_hat`, so neither was found; `Q_block` is deprecated, now selected with `any_of()`. - Module selection was positional, but a fit's element list depends on how it was fitted, so a fixed offset lands on different modules for different fits. Selected by name instead. `sdrep` holds every derived time series, so a `getsd = FALSE` fit now warns rather than returning only the input data. - `file[["data_list"]]` read the argument, not the loaded object, so the path mode could never work; `dat[["data_list"]]` in 16 places, and the `.rds` check is anchored and case-insensitive. - `comp_data` was overwritten with the catch data, and predicted composition used `cross_join(age_hat)`, repeating the 2,478 correct predictions 59 times for 146,202 against 2,928 observed. - The catch and composition frames set no `module_name`, leaving 5,586 of 6,648 rows without one. - A multispecies fit has no species dimension in this schema; refused on `nspp`, read with `[[` so a renamed element cannot partial-match past it. Output is 35 columns, 6,648 rows, and biomass equal to the fit to 2.33e-10. Adds a fixture built from the bundled `GOAatf` with its rebuild script, and tests pinning the composition and index alignment by value. --- R/convert_output.R | 114 +++++++++++++++--- .../fixtures/prepare_rceattle_output_file.R | 63 ++++++++++ tests/testthat/fixtures/rceattle_goa_atf.rds | Bin 0 -> 38608 bytes tests/testthat/test-convert_output.R | 94 +++++++++++++++ 4 files changed, 251 insertions(+), 20 deletions(-) create mode 100644 tests/testthat/fixtures/prepare_rceattle_output_file.R create mode 100644 tests/testthat/fixtures/rceattle_goa_atf.rds diff --git a/R/convert_output.R b/R/convert_output.R index 62fed9e0..901ba89e 100644 --- a/R/convert_output.R +++ b/R/convert_output.R @@ -1981,7 +1981,10 @@ convert_output <- function( # can late take approach like BAM? # TODO: Do we want users to input the saved file or already loaded into the R environment? if (is.character(file)) { - if (!grepl(".rds", file)) { + # Anchored and case-insensitive: saveRDS() output is conventionally named + # either .rds or .RDS, and the real assessment files this targets use the + # latter. The unanchored, case-sensitive form rejected them. + if (!grepl("\\.rds$", file, ignore.case = TRUE)) { cli::cli_abort("File must be in an .rds format otherwise load data into your environment and run `convert_output()` using the loaded data.") } dat <- readRDS(file) @@ -1989,9 +1992,38 @@ convert_output <- function( dat <- file } + # The standardized output describes one stock and has no species dimension, + # but CEATTLE is a multispecies model. A multispecies fit's `sdrep` holds + # nspp * nyrs values per label, which fails the `n == length(styr:projyr)` + # test used to attach years below, so every biomass / spawning biomass / + # recruitment value would silently come back with `year = NA`. Refuse + # instead: a converted file that quietly merges two stocks is worse than no + # converted file. + # `[[` rather than `$`: `$` partial-matches, so a renamed element would + # return something else and skip the refusal. + if (!"data_list" %in% names(dat)) { + cli::cli_abort(c( + "Rceattle fit has no {.field data_list} element.", + i = "The catch, index and composition data are read from it." + )) + } + nspp <- dat[["data_list"]][["nspp"]] + if (is.null(nspp)) { + cli::cli_abort(c( + "Rceattle fit does not report {.field nspp}, so its species count is unknown.", + i = "The standardized output has no species dimension and must not merge stocks." + )) + } + if (nspp > 1) { + cli::cli_abort(c( + "Rceattle model has {nspp} species, and the standardized output has no species dimension.", + i = "Subset the fit to a single species before converting." + )) + } + # Extract or use fleet names if (is.null(fleet_names)) { - fleet_names <- names(dat$estimated_params$index_ln_q) + fleet_names <- names(dat$estimated_params$index_log_q) } # Output fleet names in console @@ -2005,9 +2037,25 @@ convert_output <- function( # units <- c("mt", "lbs", "eggs") ##### Loop #### - for (p in (2:length(dat))[-c(6, 9, 10)]) { - extract <- dat[p] - module_name <- names(extract) + # Select the modules by name rather than by position. An Rceattle fit's + # element list depends on how it was fitted -- `phase = TRUE` adds + # `.conv_phase` and `phase_params`, and `getsd = FALSE` drops `sdrep` -- so a + # fixed offset selects different modules for different fits of the same + # model. Under `phase = TRUE` the positional form dropped `data_list` and + # passed `obj` to the generic vector handler below, which aborts with + # "attempt to select less than one element in OneIndex". + # + # `sdrep` carries every derived time series, so without it the output holds + # only the input data. Say so rather than returning a table whose biomass + # and recruitment are simply absent. + if (!"sdrep" %in% names(dat)) { + cli::cli_warn(c( + "Rceattle fit has no {.field sdrep}, so the converted output has no biomass, spawning biomass or recruitment.", + i = "Refit with {.code fit_control(getsd = TRUE)} to standardize the derived time series." + )) + } + for (module_name in intersect(c("sdrep", "data_list"), names(dat))) { + extract <- dat[module_name] cli::cli_alert_info("Processing {module_name}") if (module_name == "sdrep") { ##### sdrep #### @@ -2034,20 +2082,20 @@ convert_output <- function( ) # make year column year_col <- rep( - file[["data_list"]]$styr:file[["data_list"]]$projyr, + dat[["data_list"]]$styr:dat[["data_list"]]$projyr, length(unique( - dplyr::filter(values_count, n == length(file[["data_list"]]$styr:file[["data_list"]]$projyr)) |> + dplyr::filter(values_count, n == length(dat[["data_list"]]$styr:dat[["data_list"]]$projyr)) |> dplyr::pull(label) )) ) df2 <- values |> - dplyr::filter(n == length(file[["data_list"]]$styr:file[["data_list"]]$projyr)) |> + dplyr::filter(n == length(dat[["data_list"]]$styr:dat[["data_list"]]$projyr)) |> dplyr::mutate(year = year_col) df2 <- values |> dplyr::filter( - n != length(file[["data_list"]]$styr:file[["data_list"]]$projyr) + n != length(dat[["data_list"]]$styr:dat[["data_list"]]$projyr) ) |> dplyr::mutate(year = NA) |> rbind(df2) @@ -2067,19 +2115,19 @@ convert_output <- function( ) year_col_par_fix <- rep( - file[["data_list"]]$styr:file[["data_list"]]$endyr, + dat[["data_list"]]$styr:dat[["data_list"]]$endyr, length(unique( - dplyr::filter(par_fixes_count, n == length(file[["data_list"]]$styr:file[["data_list"]]$endyr)) |> + dplyr::filter(par_fixes_count, n == length(dat[["data_list"]]$styr:dat[["data_list"]]$endyr)) |> dplyr::pull(label) )) ) df3 <- par_fixes |> - dplyr::filter(n == length(file[["data_list"]]$styr:file[["data_list"]]$endyr)) |> + dplyr::filter(n == length(dat[["data_list"]]$styr:dat[["data_list"]]$endyr)) |> dplyr::mutate(year = year_col_par_fix) df3 <- par_fixes |> dplyr::filter( - n != length(file[["data_list"]]$styr:file[["data_list"]]$endyr) + n != length(dat[["data_list"]]$styr:dat[["data_list"]]$endyr) ) |> dplyr::mutate(year = NA) |> rbind(df3) |> @@ -2121,7 +2169,10 @@ convert_output <- function( uncertainty_label = "log_sd", indices_predicted = dat$quantities$index_hat ) |> - dplyr::select(-c(fleet_code, q_block)) + # any_of(): `Q_block` is deprecated in Rceattle and no longer written + # to `index_data`, so naming it directly fails on a current fit while + # still needing to be dropped from an older one. + dplyr::select(-dplyr::any_of(c("fleet_code", "q_block"))) cli::cli_alert_info("'Selectivity_block' values located in 'block' columns.") # check if species > 1 @@ -2159,12 +2210,16 @@ convert_output <- function( # dplyr::filter(!is.na(Catch)) |> dplyr::rename_with(tolower) |> dplyr::mutate( + module_name = names(extract), + # Set the era here from the year, as the index and composition + # frames do, so the frame is complete where it is built. The mutate + # at the end of the branch recomputes it the same way. era = dplyr::if_else( year > dat$data_list$endyr, "fore", - NA_character_ + "time" ), - catch_h = dat$quantities$catch_h, + catch_h = dat$quantities$catch_hat, # TODO: follow up on this quantity # log_index_hat = dat$quantities$log_index_hat uncertainty_label = "log_sd" @@ -2203,8 +2258,15 @@ convert_output <- function( indexing_vars_cols <- colnames(df_comp_obs)[!grepl("comp", colnames(df_comp_obs))] + # `age_hat` holds one row per row of `comp_data`, in the same order, so + # it binds column-wise. cross_join() paired every observation with the + # whole prediction matrix instead, which is a Cartesian product: on the + # GOAatf fixture it returned the 2,478 correct predictions 59 times + # over, once per row of comp_data, for 146,202 in all. + age_hat <- as.data.frame(dat$quantities$age_hat) + names(age_hat) <- paste0("agehat_", seq_len(ncol(age_hat))) df_comp_pred <- dplyr::select(df_comp_obs, dplyr::all_of(indexing_vars_cols)) |> - dplyr::cross_join(as.data.frame(dat$quantities$age_hat)) |> + cbind(age_hat) |> tidyr::pivot_longer( cols = -dplyr::all_of(indexing_vars_cols), names_to = "age", @@ -2215,7 +2277,7 @@ convert_output <- function( dplyr::mutate( label = "composition_predicted", # NOTE: the below age mutate slows down code - age = stringr::str_replace(age, "V", "") + age = stringr::str_replace(age, "agehat_", "") ) # Finish adjusting comp_obs @@ -2234,13 +2296,23 @@ convert_output <- function( ) df_comp <- rbind(df_comp_obs, df_comp_pred) |> + # Match the index and catch frames: the standard names the fleet + # `fleet`, carries no `fleet_name` or `species`, and every row states + # which module it came from. + dplyr::rename(fleet = fleet_name) |> + dplyr::mutate(module_name = names(extract)) |> + dplyr::select(-dplyr::any_of("species")) |> # TODO: do I need to filter sample size by <3 for confidentiality or does this not apply? dplyr::select(-c(age0_length1, fleet_code, sample_size)) - df_catch[setdiff(tolower(names(out_new)), tolower(names(df_catch)))] <- NA - data_list_list[["comp_data"]] <- df_catch + df_comp[setdiff(tolower(names(out_new)), tolower(names(df_comp)))] <- NA + data_list_list[["comp_data"]] <- df_comp # final df for data_list module + # rbind() rather than bind_rows(): every frame has already been padded + # to the standard column set above, so rbind() succeeds and keeps the + # column contract -- it aborts on a frame carrying an extra column, + # where bind_rows() would silently widen the output. new_df <- Reduce(rbind, data_list_list) out_list[[names(extract)]] <- new_df } else if (is.list(extract[[1]])) { # indicates vector and list @@ -2301,6 +2373,8 @@ convert_output <- function( # } # close if statement } # close loop over objects listed in dat file # Finish out df + # rbind() as above, so a module that has drifted from the standard column + # set aborts here rather than widening the output. out_new <- Reduce(rbind, out_list) |> # Add era as factor into BAM conout dplyr::mutate( diff --git a/tests/testthat/fixtures/prepare_rceattle_output_file.R b/tests/testthat/fixtures/prepare_rceattle_output_file.R new file mode 100644 index 00000000..2f7f97e4 --- /dev/null +++ b/tests/testthat/fixtures/prepare_rceattle_output_file.R @@ -0,0 +1,63 @@ +# Build the Rceattle fixture used by test-convert_output.R. +# +# Source data is `GOAatf`, the Gulf of Alaska arrowtooth flounder dataset that +# ships with Rceattle, so the fixture contains nothing that is not already +# public. It is a single-species, two-sex assessment that converges with a +# positive-definite Hessian, which is what makes it exercise the `sdrep` +# branch of convert_output(). `GOAcod` is the one-sex alternative. +# +# Run from the package root, so test_path() resolves. The estimates depend on +# the Rceattle version, so a rebuild reproduces the fixture's structure and +# the test assertions, not its exact values. + +utils::data("GOAatf", package = "Rceattle", envir = environment()) + +# estimateMode = 1 fits the hindcast only; getsd = TRUE is required because the +# converter reads its time series out of sdrep$value. +full <- Rceattle::fit_mod( + data_list = GOAatf, + estimateMode = 1, + msmMode = 0, + fit_control = Rceattle::fit_control( + getsd = TRUE, + verbose = 0, + phase = FALSE + ) +) + +stopifnot( + !is.null(full$sdrep), + isTRUE(full$sdrep$pdHess), + full$data_list$nspp == 1 +) + +# A saved Rceattle fit is ~50 MB, nearly all of it the TMB objective-function +# object and the Hessian. Keep only the elements convert_output() reads, which +# brings the fixture to ~38 KB. +data_list_keep <- c( + "styr", "endyr", "projyr", "nspp", "nsex", "nages", "spnames", + "index_data", "catch_data", "comp_data", "fleet_control" +) +quantities_keep <- c("index_hat", "catch_hat", "age_hat", "log_index_hat") + +fixture <- structure( + list( + data_list = full$data_list[intersect(data_list_keep, names(full$data_list))], + sdrep = list( + value = full$sdrep$value, + sd = full$sdrep$sd, + par.fixed = full$sdrep$par.fixed + ), + quantities = full$quantities[intersect(quantities_keep, names(full$quantities))], + estimated_params = full$estimated_params[ + intersect("index_log_q", names(full$estimated_params)) + ] + ), + class = "Rceattle" +) + +saveRDS( + fixture, + testthat::test_path("fixtures", "rceattle_goa_atf.rds"), + compress = "xz" +) diff --git a/tests/testthat/fixtures/rceattle_goa_atf.rds b/tests/testthat/fixtures/rceattle_goa_atf.rds new file mode 100644 index 0000000000000000000000000000000000000000..f2692917afb4e850d56d8afb3a23acf174f79943 GIT binary patch literal 38608 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 Date: Thu, 8 Oct 2026 14:17:43 -0700 Subject: [PATCH 2/3] fix(resources): correct the Rceattle units and the Flimit/Ftarget labels Groundwork for #388-#392, which will read units from the converter: once a figure takes its unit from this sheet, a wrong one becomes a wrong axis label. All 35 unit-carrying rows in rceattle_var_names.csv were wrong -- 31 said kg and 4 said numbers. CEATTLE carries numbers-at-age in thousands of fish and weight-at-age in kg, so their product is metric tons. Corrected against `Rceattle::quantity_dictionary()`: biomass and the B0/SB0 family to mt, numbers-at-age to thousands of fish, the depletions and compositions to proportion, log_ssb to log mt, pop_scalar to multiplier, nbyagespr to fish per recruit, consumption_at_age to kg per fish per yr. catch_hat, max_catch_hat, comp_weights and diet_comp_weights are blanked rather than corrected: a fleet's catch follows its own Observation_units column, so no single value is right for every fleet, and a composition weight is a likelihood multiplier (log Dirichlet-multinomial theta under that likelihood) rather than a mass. Flimit is the FOFL proxy (F35% at Tier 3) and Ftarget the maximum FABC proxy (F40%), but the two alt_labels were crossed, so each reference point would publish under the other's name. The ln_flimit / ln_ftarget rows in the same sheet are already the right way round. Only the four sdrep rows reach the output today, since the converter emits sdrep and data_list and the sheet has no data_list block; the rest are corrections for when quantities is processed. See #405. --- inst/resources/rceattle_var_names.csv | 74 +++++++++++++-------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/inst/resources/rceattle_var_names.csv b/inst/resources/rceattle_var_names.csv index bc31703a..549a97dd 100644 --- a/inst/resources/rceattle_var_names.csv +++ b/inst/resources/rceattle_var_names.csv @@ -31,8 +31,8 @@ map,alpha,, map,beta,, map,beta_rec_pars,, map,catch_ln_sd,ln_catch_sd, -map,comp_weights,composition_weights,kg -map,diet_comp_weights,diet_composition_weights,kg +map,comp_weights,composition_weights, +map,diet_comp_weights,diet_composition_weights, map,dummy,, map,index_ln_q,, map,index_ln_sd,, @@ -72,8 +72,8 @@ phase_params,alpha,, phase_params,beta,, phase_params,beta_rec_pars,, phase_params,catch_ln_sd,ln_catch_sd, -phase_params,comp_weights,composition_weights,kg -phase_params,diet_comp_weights,diet_composition_weights,kg +phase_params,comp_weights,composition_weights, +phase_params,diet_comp_weights,diet_composition_weights, phase_params,dummy,, phase_params,index_ln_q,, phase_params,index_ln_sd,, @@ -109,36 +109,36 @@ phase_params,sel_curve_pen,, phase_params,sel_dev_ln_sd,, phase_params,sel_inf,, phase_params,sel_inf_dev,, -quantities,age_hat,catch,kg -quantities,age_obs_hat,catch_adjusted,kg -quantities,avail_food,,kg +quantities,age_hat,catch,thousands of fish +quantities,age_obs_hat,catch_adjusted,thousands of fish +quantities,avail_food,,mt quantities,avg_r,recruitment_mean, -quantities,avgn_at_age,abundance_average,numbers -quantities,b0,,kg -quantities,b_eaten,,kg -quantities,b_eaten_as_prey,,kg -quantities,biomass,,kg -quantities,biomass_at_age,biomass,kg -quantities,biomass_depletion,biomass_biomass_unfished,kg -quantities,catch_hat,landings,kg +quantities,avgn_at_age,abundance_average,thousands of fish +quantities,b0,,mt +quantities,b_eaten,,mt +quantities,b_eaten_as_prey,,mt +quantities,biomass,,mt +quantities,biomass_at_age,biomass,mt +quantities,biomass_depletion,biomass_biomass_unfished,proportion +quantities,catch_hat,landings, quantities,comp_hat,, quantities,comp_n,, -quantities,comp_obs,,kg -quantities,consumption_at_age,,kg +quantities,comp_obs,,proportion +quantities,consumption_at_age,,kg per fish per yr quantities,diet_hat,, -quantities,diet_obs,,kg -quantities,dynamicb0,,kg -quantities,dynamicsb0,,kg -quantities,dynamicsbf,,kg -quantities,exploitable_biomass,,kg +quantities,diet_obs,,proportion +quantities,dynamicb0,,mt +quantities,dynamicsb0,,mt +quantities,dynamicsbf,,mt +quantities,exploitable_biomass,,mt quantities,f_at_age,fishing_mortality, quantities,f_flt,fishing_mortality, quantities,f_flt_age,fishing_mortality, quantities,f_spp,fishing_mortality, -quantities,flimit,fishing_mortality_target, +quantities,flimit,fishing_mortality_limit, quantities,flt_sel_maxage,, quantities,ft,, -quantities,ftarget,fishing_mortality_limit, +quantities,ftarget,fishing_mortality_target, quantities,gam_a,, quantities,gam_b,, quantities,index_hat,, @@ -148,16 +148,16 @@ quantities,jnll_comp,, quantities,ln_catch_sd,, quantities,ln_index_sd,, quantities,log_index_hat,, -quantities,log_ssb,log_spawning_biomass,kg +quantities,log_ssb,log_spawning_biomass,log mt quantities,m1_at_age,m1, quantities,m2_at_age,m2, quantities,m2_prop,proportion_m2, quantities,m_at_age,natural_mortality, -quantities,max_catch_hat,,kg -quantities,n_at_age,abundance,numbers -quantities,nbyage0,abundance_rec_hat_f0,numbers +quantities,max_catch_hat,, +quantities,n_at_age,abundance,thousands of fish +quantities,nbyage0,abundance_rec_hat_f0,thousands of fish quantities,nbyagef,abundance_rec_hat_f_target, -quantities,nbyagespr,abundance_spr,numbers +quantities,nbyagespr,abundance_spr,fish per recruit quantities,pop_scalar,, quantities,proj_f,fishing_mortality, quantities,r,recruitment, @@ -166,15 +166,15 @@ quantities,r_hat,, quantities,r_init,recruitment_initial, quantities,r_sd,recruitment_sd, quantities,ration,, -quantities,sb0,spawning_biomass_0,kg -quantities,sbf,spawning_biomass_target,kg +quantities,sb0,spawning_biomass_0,mt +quantities,sbf,spawning_biomass_target,mt quantities,sel,selectivity, quantities,spr0,, quantities,sprfinit,spr_initial, quantities,sprlimit,spr_limit, quantities,sprtarget,spr_target, -quantities,ssb,spawning_biomass,kg -quantities,ssb_depletion,spawning_biomass_depletion,kg +quantities,ssb,spawning_biomass,mt +quantities,ssb_depletion,spawning_biomass_depletion,proportion quantities,steepness,, quantities,stom_div_bio,, quantities,suit_other,, @@ -184,19 +184,19 @@ quantities,unweighted_jnll_comp,, quantities,vulnerability,, quantities,vulnerability_other,, quantities,z_at_age,total_mortality, -sdrep,biomass,,kg +sdrep,biomass,,mt sdrep,index_ln_q,, sdrep,init_dev,, sdrep,ln_f,, sdrep,ln_sel_slp,, sdrep,ln_sel_slp_dev,, sdrep,log_index_hat,, -sdrep,log_ssb,log_spawning_biomass,kg -sdrep,pop_scalar,,kg +sdrep,log_ssb,log_spawning_biomass,log mt +sdrep,pop_scalar,,multiplier sdrep,r,recruitment, sdrep,r_sd,recruitment_sd, sdrep,rec_dev,recruitment_deviations, sdrep,rec_pars,recruitment_parameters, sdrep,sel_inf,, sdrep,sel_inf_dev,, -sdrep,ssb,spawning_biomass,kg +sdrep,ssb,spawning_biomass,mt From 91c661fbef3a0f13fea1eb1515968779463c1eb0 Mon Sep 17 00:00:00 2001 From: Grant Adams Date: Fri, 16 Oct 2026 14:41:15 -0700 Subject: [PATCH 3/3] feat(convert_output): add Rceattle selectivity, M at age and parameter errors * Read `sel_at_age` and `M_at_age` from `quantities` as `selectivity_age` and `natural_mortality`, by fleet, sex, age and year. Ages are offset by `minage`, since the array's age dimension is the bin index. * Give the fixed effects a standard error from `sdrep$cov.fixed`, so recruitment deviations now carry one. * Read `sdrep$par.random`, so recruitment deviations are kept when fitted as random effects (`random_rec = TRUE`). * The fixture now keeps `minage`, the 2 arrays and the fixed-effect variances. --- R/convert_output.R | 82 ++++++++++++++++-- inst/resources/rceattle_var_names.csv | 1 + .../fixtures/prepare_rceattle_output_file.R | 14 ++- tests/testthat/fixtures/rceattle_goa_atf.rds | Bin 38608 -> 40888 bytes tests/testthat/test-convert_output.R | 75 ++++++++++++++++ 5 files changed, 161 insertions(+), 11 deletions(-) diff --git a/R/convert_output.R b/R/convert_output.R index 901ba89e..f3a509c2 100644 --- a/R/convert_output.R +++ b/R/convert_output.R @@ -2054,7 +2054,7 @@ convert_output <- function( i = "Refit with {.code fit_control(getsd = TRUE)} to standardize the derived time series." )) } - for (module_name in intersect(c("sdrep", "data_list"), names(dat))) { + for (module_name in intersect(c("sdrep", "data_list", "quantities"), names(dat))) { extract <- dat[module_name] cli::cli_alert_info("Processing {module_name}") if (module_name == "sdrep") { @@ -2101,10 +2101,30 @@ convert_output <- function( rbind(df2) # Extract parameter values ts + # The standard errors of the fixed effects are the square root of the + # diagonal of cov.fixed, in the same order as par.fixed. + has_cov_fixed <- !is.null(extract[[1]]$cov.fixed) par_fixes <- data.frame( label = names(extract[[1]]$par.fixed), - estimate = extract[[1]]$par.fixed + estimate = extract[[1]]$par.fixed, + uncertainty = if (has_cov_fixed) sqrt(diag(extract[[1]]$cov.fixed)) else NA_real_, + uncertainty_label = if (has_cov_fixed) "sd" else NA_character_ ) + # Random effects, such as rec_dev under random_rec = TRUE, are in + # par.random rather than par.fixed. Their variances are in + # diag.cov.random. + if (length(extract[[1]]$par.random) > 0) { + has_cov_random <- !is.null(extract[[1]]$diag.cov.random) + par_fixes <- rbind( + par_fixes, + data.frame( + label = names(extract[[1]]$par.random), + estimate = extract[[1]]$par.random, + uncertainty = if (has_cov_random) sqrt(extract[[1]]$diag.cov.random) else NA_real_, + uncertainty_label = if (has_cov_random) "sd" else NA_character_ + ) + ) + } par_fixes_count <- par_fixes |> dplyr::group_by(label) |> dplyr::count() @@ -2130,11 +2150,7 @@ convert_output <- function( n != length(dat[["data_list"]]$styr:dat[["data_list"]]$endyr) ) |> dplyr::mutate(year = NA) |> - rbind(df3) |> - dplyr::mutate( - uncertainty = NA, - uncertainty_label = NA - ) + rbind(df3) # not sure how pop_scalar is indexed # not sure how log_index_hat is indexes # Did not use r_sd for the error in rec bc used it from the other element in the list @@ -2315,6 +2331,58 @@ convert_output <- function( # where bind_rows() would silently widen the output. new_df <- Reduce(rbind, data_list_list) out_list[[names(extract)]] <- new_df + } else if (module_name == "quantities") { + ###### quantities #### + # Only selectivity and natural mortality at age for now. Both are + # [fleet or species, sex, age, year] arrays. The age dimension is the + # bin index, so the age itself is offset by minage. + ages <- dat[["data_list"]][["minage"]] - 1 + + seq_len(dat[["data_list"]][["nages"]]) + nsex <- dat[["data_list"]][["nsex"]] + # Rceattle stores sex 1 as females, or both sexes when nsex = 1. + sex_names <- if (nsex == 1) NA_character_ else c("female", "male") + quantities_list <- list() + + if ("sel_at_age" %in% names(extract[[1]])) { + sel <- extract[[1]][["sel_at_age"]][, seq_len(nsex), seq_along(ages), , drop = FALSE] + df_sel <- expand.grid( + fleet = dimnames(sel)[[1]], + sex = sex_names, + age = ages, + year = as.numeric(dimnames(sel)[[4]]), + stringsAsFactors = FALSE + ) |> + dplyr::mutate( + estimate = as.vector(sel), + label = "sel_at_age" + ) + df_sel[setdiff(tolower(names(out_new)), tolower(names(df_sel)))] <- NA + quantities_list[["sel_at_age"]] <- df_sel + } + + if ("M_at_age" %in% names(extract[[1]])) { + m_at_age <- extract[[1]][["M_at_age"]][1, seq_len(nsex), seq_along(ages), , drop = FALSE] + df_m <- expand.grid( + sex = sex_names, + age = ages, + year = as.numeric(dimnames(m_at_age)[[4]]), + stringsAsFactors = FALSE + ) |> + dplyr::mutate( + estimate = as.vector(m_at_age), + label = "m_at_age" + ) + df_m[setdiff(tolower(names(out_new)), tolower(names(df_m)))] <- NA + quantities_list[["m_at_age"]] <- df_m + } + + if (length(quantities_list) > 0) { + out_list[[names(extract)]] <- Reduce(rbind, quantities_list) |> + dplyr::mutate( + module_name = names(extract), + age = as.character(age) + ) + } } else if (is.list(extract[[1]])) { # indicates vector and list ##### remaining lmnts #### if (any(vapply(extract[[1]], is.matrix, FUN.VALUE = logical(1)))) { diff --git a/inst/resources/rceattle_var_names.csv b/inst/resources/rceattle_var_names.csv index 549a97dd..a0467530 100644 --- a/inst/resources/rceattle_var_names.csv +++ b/inst/resources/rceattle_var_names.csv @@ -169,6 +169,7 @@ quantities,ration,, quantities,sb0,spawning_biomass_0,mt quantities,sbf,spawning_biomass_target,mt quantities,sel,selectivity, +quantities,sel_at_age,selectivity_age, quantities,spr0,, quantities,sprfinit,spr_initial, quantities,sprlimit,spr_limit, diff --git a/tests/testthat/fixtures/prepare_rceattle_output_file.R b/tests/testthat/fixtures/prepare_rceattle_output_file.R index 2f7f97e4..85ce614c 100644 --- a/tests/testthat/fixtures/prepare_rceattle_output_file.R +++ b/tests/testthat/fixtures/prepare_rceattle_output_file.R @@ -33,12 +33,15 @@ stopifnot( # A saved Rceattle fit is ~50 MB, nearly all of it the TMB objective-function # object and the Hessian. Keep only the elements convert_output() reads, which -# brings the fixture to ~38 KB. +# brings the fixture to ~40 KB. data_list_keep <- c( - "styr", "endyr", "projyr", "nspp", "nsex", "nages", "spnames", + "styr", "endyr", "projyr", "nspp", "nsex", "minage", "nages", "spnames", "index_data", "catch_data", "comp_data", "fleet_control" ) -quantities_keep <- c("index_hat", "catch_hat", "age_hat", "log_index_hat") +quantities_keep <- c( + "index_hat", "catch_hat", "age_hat", "log_index_hat", "sel_at_age", + "M_at_age" +) fixture <- structure( list( @@ -46,7 +49,10 @@ fixture <- structure( sdrep = list( value = full$sdrep$value, sd = full$sdrep$sd, - par.fixed = full$sdrep$par.fixed + par.fixed = full$sdrep$par.fixed, + # convert_output() reads only the variances. Zeroing the covariances + # keeps the fixture small, since the full matrix is ~170 KB. + cov.fixed = diag(diag(full$sdrep$cov.fixed)) ), quantities = full$quantities[intersect(quantities_keep, names(full$quantities))], estimated_params = full$estimated_params[ diff --git a/tests/testthat/fixtures/rceattle_goa_atf.rds b/tests/testthat/fixtures/rceattle_goa_atf.rds index f2692917afb4e850d56d8afb3a23acf174f79943..ec10355245a3f17fd8549509605af74cc7999132 100644 GIT binary patch literal 40888 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 + dplyr::filter( + fleet == "GOA_atf_fishery", + sex == "male", + age == "5", + year == 2018 + ) + expect_equal( + fishery_age_5[["estimate"]], + unname(fit[["quantities"]][["sel_at_age"]]["GOA_atf_fishery", 2, 5, "2018"]) + ) + + # GOAatf fixes M at 0.2 for females and 0.35 for males at every age and year. + natural_mortality <- out[out[["label"]] == "natural_mortality", ] + expect_equal(nrow(natural_mortality), 2 * 21 * 90) + expect_equal( + unique(natural_mortality[natural_mortality[["sex"]] == "female", ][["estimate"]]), + 0.2 + ) + expect_equal( + unique(natural_mortality[natural_mortality[["sex"]] == "male", ][["estimate"]]), + 0.35 + ) + + # The age dimension is the bin index, so the ages start at minage. + fit[["data_list"]][["minage"]] <- 3 + shifted <- convert_output(file = fit, model = "rceattle") + expect_equal( + range(as.numeric(shifted[shifted[["label"]] == "natural_mortality", ][["age"]])), + c(3, 23) + ) + + expect_no_error(plot_selectivity(out, interactive = FALSE)) + expect_no_error(plot_natural_mortality(out, interactive = FALSE)) +}) + +test_that("convert_output gives Rceattle recruitment deviations a standard error", { + fit <- readRDS(test_path("fixtures", "rceattle_goa_atf.rds")) + out <- convert_output(file = fit, model = "rceattle") + + # The standard error of a fixed effect is the square root of its diagonal + # entry in cov.fixed. + rec_dev_sd <- sqrt(diag(fit[["sdrep"]][["cov.fixed"]]))[ + names(fit[["sdrep"]][["par.fixed"]]) == "rec_dev" + ] + rec_devs <- out[out[["label"]] == "recruitment_deviations", ] + expect_equal(rec_devs[["uncertainty"]], rec_dev_sd) + expect_true(all(rec_devs[["uncertainty_label"]] == "sd")) + + expect_no_error(plot_recruitment_deviations(out, interactive = FALSE)) + + # Under random_rec = TRUE the deviations are random effects, held in + # par.random with their variances in diag.cov.random. + is_rec_dev <- names(fit[["sdrep"]][["par.fixed"]]) == "rec_dev" + random_rec <- fit + random_rec[["sdrep"]][["par.random"]] <- fit[["sdrep"]][["par.fixed"]][is_rec_dev] + random_rec[["sdrep"]][["diag.cov.random"]] <- rec_dev_sd^2 + random_rec[["sdrep"]][["par.fixed"]] <- fit[["sdrep"]][["par.fixed"]][!is_rec_dev] + random_rec[["sdrep"]][["cov.fixed"]] <- + fit[["sdrep"]][["cov.fixed"]][!is_rec_dev, !is_rec_dev] + random_out <- convert_output(file = random_rec, model = "rceattle") + random_rec_devs <- random_out[random_out[["label"]] == "recruitment_deviations", ] + expect_equal(random_rec_devs[["estimate"]], rec_devs[["estimate"]]) + expect_equal(random_rec_devs[["uncertainty"]], rec_dev_sd) + expect_equal(random_rec_devs[["year"]], rec_devs[["year"]]) +}) + test_that("convert_output accepts .RDS as well as .rds for Rceattle", { # saveRDS() output is conventionally named either way, and real Rceattle # assessment files use the upper-case form.