Current workflows require users to understand internal objects such as MCMCFun, simulateNewDataFun, discFun, structured control lists, NIMBLE node handling, and probably Nimble internals.
Goal
A new user should be able to install the package, open the README or vignette, copy one example, run one high-level function, and interpret the result using print(), summary(), and plot() without needing to understand the internal calibration engine.
A future user-facing workflow might look like:
res <- cppp_nimble(
model = model,
dataNames = NULL,
paramNames = NULL,
discrepancy = "mean",
nReps = 100,
mainMCMC = list(niter = 5000, nburnin = 1000),
calibrationMCMC = list(niter = 500)
)
summary(res)
plot(res)
Some details
One possibility here is to think about this similarly as nimble sequential setup via runMCMC() vs the nimbleMCMC() one-line invocation
An option would be to keep the runCalibration() and runCalibrationNIMBLE() as the advanced generic functions and consider adding user-friendly functions, e.g., cppp() and cppp_nimble(). Those two functions can use runCalibration() internally and will handle setting a number of defaults for users.
Notes
paramNamesand dataNames can be optional; we can figure out roles of the nodes from nimble model
Current workflows require users to understand internal objects such as
MCMCFun,simulateNewDataFun,discFun, structuredcontrollists, NIMBLE node handling, and probably Nimble internals.Goal
A new user should be able to install the package, open the README or vignette, copy one example, run one high-level function, and interpret the result using
print(),summary(), andplot()without needing to understand the internal calibration engine.A future user-facing workflow might look like:
Some details
One possibility here is to think about this similarly as nimble sequential setup via
runMCMC()vs thenimbleMCMC()one-line invocationAn option would be to keep the
runCalibration()andrunCalibrationNIMBLE()as the advanced generic functions and consider adding user-friendly functions, e.g.,cppp()andcppp_nimble(). Those two functions can userunCalibration()internally and will handle setting a number of defaults for users.Notes
paramNamesanddataNamescan be optional; we can figure out roles of the nodes from nimble model