TODO: o The vignettes R-analytic-derivatives.Rmd, nlsr-derivs.Rmd, and nlsr-devdoc.Rmd still have some unresolved issues or missing examples. Help to complete these is welcomed. Some of these are reflected in the nlsDerivEtcX.R script. Issues are identified with a double question mark "??". o Class and attributes of print.nlsr, summary.nlsr etc. in nlsr.package.R?? Are there functions we could remove? o In order to run functional weights, a function like minpack.lm::wfct() is needed. The underlying fitted, predict, and resid are now present. Note a possibly related issue when wfct() is used in nls() or nlsLM() with try(). This seems to be a bug in wfct(). Issues: nlsLM does eval(substitute(weights)) which will evaluate the function. nlxb and nlfb use static weights. nlsLM also creates effectively a resfn that INCLUDES the weights and nls.lm does NOT have weights. nlfb() DOES. So there is some considerable change needed to bring in the weights as a function.?? o Can we get a better explanation of the workings of codeDeriv, fnDeriv, nlsDeriv etc.? JN: I do not feel confident I can explain these codes sufficiently well. o dot args, with tests to make sure they are working. OR: Can we remove them? Is there any situation where needed? Are they required to mesh with some structure in R-base? nlxb does NOT use dotargs (should it?) Note nls() manpage says about dotargs that "None are used at present." Function model2rjfun.R DOES have dotargs. Should make sure they function properly.?? nlfb() should probably use them. A test is needed. ?? model2rjfun() has ... also. ?? o boot_nlsr would be nice, but perhaps use the tools from nlraa o compare numericDeriv and numericDerivR -- see inst/doc/development/nlsDerivEtcX.R 221109 NOT working fully?? Some documentation issues. This work was mainly to understand the numericDeriv() function used by nls() and minpack.lm::nlsLM() and is not critical to nlsr package. o Add nls2 like capability to have grid of starting values?? 230508 o pnlm0() and pnls0() replaced with pnlslm() and pnls() for more informative naming. pnlslm() gets correct iteration count reported. o Some cleanup of man files as reported by R CMD check. 230212 o Some cleanup of structure. Added 1-line reporting functions to save output length. 221123 o moved development documents to inst/doc/development/ directory o print.nlsr() and summary.nlsr() fixed for problems where all parameters masked. o Add Fernando Marquez and Arkajyoti Bhattacharjee as contributors. o Added prt() function to enable name of object being printed to be displayed. See also nvec(). o resid(), fitted() etc. seem to be working as at 20221121 resgr() modified to handle numerical approximations to Jacobian but NOT Jacobian code in selfStart models (control "SSJac") o nlfb() has argument ctrlcopy which if TRUE uses controls from call, else defaults. Examples now show backtrack search. o An "Intro to nlsr" vignette has been added. o Added SSlogisJN.R as a replacement for SSlogis.R in nls(). The latter function essentially solves the problem by a different minimization algorithm. It therefore "starts" nls() with the solution. Probably best to see if getInitial can be improved --> getStart to add to some models o Minor revision and cleanup of tests. More could be added. o nlsrSS function added to simplify use of selfStart problems with nlsr o nlfb() examples now show how to force Hartley method by appropriate control vector settings o Added example of jacobian=FALSE to model2rjfun and model2expr and gradient=FALSE in SSmod2rjfun 220829 o Add Intro-to-nlsr.Rmd vignette 220819 o wrapnlsr() revised to include subset and weights as well as bounds (automatically calling "port" algorithm when bounds used). nlxb() is called first, then parameters used in nls(). An issue with scoping was solved thanks to help from John Fox and Noah Griefer. o subset in nlxb() imposed by using 0 weights for observations not in the subset. This appears to work for nls() also, though that does use the regular R modeling mechanism for subset. o added scaleOffset to controls to replace a fixed number in the relative offset convergence criteria in nlfb(). NOTE: This is similar but NOT exactly the same as the usage in nls() due to differences in program structure. o By specifying control$japprox="SSJac" with a formula that involves a selfStart model, we can use gradient (Jacobian) code from that model. o SEs when masks invoked appears to be working correctly. o Put trap in nlxb() to stop execution if "subset" argument present in call. o Showed how to put an R function in a model IF we set japprox control for nlxb o REMOVED 'masked' argument from nlxb() as a list of names of fixed (masked) parameters. Instead simply set lower bounds equal to upper bounds when masking. Similarly REMOVE 'maskidx' argument from nlfb() as an index vector of fixed (masked parameters. Again use equal lower and upper bounds for masked parameters. o Added generation of parameter names (p1, p2, etc.) in nlfb() if names not provided o Control japprox can be NULL, for which nlxb() will then try to use analytic or automatic derivatives, or it can be one of "jafwd", "jaback", "jacentral" or "jand" to give numerical derivative approximations using forward, backward, central or package numDeriv approximations. o Added SE output trap for "all parameters masked" situation. o parscale possibility documented in nlxb() and nlfb() but NOT implemented. o summary.nlsr() does NOT do a summary as per nls(). Possibly would be better to call it postsol() for use in print.nlsr() and to develop different print/summary methods for different uses. o Added pshort() and pnls0() to give a 1-line summary of the results of a run. pshort for nlxb() and nlfb(), while pnls0() is for nls() and minpack.lm functions. o Preliminary use of prtlvl control which allows finer control of intermediate output. As of 220725 this is still under development. 0 Controls psi, phi and stepredn now part of nlfb(). These control how the Marquardt stabilization is incorporated and the possibility of backtracking. When solving the Gauss-Newton-Marquardt equation for the step delta, we solve A delta = - gvec Pure Gauss-Newton has A = J and gvec = g (the gradient). If there are n parameters, then if psi > 0, we augment A with sqrt(psi * D) where D is the diagonal matrix where the diagonal elements are those of J' * J. (Marquardt's scaled method.). gvec is augmented with n zeros. If phi > 0 we we augment A with sqrt(psi * 1) where 1 is a unit diagonal matrix. gvec is augmented with n zeros. Either or both augmentations are possible. Default is psi=0, phi=1. (nlsr used psi=1 and phi=1 effectively) If stepredn < 1, then we backtrack along delta with a stepsize that is reduced by the value of stepredn until we get a smaller sum of squares or converge. o Solutions may be sensitive to derivative approximations, as illustrated by the example script hobbsuwt.R. 201228 o Using nls.R code from distribution of R (4.0.3), got self-start models running in nlxb(). o Vignette includes section to explain how stabilized Marquardt works 201203 o Changed requirement for Rvmmin to requirement for optimx, as Rvmmin() and Rcgmin() now in that package. o Put in jafwd, jaback, jacentral, jand for numerical jacobians 190907 o Had to remove vignette nlsr-nls-nlsLM as Windows fails to build. Source of issue not yet found. 190829 o Due to changes in Ryacas, vignette nlsr-derivs required a small edit. 190820 o nlxb() and nlfb() do not follow nls() in the output structure and hence the use of predict(). A new function nlsr.predict() has been added. o Vignette nlsr-nls-nlsLM added to explain prediction and differences between nlsr and related packages. 180128 o A minor fix to derivs.R to avoid a bug when multiple partials are computed at once o isFALSE now becoming part of R, so nlsr::isFALSE has been adjusted to be that code 171004 o Minor edits to note nlmrt (deprecated) origins, and remove vignette dependency on that package 170618 o Minor repairs to vignette examples with other packages 170320 o Added Vignette Title fields to the three vignettes 170117 o rename modeldoc to rjfundoc. It is not simple to add documentation to ssgrfun objects. 170116 o summary no longer invisible? o summary for nlxb and nlfb both now should work. If there is no name for a parameter, the name p_(position) is created. o weights should be working OK. Residuals will be weighted ones. o added resid.nlsr() function. However, predict.nlsr() is NOT present, since we can create problems with residuals (e.g., nonlinear equations) that do not have a model structure 170113 o output of summary.nlsr is class = "summary.nlsr" like summary.nls is "summary.nls"? 170110 o weights (fixed) added and documented in nlsr-devdoc.Rmd o nlfb: sumsquares via crossprod needs to be as.numeric(). Done. 170108 o removed dot args from nlxb declaration and its internal call to nlfb(), and fixed nlxb.Rd. Note nls() help says of dot args "None are used at present." o moved model2rjfunx and .Rd file to inst/dev-files o Note that nlfb() can use functionally created weights, but nls uses FIXED weights. We have added fixed weights to nlxb() and pass them to nlfb() via its dot args. 170107 o expanded dex() examples to show object class of result. Note that "language" class encompasses "expression". o made clear where the .MissingVal usage is to be found in Rd file for nlsDeriv. o in nlsr-devdoc.Rmd added silly joe(x) example to show possible trouble spot 170102 o Cleanup of package New function dex() to prepare input for nlsDeriv() Renamed Deriv to nlsDeriv. New names codeDeriv and fnDeriv. 161222 o newDeriv() now issues a warning if a derivative definition is changed. 161019 o Changed names nlsrxb and nlsrfb to nlxb and nlfb and removed superfluous nlfb. 161018 o Problem with vignettes (why?). optimx is needed (why?) BELOW ARE OUT OF DATE AND INCLUDED ONLY FOR HISTORICAL REASONS 161007 o Sort out nlsrxb to use Deriv vs deriv (vs Deriv from French) o More detailed build of rjfun to use approximations when derivs not available. o Simple GN code needed to show what happens -- should be able to write a VERY simple one for the vignette. Possibly not include in the code of nlsr. o Origin of NaN's in bounded examples. Can they be avoided? Handling of NaN in Jacfun. Need an example. o Does it make sense to have unconstrained version of nlfb when there are no masks or bounds? o Rename modss, modgr to res2ss, res2gr o Option for numerical Jacobian -- control numJac = TRUE?, with routine in nlmrt.R Way of using a "gradient" attribute when the model formula is specified like y ~ SpecialFn(xx, zz) which would allow functions not differentiable by deriv() o Weighted least squares example, especially in nlxb. o Issue when npar = 1 -- does it work? o check and fix examples? Partly done 140719 tests? o check impact of use of Deriv vs deriv and document! o make sure change to rjfun using "gradient" is clean in nlsrxb o partially linear nls models. How to incorporate? Note Rust and Oleary. o nlsr when it exceeds fn or jac count, returns bad solutions that won't print. Changes in nlsr version 2016-10.3 o name change to nlsr and consequent changes o minor fixes Changes in nlsr version 2014-7.27 o Deriv() etc. o model2rjfun() etc. o changes to nlsrxb structure Changes in nlsr version 2014-7.19 o The parameters MUST be named when setting up model2resfun etc., but the resulting function can be called with an un-named vector of parameters. o Name reset to reflect intent to substitute for nls() o wrapnls replaced by wrapnlsr o use of ... args replaced with data = mydata (dataframe) o 1-sided models which start with the tilde are now allowed in nlsr functions. Changes in nlmrt version 2013-8.26 o Relative offset convergence test (not exactly as in nls()) residual and jacobian in summary & print methods o coef() method in nlmrt.R so names carried through o summary() and print() cleanup o partial and minor documentation improvement Changes in nlmrt version 2013-8.10 o fix line length issue in examples Changes in nlmrt version 2013-7.9 o Added control list elements to .Rd files for nlxb and nlfb, with reference in wrapnls. o Put in a test for very small sum of squares in nlfb and nlxb. Changes in nlmrt version 2013-3.16 o Result element coeffs changed to coefficients. This alters wrapnls.R code also. Changes in nlmrt version 2012-9.03 o More features in summary(). Changes in nlmrt version 2012-9.03 o summary() for output from different functions. Should display constraints if possible as per JNMWS codes. Warnings / Notes fixed re: dependencies in vignette, methods. o Sort out display in vignette Note warning "unstated dependencies in vignette" Changes in nlmrt version 2012-8.12 o Bounds and masks examples in nlmrt-vignette. Changes in nlmrt version 2012-8.04 o Vignette nlmrt-vignette updated. o Functions to convert expression to residual, Jacobian, sum of squares and gradient functions (for use with optimx or nlmrt:nlfb or minpack.lm:nls.lm o The examples in ./inst/examples/ are calling routines that have been renamed. These have, I believe, been fixed. o nlfb() needs an explicit Jacobian function and needs a way to compute numerical Jacobian if omitted. Fixed, I believe. Changes in nlmrt version 2012-6.01 o Removed diagnostic printout of bdmsk in nlfb Changes in nlmrt version 2012-4.15 o Added nlfb to allow functions for residual and Jacobian. These are developed from the expression for the residuals as a model in nlxb. o Bounds now in wrapnls. o Note misleading trace output in nls() runs with bounds.