selfStart               package:stats               R Documentation

_C_o_n_s_t_r_u_c_t _S_e_l_f-_s_t_a_r_t_i_n_g _N_o_n_l_i_n_e_a_r _M_o_d_e_l_s

_D_e_s_c_r_i_p_t_i_o_n:

     Construct self-starting nonlinear models.

_U_s_a_g_e:

     selfStart(model, initial, parameters, template)

_A_r_g_u_m_e_n_t_s:

   model: a function object defining a nonlinear model or a nonlinear
          formula object of the form '~expression'.

 initial: a function object, taking three arguments: 'mCall', 'data',
          and 'LHS', representing, respectively, a matched call to the
          function 'model', a data frame in which to interpret the
          variables in 'mCall', and the expression from the left-hand
          side of the model formula in the call to 'nls'. This function
          should return initial values for the parameters in 'model'.

parameters: a character vector specifying the terms on the right hand
          side of 'model' for which initial estimates should be
          calculated.  Passed as the 'namevec' argument to the 'deriv'
          function.

template: an optional prototype for the calling sequence of the
          returned object, passed as the 'function.arg' argument to the
          'deriv' function.  By default, a template is generated with
          the covariates in 'model' coming first and the parameters in
          'model' coming last in the calling sequence.

_D_e_t_a_i_l_s:

     This function is generic; methods functions can be written to
     handle specific classes of objects.

_V_a_l_u_e:

     a function object of class '"selfStart"', for the 'formula' method
     obtained by applying 'deriv' to the right hand side of the 'model'
     formula.  An 'initial' attribute (defined by the 'initial'
     argument) is added to the function to calculate starting estimates
     for the parameters in the model automatically.

_A_u_t_h_o_r(_s):

     Jose Pinheiro and Douglas Bates

_S_e_e _A_l_s_o:

     'nls'

_E_x_a_m_p_l_e_s:

     ## self-starting logistic model

     SSlogis <- selfStart(~ Asym/(1 + exp((xmid - x)/scal)),
       function(mCall, data, LHS)
       {
         xy <- sortedXyData(mCall[["x"]], LHS, data)
         if(nrow(xy) < 4) {
           stop("Too few distinct x values to fit a logistic")
         }
         z <- xy[["y"]]
         if (min(z) <= 0) { z <- z + 0.05 * max(z) } # avoid zeroes
         z <- z/(1.05 * max(z))              # scale to within unit height
         xy[["z"]] <- log(z/(1 - z))         # logit transformation
         aux <- coef(lm(x ~ z, xy))
         parameters(xy) <- list(xmid = aux[1], scal = aux[2])
         pars <- as.vector(coef(nls(y ~ 1/(1 + exp((xmid - x)/scal)), 
                                  data = xy, algorithm = "plinear")))
         value <- c(pars[3], pars[1], pars[2])
         names(value) <- mCall[c("Asym", "xmid", "scal")]
         value
       }, c("Asym", "xmid", "scal"))

     # 'first.order.log.model' is a function object defining a first order
     # compartment model 
     # 'first.order.log.initial' is a function object which calculates initial
     # values for the parameters in 'first.order.log.model'

     # self-starting first order compartment model
     ## Not run: 
     SSfol <- selfStart(first.order.log.model, first.order.log.initial)
     ## End(Not run)

