Learn R Programming

nlsr (version 2021.8.19)

resss: Compute sum of squares from residuals via the residual function.

Description

For a nonlinear model originally expressed as an expression of the form lhs ~ formula_for_rhs assume we have a resfn and jacfn that compute the residuals and the Jacobian at a set of parameters. This routine computes the sum of squares of the residuals.

Usage

resss(prm, resfn, ...)

Value

The scalar numeric value of the sum of squares at the paramters.

Arguments

prm

A parameter vector. For our example, we could use start=c(b1=1, b2=2.345, b3=0.123) However, the names are NOT used, only positions in the vector.

resfn

A function to compute the residuals of our model at a parameter vector.

...

Any data needed for computation of the residual vector from the expression rhsexpression - lhsvar. Note that this is the negative of the usual residual, but the sum of squares is the same.

Author

John C Nash <nashjc@uottawa.ca>

Details

resss calls resfn to compute residuals and then uses crossprod to compute the sum of squares.

At 2012-4-26 there is no checking for errors. The evaluations of residuals and the cross product could be wrapped in try() if the evaluation could be inadmissible.

References

Nash, J. C. (1979, 1990) _Compact Numerical Methods for Computers. Linear Algebra and Function Minimisation._ Adam Hilger./Institute of Physics Publications

others!!

See Also

Function nls(), packages optim and optimx.

Examples

Run this code
shobbs.res  <-  function(x){ # scaled Hobbs weeds problem -- residual
# This variant uses looping
    if(length(x) != 3) stop("hobbs.res -- parameter vector n!=3")
    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)
    tt  <-  1:12
    res  <-  100.0*x[1]/(1+x[2]*10.*exp(-0.1*x[3]*tt)) - y
}
 
st  <-  c(b1=1, b2=1, b3=1)

firstss<-resss(st, shobbs.res)
# The sum of squares of the scaled Hobbs function at parameters
st
firstss
# now illustrate how to get solution via optimization

tf <- function(prm){
  val <- resss(prm, shobbs.res)
}
testop <- optim(st, tf, control=list(trace=1))
testop

Run the code above in your browser using DataLab