Learn R Programming

nlreg (version 1.2-2.2)

Dmean: Differentiate the Mean Function of a Nonlinear Model

Description

Calculates the gradient and Hessian of the mean function of a nonlinear heteroscedastic model.

Usage

Dmean(nlregObj, hessian = TRUE)

Arguments

nlregObj

a nonlinear heteroscedastic model fit as obtained from a call to nlreg.

hessian

logical value indicating whether the Hessian should be computed. The default is TRUE.

Value

a function whose arguments are named according to the parameters of the nonlinear model nlregObj. When evaluated, it returns the value of the mean function along with attributes called gradient and hessian, the latter if requested. These are the gradient and Hessian of the mean function with respect to the regression coefficients.

Details

The mean function is differentiated with respect to the regression coefficients as specified in the coef component of the nlreg object. The returned function definition, however, includes all parameters --- regression coefficients and variance parameters --- as arguments. When evaluated, it implicitly refers to the data to whom the model was fitted and which must be on the search list. The gradient and Hessian are calculated for each data point: the gradient attribute is a \(n\times p\) matrix and the hessian attribute is a \(n\times p\times p\) array, where \(n\) and \(p\) are respectively the number of data points and the number of regression coefficients.

References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language: A Programming Environment for Data Analysis and Graphics. London: Chapman \& Hall. Section 9.6.

Brazzale, A. R. (2000) Practical Small-Sample Parametric Inference. Ph.D. Thesis N. 2230, Department of Mathematics, Swiss Federal Institute of Technology Lausanne.

See Also

Dvar, nlreg.object, deriv3, D

Examples

Run this code
# NOT RUN {
library(boot)
data(calcium)
calcium.nl <- nlreg( cal ~ b0*(1-exp(-b1*time)), 
                     start = c(b0 = 4, b1 = 0.1),  data = calcium )
Dmean( calcium.nl )
##function (b0, b1, logs)
##{
##    .expr3 <- exp(-b1 * time)
##    .expr4 <- 1 - .expr3
##    .expr6 <- .expr3 * time
##    .value <- b0 * .expr4
##    .grad <- array(0, c(length(.value), 2), list(NULL, c("b0",
##        "b1")))
##    .hessian <- array(0, c(length(.value), 2, 2), list(NULL,
##        c("b0", "b1"), c("b0", "b1")))
##    .grad[, "b0"] <- .expr4
##    .hessian[, "b0", "b0"] <- 0
##    .hessian[, "b0", "b1"] <- .hessian[, "b1", "b0"] <- .expr6
##    .grad[, "b1"] <- b0 * .expr6
##    .hessian[, "b1", "b1"] <- -(b0 * (.expr6 * time))
##    attr(.value, "gradient") <- .grad
##    attr(.value, "hessian") <- .hessian
##    .value
##}
##
param( calcium.nl )
##        b0         b1       logs
## 4.3093653  0.2084780 -1.2856765
##
attach( calcium )
calcium.md <- Dmean( calcium.nl )
attr( calcium.md( 4.31, 0.208, -1.29 ), "gradient" )
##              b0       b1
## [1,] 0.08935305 1.766200
## [2,] 0.08935305 1.766200
## [3,] 0.08935305 1.766200
## [4,] 0.23692580 4.275505
## \dots
detach()
# }

Run the code above in your browser using DataLab