fitsigmoid function

Data-Fitting Function for the Sigmoid Growth Equation

Data-Fitting Function for the Sigmoid Growth Equation

fitsigmoid is used to estimate the parameters of a sigmoid growth equation based on the integral of a performance equation or one of its simplified versions. UTF-8

fitsigmoid(expr, x, y, ini.val, simpver = 1, control = list(), par.list = FALSE, fig.opt = FALSE, xlim = NULL, ylim = NULL, xlab = NULL, ylab = NULL, main = NULL, subdivisions = 100L, rel.tol = .Machine$double.eps^0.25, abs.tol = rel.tol, stop.on.error = TRUE, keep.xy = FALSE, aux = NULL)

Arguments

  • expr: a performance equation or one of its simplified versions that is used to build a sigmoid growth equation.
  • x: the observed investigation times.
  • y: the observed yy values (i.e., biomass, height, body length, etc.).
  • ini.val: the initial values of the model parameters.
  • simpver: an optional argument to use the simplified version of the performance equation.
  • control: the list of control parameters for using the optim function in package stats.
  • par.list: the option of showing the list of parameters on the screen.
  • fig.opt: an optional argument to draw the observations and the predicted sigmoid curve.
  • xlim: the range of the xx-axis over which to plot a sigmoid growth curve.
  • ylim: the range of the yy-axis over which to plot a sigmoid growth curve.
  • xlab: the label of the xx-axis when showing a sigmoid growth curve.
  • ylab: the label of the yy-axis when showing a sigmoid growth curve.
  • main: the main title of the figure.
  • subdivisions: please see the arguments for the integrate function in package stats.
  • rel.tol: please see the arguments for the integrate function in package stats.
  • abs.tol: please see the arguments for the integrate function in package stats.
  • stop.on.error: please see the arguments for the integrate function in package stats.
  • keep.xy: please see the arguments for the integrate function in package stats.
  • aux: please see the arguments for the integrate function in package stats.

Details

Here, ini.val only includes the initial values of the model parameters as a list. The Nelder-Mead algorithm (Nelder and Mead, 1965) is used to carry out the optimization of minimizing the residual sum of squares (RSS) between the observed and predicted yy values. The optim

function in package stats was used to carry out the Nelder-Mead algorithm. The performance equations denote MbetaE, MBriereE, MLRFE, MPerformanceE and their simplified versions. The arguments of P and simpver should correspond to expr (i.e., MbetaE or MBriereE

or MLRFE or MPerformanceE). The sigmoid equation is the integral of a performance equation or one of its simplified versions.

Returns

  • par: the estimates of the model parameters.

  • r.sq: the coefficient of determination between the observed and predicted yy values.

  • RSS: the residual sum of squares between the observed and predicted yy values.

  • sample.size: the number of data points used in the data fitting.

  • x: the observed xx values.

  • y: the observed yy values.

  • y.pred: the predicted yy values.

Note

Here, the user can define other performance equations, but new equations or their simplified versions should include the lower and upper thresholds on the xx-axis corresponding to y=0y = 0, whose indices should be the same as those in MbetaE or MBriereE

or MLRFE or MPerformanceE.

Author(s)

Peijian Shi pjshi@njfu.edu.cn , Johan Gielis johan.gielis@uantwerpen.be , Brady K. Quinn Brady.Quinn@dfo-mpo.gc.ca .

References

Jin, J., Quinn, B.K., Shi, P. (2022) The modified Brière equation and its applications. Plants 11, 1769. tools:::Rd_expr_doi("10.3390/plants11131769")

Lian, M., Shi, P., Zhang, L., Yao, W., Gielis, J., Niklas, K.J. (2023) A generalized performance equation and its application in measuring the Gini index of leaf size inequality. Trees - Structure and Function 37, 1555-1565. tools:::Rd_expr_doi("10.1007/s00468-023-02448-8")

Nelder, J.A., Mead, R. (1965) A simplex method for function minimization. Computer Journal 7, 308-313. tools:::Rd_expr_doi("10.1093/comjnl/7.4.308")

Shi, P., Fan, M., Ratkowsky, D.A., Huang, J., Wu, H., Chen, L., Fang, S., Zhang, C. (2017) Comparison of two ontogenetic growth equations for animals and plants. Ecological Modelling 349, 1-10. tools:::Rd_expr_doi("10.1016/j.ecolmodel.2017.01.012")

Shi, P., Gielis, J., Quinn, B.K., Niklas, K.J., Ratkowsky, D.A., Schrader, J., Ruan, H., Wang, L., Niinemets, Ü. (2022) 'biogeom': An R package for simulating and fitting natural shapes. Annals of the New York Academy of Sciences 1516, 123-134. tools:::Rd_expr_doi("10.1111/nyas.14862")

See Also

areaovate, MbetaE, MBriereE, MLRFE, MPerformanceE, sigmoid

Examples

# The shrimp growth data(See the supplementary table in West et al., 2001) # West, G.B., Brown, J.H., Enquist, B.J. (2001) A general model for ontogenetic growth. # Nature 413, 628-631. t0 <- c(3, 60, 90, 120, 150, 180, 384) m0 <- c(0.001, 0.005, 0.018, 0.037, 0.06, 0.067, 0.07) dev.new() plot( t0, m0, cex.lab=1.5, cex.axis=1.5, col=4, xlab=expression(italic(x)), ylab=expression(italic(y)) ) xopt0 <- seq(100, 150, by=5) ini.val <- list(0.035, xopt0, 200, 1) resu1 <- fitsigmoid(MLRFE, x=t0, y=m0, ini.val=ini.val, simpver=1, fig.opt=TRUE, par.list=TRUE) xopt0 <- seq(100, 150, by=5) ini.val <- list(0.035, xopt0, 200, 1) resu1 <- fitsigmoid(MbetaE, x=t0, y=m0, ini.val=ini.val, simpver=1, fig.opt=TRUE) m.ini <- c(0.5, 1, 2, 3, 4, 5, 10, 20) ini.val <- list(1e-8, m.ini, 200, 1) resu2 <- fitsigmoid(MBriereE, x=t0, y=m0, ini.val=ini.val, simpver=1, fig.opt=TRUE, control=list(reltol=1e-20, maxit=20000, trace=FALSE), subdivisions=100L, rel.tol=.Machine$double.eps^0.25, abs.tol=.Machine$double.eps^0.25, stop.on.error=TRUE, keep.xy=FALSE, aux=NULL) delta0 <- c(0.5, 1, 2, 5, 10, 20) ini.val <- list(0.035, 150, -100, 200, delta0) resu3 <- fitsigmoid(MLRFE, x=t0, y=m0, ini.val=ini.val, simpver=NULL, fig.opt=TRUE, control=list(reltol=1e-20, maxit=20000), subdivisions = 100L, rel.tol=.Machine$double.eps^0.25, abs.tol=.Machine$double.eps^0.25, stop.on.error=TRUE, keep.xy=FALSE, aux=NULL) a.ini <- c(0.1, 1, 10, 100, 200) b.ini <- 200 ini.val <- list(0.001, 0.02, 0.15, 0, 200, a.ini, b.ini) resu4 <- fitsigmoid(MPerformanceE, x=t0, y=m0, ini.val=ini.val, simpver=NULL, fig.opt=TRUE, control=list(reltol=1e-20, maxit=20000, trace=FALSE), subdivisions=100L, rel.tol=.Machine$double.eps^0.25, abs.tol=.Machine$double.eps^0.25, stop.on.error=TRUE, keep.xy=FALSE, aux=NULL) resu5 <- fitsigmoid(MPerformanceE, x=t0, y=m0, ini.val=resu4$par, simpver=NULL, fig.opt=TRUE, control=list(reltol=1e-30, maxit=200000, trace=FALSE)) ini.val <- list(0.001, 0.01, c(0.1, 1, 10), 0, 200) resu6 <- fitsigmoid(MPerformanceE, x=t0, y=m0, ini.val=ini.val, simpver=2, fig.opt=TRUE, control=list(reltol=1e-20, maxit=20000, trace=FALSE), subdivisions=100L, rel.tol=.Machine$double.eps^0.25, abs.tol=.Machine$double.eps^0.25, stop.on.error=TRUE, keep.xy=FALSE, aux=NULL) graphics.off()
  • Maintainer: Peijian Shi
  • License: GPL (>= 2)
  • Last published: 2024-03-29

Useful links