Given a nonlinear model expressed as an expression of the form
lhs ~ formula_for_rhs
and a start vector where parameters used in the model formula are named,
attempts to build the the
R function for the gradient of the
residual sum of squares.
As a side effect, a text file with the program code is generated.
This is a modeling formula of the form (as in
A named parameter vector. For our example, we could use start=c(b1=1, b2=2.345, b3=0.123) WARNING: the parameters in the output function will be used in the order presented in this vector. Names are NOT respected in the output function.
The (optional) name for the function that is generated in the file named in the next argument. The default name is 'mygr'.
The (optional) name of a file that is written containing the (text) program code for the function. If NULL, no file is written.
R function object that computes the gradient of the sum of
squared residuals of a nonlinear model at a set of parameters.
John C Nash <[email protected]>
Nash, J. C. (1979, 1990) _Compact Numerical Methods for Computers. Linear Algebra and Function Minimisation._ Adam Hilger./Institute of Physics Publications
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
cat("See also examples in nlmrt-package.Rd\n") require(numDeriv) y <- c(5.308, 7.24, 9.638, 12.866, 17.069, 23.192, 31.443, 38.558, 50.156, 62.948, 75.995, 91.972) # for testing tt <- seq_along(y) # for testing f <- y ~ b1/(1 + b2 * exp(-1 * b3 * tt)) p <- c(b1 = 1, b2 = 1, b3 = 1) mygr <- model2grfun(f, p) myss <- model2ssfun(f, p) # for check cat("mygr:\n") print(mygr) ans <- mygr(p, tt = tt, y = y) print(ans) gnum <- grad(myss, p, tt = tt, y = y) cat("Max(abs(ans-gnum)) = ",max(abs(ans-gnum)),"\n") bnew <- c(b1 = 200, b2 = 50, b3 = 0.3) ans <- mygr(prm = bnew, tt = tt, y = y) print(ans) gnum <- grad(myss, bnew, tt = tt, y = y) cat("Max(abs(ans-gnum)) = ",max(abs(ans-gnum)),"\n") cat("Test with un-named vector\n") # At 20120424 should fail bthree <- c(100, 40, 0.1) ans <- mygr(prm = bthree, tt = tt, y = y) print(ans) gnum <- grad(myss, bthree, tt = tt, y = y) cat("Max(abs(ans-gnum)) = ",max(abs(ans-gnum)),"\n")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.