# NOT RUN {
# note: don't run this in your main directory
# make a copy in case something goes wrong
mydir <- "C:/ss/Simple - Copy"
# the following commands related to starter.ss could be done by hand
# read starter file
starter <- SS_readstarter(file.path(mydir, "starter.ss"))
# change control file name in the starter file
starter[["ctlfile"]] <- "control_modified.ss"
# make sure the prior likelihood is calculated
# for non-estimated quantities
starter[["prior_like"]] <- 1
# write modified starter file
SS_writestarter(starter, dir = mydir, overwrite = TRUE)
# vector of values to profile over
h.vec <- seq(0.3, 0.9, .1)
Nprofile <- length(h.vec)
# run SS_profile command
profile <- SS_profile(
dir = mydir, # directory
# "NatM" is a subset of one of the
# parameter labels in control.ss_new
model = "ss",
masterctlfile = "control.ss_new",
newctlfile = "control_modified.ss",
string = "steep",
profilevec = h.vec
)
# read the output files (with names like Report1.sso, Report2.sso, etc.)
profilemodels <- SSgetoutput(dirvec = mydir, keyvec = 1:Nprofile)
# summarize output
profilesummary <- SSsummarize(profilemodels)
# OPTIONAL COMMANDS TO ADD MODEL WITH PROFILE PARAMETER ESTIMATED
MLEmodel <- SS_output("C:/ss/SSv3.24l_Dec5/Simple")
profilemodels[["MLE"]] <- MLEmodel
profilesummary <- SSsummarize(profilemodels)
# END OPTIONAL COMMANDS
# plot profile using summary created above
SSplotProfile(profilesummary, # summary object
profile.string = "steep", # substring of profile parameter
profile.label = "Stock-recruit steepness (h)"
) # axis label
# make timeseries plots comparing models in profile
SSplotComparisons(profilesummary, legendlabels = paste("h =", h.vec))
###########################################################################
# example two-dimensional profile
# (e.g. over 2 of the parameters in the low-fecundity stock-recruit function)
base_dir <- "c:/mymodel"
dir_profile_SR <- file.path(base_dir, "Profiles/Zfrac_and_Beta")
# make a grid of values in both dimensions Zfrac and Beta
# vector of values to profile over
Zfrac_vec <- seq(from = 0.2, to = 0.6, by = 0.1)
Beta_vec <- c(0.5, 0.75, 1.0, 1.5, 2.0)
par_table <- expand.grid(Zfrac = Zfrac_vec, Beta = Beta_vec)
nrow(par_table)
## [1] 25
head(par_table)
## Zfrac Beta
## 1 0.2 0.50
## 2 0.3 0.50
## 3 0.4 0.50
## 4 0.5 0.50
## 5 0.6 0.50
## 6 0.2 0.75
# run SS_profile command
# requires modified version of SS_profile available via
# remotes::install_github("r4ss/r4ss@profile_issue_224")
profile <- SS_profile(
dir = dir_profile_SR, # directory
masterctlfile = "control.ss_new",
newctlfile = "control_modified.ss",
string = c("Zfrac", "Beta"),
profilevec = par_table,
extras = "-nohess"
)
# get model output
profilemodels <- SSgetoutput(
dirvec = dir_profile_SR,
keyvec = 1:nrow(par_table), getcovar = FALSE
)
n <- length(profilemodels)
profilesummary <- SSsummarize(profilemodels)
# add total likelihood (row 1) to table created above
par_table[["like"]] <- as.numeric(profilesummary[["likelihoods"]][1, 1:n])
# reshape data frame into a matrix for use with contour
like_matrix <- reshape2::acast(par_table, Zfrac ~ Beta, value.var = "like")
# make contour plot
contour(
x = as.numeric(rownames(like_matrix)),
y = as.numeric(colnames(like_matrix)),
z = like_matrix
)
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab