| SSny0 {richards} | R Documentation |
This selfStart model evaluates a Richards function and its gradient.
It has an initial attribute that will evaluate initial estimates of the
parameters a, d, b, and x50 for a given set
of data for ny fixed to -1, -1/3, 0, 1, 2, 3, or 4.
For ny equal to -1 we have the Monomolecular curve,
also known as the the Bertalenffy model (for the length).
For ny equal to -1/3 we the Bertalenffy model (for the weight).
(The 'growth' parameter b should be negative, and a
is thus the right side (larger) asymptote for Bertalenffy models.)
The Gompertz growth model is achieved by ny equal to 0,
and the four parameter logistic curve by ny equal to 1.
SSnym1(input, a, d, b, x50)
SSnym1o3(input, a, d, b, x50)
SSny0(input, a, d, b, x50)
SSny0Log(input, a, d, xmid, scal)
SSny0LogB(input, a, d, xmid, b)
SSny1(input, a, d, b, x50)
SSny2(input, a, d, b, x50)
SSny3(input, a, d, b, x50)
SSny4(input, a, d, b, x50)
input |
a numeric vector of values at which to evaluate the model. |
a |
a numeric parameter representing the horizontal asymptote on the
left side (very small values of input) for b positive,
else the horizontal asymptote on the right side. |
d |
a numeric parameter representing the horizontal asymptote on the
right side (very large values of input) for b positive,
else the horizontal asymptote on the left side. |
b |
a numeric scale parameter on the input axis,
the 'growth rate', the reciprocal of the scale parameter
scal for the four point logistic curve by SSfpl. |
x50 |
a numeric parameter representing the input value at
the center of the curve:
The value of the function will be midway
between a and d at x50. |
xmid |
The value of SSny0Log will be midway between
a and d at xmid. |
scal |
a numeric scale parameter on the input axis, the 'growth rate'. |
a numeric vector of the same length as input.
It is the value of the expression
ny = -1: | d + (a - d) * (1 - 1/2 * (input/x50)^b), |
if 1 - 1/2 * (input/x50)^b > 0, |
|
else d, |
|
ny = -1/3: | d + (a - d) * (1 + (2^(-1/3)-1) * (input/x50)^b)^3, |
if 1 + (2^(-1/3)-1) * (input/x50)^b > 0, |
|
else d, |
|
ny = 0, Log: | d + (a - d) * exp( -log(2) * exp((input - xmid) / scal)), |
ny = 0, LogB: | d + (a - d) * exp(- log(2) * exp(b * (input - xmid))), |
ny = 0: | d + (a - d) * exp( -log(2) * (input/x50)^b), |
ny = 1: | d + (a - d) / (1 + (input/x50)^b), |
ny = 2: | d + (a - d) / sqrt(1 + 3 * (input/x50)^b), |
ny = 3: | d + (a - d) / (1 + 7 * (input/x50)^b)^(1/3), |
ny = 4: | d + (a - d) / sqrt(sqrt((1 + 15 * (input/x50)^b))). |
a, d, b (scal),
and x50 (xmid) are names of objects,
the gradient matrix with respect to these
names is attached as an attribute named gradient.
Jens Henrik Badsberg
x <- c(25, 50, 100, 200, 400)
fpl( x, 0.1, 2.4, 100, 2)
SSny1( x, 0.1, 2.4, 2, 100)
SSnyFixed(1, x, 0.1, 2.4, 2, 100)
SSfpl( log(x), 0.1, 2.4, log(100), 1/2)
richards( x, 0.1, 2.4, x50 = 100, b = 2, ny = 1)
SSfpl( -log(x), 2.4, 0.1, -log(100), 1/2)
SSrichardsLog( log(x), 0.1, 2.4, log(100), 1/2, 1)
SSnyFixedLog(1, log(x), 0.1, 2.4, log(100), 1/2)
a <- 2.5
d <- 0
x50 <- 100
b <- 2
e <- solveE(x50 = x50, b = b, ny = 0)
Asym <- 2.5
b2 <- 1/e^b
b3 <- exp(b)
richards( x, 2.5, 0.0, x50 = 100, b = 2, ny = 0)
SSny0( x, 2.5, 0.0, 2, 100)
SSgompertz(log(x), Asym, b2, b3)
SSny0Log(log(x), 2.5, 0.0, log(100), 1/2)
# The following calls does return identical values:
x <- c(25, 50, 100, 200, 400)
richards( x, 0.1, 2.4, x50 = 100, b = 2, ny = 2)
SSrichardsLog( log(x), 0.1, 2.4, log(100), 1/2, ny = 2)
# The following calls does return identical values:
x <- c(25, 50, 100, 1000, 10000)
# x/x50 = (-x)/(-x50):
c( SSrichards( x, a = 0.1, d = 2.4,
x50 = 100, b = 2, ny = 2))
c( SSrichards( -x, a = 0.1, d = 2.4,
x50 = -100, b = 2, ny = 2))
# b * (log(x) - log(xmid)) = -b * (- log(x) - -log(xmid)),
# note the sign on 'scal':
c(SSrichardsLog( log(x), a = 0.1, d = 2.4,
xmid = log(100), scal = 1/2, ny = 2))
c(SSrichardsLog( -log(x), a = 0.1, d = 2.4,
xmid = -log(100), scal = -1/2, ny = 2))
(2.4-c(SSrichardsLog( (log(x)), a = 2.4, d = 0.1,
xmid = log(100), scal = 1/2, ny = 2)))+0.1
(2.4-c(SSrichardsLog( -(log(x)), a = 2.4, d = 0.1,
xmid = -log(100), scal = -1/2, ny = 2)))+0.1
# The following calls does NOT return identical values:
x <- c(25, 50, 100, 200, 400)
richards( x, 0.1, 2.4, x50 = 100, b = 1, ny = -1)
SSrichards( x, 0.1, 2.4, x50 = 100, b = 1, ny = -1)
sSrichards <- selfStart( ~ d + (a - d) / (1 + (2^ny-1)*(input/x50)^b)^(1/ny),
function (mCall, data, LHS)
initialRichards(mCall, data, LHS), c("a", "d", "b", "x50", "ny"))
sSrichards( x, 0.1, 2.4, x50 = 100, b = 1, ny = -1)