An R package to find multiple approximate minimizers of a nonlinear least squares problem
argmin_x || f(x) - y* ||
without assuming the minimizer is unique. In the context of model
fitting, f is the model, x is the parameter to
estimate, and y* is the observed data. Because CGNM
searches from a range of initial iterates rather than a single
starting point, and returns many approximate minimizers at once, it can
also reveal when a model’s parameters are not practically identifiable
(the returned minimizers won’t converge to a single point).
See the papers below for the algorithm and comparisons with conventional multi-start optimization:
If you use CGNM in your research, please cite the relevant paper(s) above.
nls() will be faster.nls().# from a local checkout of this repository
install.packages("path/to/CGNM", repos = NULL, type = "source")
# or, from within the checked-out directory
# R CMD INSTALL .library(CGNM)
# flip-flop kinetics: a model known to have two distinct best-fit solutions
model_function <- function(x) {
observation_time <- c(0.1, 0.2, 0.4, 0.6, 1, 2, 3, 6, 12)
Dose <- 1000; F <- 1
ka <- x[1]; V1 <- x[2]; CL_2 <- x[3]
t <- observation_time
Cp <- ka * F * Dose / (V1 * (ka - CL_2 / V1)) * (exp(-CL_2 / V1 * t) - exp(-ka * t))
log10(Cp)
}
observation <- log10(c(4.91, 8.65, 12.4, 18.7, 24.3, 24.5, 18.4, 4.66, 0.238))
CGNM_result <- Cluster_Gauss_Newton_method(
nonlinearFunction = model_function,
targetVector = observation,
initial_lowerRange = rep(0.01, 3),
initial_upperRange = rep(100, 3),
saveLog = FALSE
)
acceptedApproximateMinimizers(CGNM_result)Then inspect the fit visually:
library(ggplot2)
plot_Rank_SSR(CGNM_result)
plot_goodnessOfFit(CGNM_result, plotType = 1,
independentVariableVector = c(0.1,0.2,0.4,0.6,1,2,3,6,12),
plotRank = seq(1, 50))

For the full workflow — fitting, residual-resampling bootstrap,
accepted minimizers, summary tables, and profile likelihood — see
vignette("CGNM-vignette", package = "CGNM") or vignettes/CGNM-vignette.Rmd.
?CGNM — package overview and workflow map.?Cluster_Gauss_Newton_method — the main fitting
function.By default, Cluster_Gauss_Newton_method() and the
bootstrap/EBE variants return a plain list. Pass
outputS4 = TRUE to get a CGNM_result S4 object
instead (see ?"CGNM_result-class") — every field is still
reachable via $/[[ exactly as on the list, so
this is a drop-in, fully backward- compatible opt-in.
MIT. See LICENSE.