SSbiexp
Self-Starting Nls Biexponential model
Description
This selfStart
model evaluates the biexponential model function and its gradient. It has an initial
attribute that creates initial estimates of the parameters A1
, lrc1
, A2
, and lrc2
.
Usage
SSbiexp(input, A1, lrc1, A2, lrc2)
Arguments
input | a numeric vector of values at which to evaluate the model. |
A1 | a numeric parameter representing the multiplier of the first exponential. |
lrc1 | a numeric parameter representing the natural logarithm of the rate constant of the first exponential. |
A2 | a numeric parameter representing the multiplier of the second exponential. |
lrc2 | a numeric parameter representing the natural logarithm of the rate constant of the second exponential. |
Value
a numeric vector of the same length as input
. It is the value of the expression A1*exp(-exp(lrc1)*input)+A2*exp(-exp(lrc2)*input)
. If all of the arguments A1
, lrc1
, A2
, and lrc2
are names of objects, the gradient matrix with respect to these names is attached as an attribute named gradient
.
Author(s)
José Pinheiro and Douglas Bates
See Also
Examples
Indo.1 <- Indometh[Indometh$Subject == 1, ] SSbiexp( Indo.1$time, 3, 1, 0.6, -1.3 ) # response only A1 <- 3; lrc1 <- 1; A2 <- 0.6; lrc2 <- -1.3 SSbiexp( Indo.1$time, A1, lrc1, A2, lrc2 ) # response and gradient print(getInitial(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = Indo.1), digits = 5) ## Initial values are in fact the converged values fm1 <- nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = Indo.1) summary(fm1) ## Show the model components visually require(graphics) xx <- seq(0, 5, length.out = 101) y1 <- 3.5 * exp(-4*xx) y2 <- 1.5 * exp(-xx) plot(xx, y1 + y2, type = "l", lwd=2, ylim = c(-0.2,6), xlim = c(0, 5), main = "Components of the SSbiexp model") lines(xx, y1, lty = 2, col="tomato"); abline(v=0, h=0, col="gray40") lines(xx, y2, lty = 3, col="blue2" ) legend("topright", c("y1+y2", "y1 = 3.5 * exp(-4*x)", "y2 = 1.5 * exp(-x)"), lty=1:3, col=c("black","tomato","blue2"), bty="n") axis(2, pos=0, at = c(3.5, 1.5), labels = c("A1","A2"), las=2) ## and how you could have got their sum via SSbiexp(): ySS <- SSbiexp(xx, 3.5, log(4), 1.5, log(1)) ## --- --- stopifnot(all.equal(y1+y2, ySS, tolerance = 1e-15)) ## Show a no-noise example datN <- data.frame(time = (0:600)/64) datN$conc <- predict(fm1, newdata=datN) plot(conc ~ time, data=datN) # perfect, no noise ## IGNORE_RDIFF_BEGIN ## Fails by default (scaleOffset=0): ## Not run: nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = datN, trace=TRUE) ## End(Not run) fmX1 <- nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = datN, control = list(scaleOffset=1)) fmX <- nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = datN, control = list(scaleOffset=1, printEval=TRUE, tol=1e-11, nDcentral=TRUE), trace=TRUE) all.equal(coef(fm1), coef(fmX1), tolerance=0) # ... rel.diff.: 1.57e-6 all.equal(coef(fm1), coef(fmX), tolerance=0) # ... rel.diff.: 1.03e-12 ## IGNORE_RDIFF_END stopifnot(all.equal(coef(fm1), coef(fmX1), tolerance = 6e-6), all.equal(coef(fm1), coef(fmX ), tolerance = 1e-11))
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.