With nonlinear regression there is an iterative process, we provide the initial guess; and the algorithm does then adjusts and improves the function step by step, until it hopefully converges on a least square solution. From my experience, providing initial guesses may be quite troublesome. Therefore, it is very convenient to use R functions including the appropriate self-starting routine, which can greatly simplify the fitting process.

The packages that you can look for self-starter formulas can be found in the following packages:

if(!require('drc')){install.packages('drc');library('drc')}else{library('drc')}
if(!require('nlme')){install.packages('nlme');library('nlme')}else{library('nlme')}
if(!require('aomisc')){install.packages('aomisc');library('aomisc')}else{library('aomisc')}

Shapes

Polynomials

They arehey are actually the most flexible tool to descibe biological processes. They are simple and, although *curvilinear, they are linear in the parameters and can be fitted by using linear regression. One disadvantage is that they cannot describe asymptotic processes, which are very common in biology. Polynomialas are also prone to overfitting, we can really get a nice fit to the data which often does not reflect a sort of biological realism.

  • Nowdays (becaus the wide availability of nonlinear regression algorithms) the use of polynomials has decreased
  • Linear and quadratic polynomials are sitll used, but higher order polynomials are very rarely seen in practice

Polynomials: Linear equations

\[Y = b_0 + b_1 X\]

Polynomials: Quadratic equations

The equation is:

\[Y = b_0 + b_1X + b_2X^2\]

It is interesting to see that the first derivative is \(dY/dx\):

D(expression(a + b*X + c*X^2), "X")
b + c * (2 * X)

Polynomials: Polynomial fitting in R

Polynomials in R are fit by using the linear model function lm(). Although this is not efficient, in a couple of cases I found myself in the need of fitting a polynomial by using the nls() or drm() functions.

Concave curves

Exponential

The exponential equation describes an increasing/decreasing trend, with constant relative rate. The most common parameterisation is: \[Y = ae^{kx}\] Other possible parameterisations are \[Y = ab^X=e^{d+kX}\] First derivative of this function is \(dY/dX\):

D( expression(a * exp(k * X)), "X")
a * (exp(k * X) * k)

The exponential curve is normally used to describe the growth of a population in unlimiting environmental conditions, or to describe the degradation of xenobiotics in the environment (first-order degradation of kinetic).

The exponential function is nonlinear in k and needs to be fitted by using nls(), and drm().

Let’s see an example of fitting using the degradation dataset

library(aomisc)
Loading required package: drc
Loading required package: MASS
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     

'drc' has been loaded.

Please cite R and 'drc' if used for a publication,
for references type 'citation()' and 'citation('drc')'.


Attaching package: ‘drc’

The following objects are masked from ‘package:stats’:

    gaussian, getInitial

Loading required package: plyr
Loading required package: car
Loading required package: carData
Loading required package: multcompView
data(degradation)
head(degradation)
summary(degradation)
      Time           Conc        
 Min.   : 0.0   Min.   :  0.200  
 1st Qu.:17.5   1st Qu.:  3.075  
 Median :35.0   Median : 11.715  
 Mean   :35.0   Mean   : 25.536  
 3rd Qu.:52.5   3rd Qu.: 32.665  
 Max.   :70.0   Max.   :102.300  
plot(degradation$Conc, degradation$Timex)

model <- drm(Conc ~ Time, fct = DRC.expoDecay(), data = degradation)
summary(model)

Model fitted: Exponential Decay Model (2 parms)

Parameter estimates:

                   Estimate Std. Error t-value   p-value    
init:(Intercept) 99.6349312  1.4646680  68.026 < 2.2e-16 ***
k:(Intercept)     0.0670391  0.0019089  35.120 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error:

 2.621386 (22 degrees of freedom)
plot(model, log = "")

This is the graphics plot function. The log argument is a character string which contains “x” if the x axis is to be logarithmic, “y” if the y axis is to be logarithmic and “xy” or “yx” if both axes are to be logarithmic.

Asymptotic regression model

This is a function often used to describe limited growth in ecological models, Monomolecular growth, Mitscherlich law, and Von Bertalanffy law.

The most widespread parameterisation in ecological models is:

\[Y = a - (a-b) \cdot exp(-cX)\]

where a is the maximum attainable Y, b is Y at x = 0, and c is proportional to the relative rate of Y increase while X increases. The first derivative \(dY/dx\) is:

D(expression(a - (a - b) * exp (- c * X)), "X")
(a - b) * (exp(-c * X) * c)

that is:

\[Y' = c \cdot (a-Y)\]

what is interesting here is that we see that the rate of growth is actually max when Y is 0 and it decreases as Y increase.

Let’s examine an example

X <- c(1, 3, 5, 7, 9, 11, 13, 20)
Ye <- asymReg.fun(predictor = X, init = 0.3, m = 5, plateau = 20)
epsilon <- rnorm(8, 0, 0.005)
Y <- Ye + epsilon
model <- drm(Y ~ X, fct = DRC.asymReg())
plot(model,)# log="", main = "Asymptotic regression")

Negative exponential equation

If we adapt the asymptotic equation and add a constraint that \(b=0\), we get the following equation, that is often known as a negative exponential equation.

\[Y = a[1-exp(-cX)]\]

similar to asymptotic but for \(X = 0\), Y is also 0, meaning that the curve passes through the origin. It is often used to model the absorbed photosynthetically active radiation.

LS0tCnRpdGxlOiAnT1hJVEVDOiBQYXJhbWV0ZXIgaW5mZXJyZW5jZSAtIG5vbmxpbmVhciByZWdyZXNzaW9uIFtSXScKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogdW5pdGVkCiAgICB0b2M6IHllcwotLS0KCldpdGggbm9ubGluZWFyIHJlZ3Jlc3Npb24gdGhlcmUgaXMgYW4gaXRlcmF0aXZlIHByb2Nlc3MsIHdlIHByb3ZpZGUgdGhlIGluaXRpYWwgZ3Vlc3M7IGFuZCB0aGUgYWxnb3JpdGhtIGRvZXMgdGhlbiBhZGp1c3RzIGFuZCBpbXByb3ZlcyB0aGUgZnVuY3Rpb24gc3RlcCBieSBzdGVwLCB1bnRpbCBpdCBob3BlZnVsbHkgKmNvbnZlcmdlcyogb24gYSAqKmxlYXN0IHNxdWFyZSBzb2x1dGlvbioqLiBGcm9tIG15IGV4cGVyaWVuY2UsIHByb3ZpZGluZyBpbml0aWFsIGd1ZXNzZXMgbWF5IGJlIHF1aXRlIHRyb3VibGVzb21lLiBUaGVyZWZvcmUsIGl0IGlzIHZlcnkgY29udmVuaWVudCB0byB1c2UgUiBmdW5jdGlvbnMgaW5jbHVkaW5nIHRoZSBhcHByb3ByaWF0ZSBzZWxmLXN0YXJ0aW5nIHJvdXRpbmUsIHdoaWNoIGNhbiBncmVhdGx5IHNpbXBsaWZ5IHRoZSBmaXR0aW5nIHByb2Nlc3MuIAoKVGhlIHBhY2thZ2VzIHRoYXQgeW91IGNhbiBsb29rIGZvciAqc2VsZi1zdGFydGVyIGZvcm11bGFzKiBjYW4gYmUgZm91bmQgaW4gdGhlIGZvbGxvd2luZyBwYWNrYWdlczogIAoKKyBkcmMgLSB1c2VkIHdpdGggdGhlIGRybSgpIG5vbmxpbmVhciByZWdyZXNzaW9uIGZhY2lsaXR5IAorIG5sbWUgLSB1c2VkIHdpdGggbmxzKCksIG5sc0xpc3QoKSwgbmxtZSgpIG5vbmxpbmVhciByZWdyZXNzaW9uIGZhY2lsaXRpZXMKKyBhb21pc2MgLSBwYWNrYWdlIGRldmVsb3BlZCBieSB0aGUgYXV0aG9yCgpgYGB7ciBldmFsID0gRkFMU0V9CmlmKCFyZXF1aXJlKCdkcmMnKSl7aW5zdGFsbC5wYWNrYWdlcygnZHJjJyk7bGlicmFyeSgnZHJjJyl9ZWxzZXtsaWJyYXJ5KCdkcmMnKX0KaWYoIXJlcXVpcmUoJ25sbWUnKSl7aW5zdGFsbC5wYWNrYWdlcygnbmxtZScpO2xpYnJhcnkoJ25sbWUnKX1lbHNle2xpYnJhcnkoJ25sbWUnKX0KaWYoIXJlcXVpcmUoJ2FvbWlzYycpKXtpbnN0YWxsLnBhY2thZ2VzKCdhb21pc2MnKTtsaWJyYXJ5KCdhb21pc2MnKX1lbHNle2xpYnJhcnkoJ2FvbWlzYycpfQpgYGAKIyBTaGFwZXMKIyMgUG9seW5vbWlhbHMgCgpUaGV5IGFyZWhleSBhcmUgYWN0dWFsbHkgdGhlIG1vc3QgZmxleGlibGUgdG9vbCB0byBkZXNjaWJlIGJpb2xvZ2ljYWwgcHJvY2Vzc2VzLiBUaGV5IGFyZSBzaW1wbGUgYW5kLCBhbHRob3VnaCAqKipjdXJ2aWxpbmVhcioqLCB0aGV5IGFyZSBsaW5lYXIgaW4gdGhlIHBhcmFtZXRlcnMgYW5kIGNhbiBiZSBmaXR0ZWQgYnkgdXNpbmcgbGluZWFyIHJlZ3Jlc3Npb24uIE9uZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB0aGV5IGNhbm5vdCBkZXNjcmliZSBbYXN5bXB0b3RpYyBwcm9jZXNzZXNdKGh0dHBzOi8vbGluay5zcHJpbmdlci5jb20vYXJ0aWNsZS8xMC4xMDA3L0JGMDI1MTI5NzYpLCB3aGljaCBhcmUgdmVyeSBjb21tb24gaW4gYmlvbG9neS4gUG9seW5vbWlhbGFzIGFyZSBhbHNvIHByb25lIHRvICoqb3ZlcmZpdHRpbmcqKiwgd2UgY2FuIHJlYWxseSBnZXQgYSBuaWNlIGZpdCB0byB0aGUgZGF0YSB3aGljaCBvZnRlbiBkb2VzIG5vdCByZWZsZWN0IGEgc29ydCBvZiBiaW9sb2dpY2FsIHJlYWxpc20uICAKCisgTm93ZGF5cyAoYmVjYXVzIHRoZSB3aWRlIGF2YWlsYWJpbGl0eSBvZiBub25saW5lYXIgcmVncmVzc2lvbiBhbGdvcml0aG1zKSB0aGUgdXNlIG9mIHBvbHlub21pYWxzIGhhcyBkZWNyZWFzZWQKKyBMaW5lYXIgYW5kIHF1YWRyYXRpYyBwb2x5bm9taWFscyBhcmUgc2l0bGwgdXNlZCwgYnV0IGhpZ2hlciBvcmRlciBwb2x5bm9taWFscyBhcmUgdmVyeSByYXJlbHkgc2VlbiBpbiBwcmFjdGljZQoKCiMjIyBQb2x5bm9taWFsczogTGluZWFyIGVxdWF0aW9ucwoKJCRZID0gYl8wICsgYl8xIFgkJAoKIyMjIFBvbHlub21pYWxzOiBRdWFkcmF0aWMgZXF1YXRpb25zCgpUaGUgZXF1YXRpb24gaXM6IAoKJCRZID0gYl8wICsgYl8xWCArIGJfMlheMiQkCgpJdCBpcyBpbnRlcmVzdGluZyB0byBzZWUgdGhhdCB0aGUgZmlyc3QgZGVyaXZhdGl2ZSBpcyAkZFkvZHgkOgpgYGB7cn0KRChleHByZXNzaW9uKGEgKyBiKlggKyBjKlheMiksICJYIikKYGBgCgoKIyMjIFBvbHlub21pYWxzOiBQb2x5bm9taWFsIGZpdHRpbmcgaW4gUgoKUG9seW5vbWlhbHMgaW4gUiBhcmUgZml0IGJ5IHVzaW5nIHRoZSBsaW5lYXIgbW9kZWwgZnVuY3Rpb24gbG0oKS4gQWx0aG91Z2ggdGhpcyBpcyBub3QgZWZmaWNpZW50LCBpbiBhIGNvdXBsZSBvZiBjYXNlcyBJIGZvdW5kIG15c2VsZiBpbiB0aGUgbmVlZCBvZiBmaXR0aW5nIGEgcG9seW5vbWlhbCBieSB1c2luZyB0aGUgKipubHMoKSoqIG9yICoqZHJtKCkqKiBmdW5jdGlvbnMuCgojIyBDb25jYXZlIGN1cnZlcwoKIyMjIEV4cG9uZW50aWFsIApUaGUgZXhwb25lbnRpYWwgZXF1YXRpb24gZGVzY3JpYmVzIGFuIGluY3JlYXNpbmcvZGVjcmVhc2luZyAqdHJlbmQqLCB3aXRoIGNvbnN0YW50IHJlbGF0aXZlIHJhdGUuIFRoZSBtb3N0IGNvbW1vbiBwYXJhbWV0ZXJpc2F0aW9uIGlzOiAKJCRZID0gYWVee2t4fSQkCk90aGVyIHBvc3NpYmxlIHBhcmFtZXRlcmlzYXRpb25zIGFyZSAKJCRZID0gYWJeWD1lXntkK2tYfSQkCkZpcnN0IGRlcml2YXRpdmUgb2YgdGhpcyBmdW5jdGlvbiBpcyAkZFkvZFgkOgpgYGB7cn0KRCggZXhwcmVzc2lvbihhICogZXhwKGsgKiBYKSksICJYIikKYGBgCgpUaGUgZXhwb25lbnRpYWwgY3VydmUgaXMgbm9ybWFsbHkgdXNlZCB0byBkZXNjcmliZSB0aGUgZ3Jvd3RoIG9mIGEgcG9wdWxhdGlvbiBpbiB1bmxpbWl0aW5nIGVudmlyb25tZW50YWwgY29uZGl0aW9ucywgb3IgdG8gZGVzY3JpYmUgdGhlIGRlZ3JhZGF0aW9uIG9mIFt4ZW5vYmlvdGljc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWGVub2Jpb3RpYykgaW4gdGhlIGVudmlyb25tZW50IChbZmlyc3Qtb3JkZXIgZGVncmFkYXRpb24gb2Yga2luZXRpY10oaHR0cHM6Ly9kZW1vbnN0cmF0aW9ucy53b2xmcmFtLmNvbS9LaW5ldGljT3JkZXJPZkRlZ3JhZGF0aW9uUmVhY3Rpb25zLykpLiAgCgpUaGUgZXhwb25lbnRpYWwgZnVuY3Rpb24gaXMgbm9ubGluZWFyIGluICprKiBhbmQgbmVlZHMgdG8gYmUgZml0dGVkIGJ5IHVzaW5nICoqbmxzKCkqKiwgYW5kICoqZHJtKCkqKi4KCkxldCdzIHNlZSBhbiBleGFtcGxlIG9mIGZpdHRpbmcgdXNpbmcgdGhlIGRlZ3JhZGF0aW9uIGRhdGFzZXQgCmBgYHtyfQpsaWJyYXJ5KGFvbWlzYykKZGF0YShkZWdyYWRhdGlvbikKaGVhZChkZWdyYWRhdGlvbikKc3VtbWFyeShkZWdyYWRhdGlvbikKcGxvdChkZWdyYWRhdGlvbiRDb25jLCBkZWdyYWRhdGlvbiRUaW1leCkKYGBgCgoKYGBge3J9Cm1vZGVsIDwtIGRybShDb25jIH4gVGltZSwgZmN0ID0gRFJDLmV4cG9EZWNheSgpLCBkYXRhID0gZGVncmFkYXRpb24pCnN1bW1hcnkobW9kZWwpCmBgYAoKYGBge3J9CnBsb3QobW9kZWwsIGxvZyA9ICIiKQpgYGAKCgpUaGlzIGlzIHRoZSAqKmdyYXBoaWNzKiogcGxvdCBmdW5jdGlvbi4gVGhlICoqbG9nKiogYXJndW1lbnQgaXMgYSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGNvbnRhaW5zICJ4IiBpZiB0aGUgeCBheGlzIGlzIHRvIGJlIGxvZ2FyaXRobWljLCAieSIgaWYgdGhlIHkgYXhpcyBpcyB0byBiZSBsb2dhcml0aG1pYyBhbmQgInh5IiBvciAieXgiIGlmIGJvdGggYXhlcyBhcmUgdG8gYmUgbG9nYXJpdGhtaWMuCgojIyMgQXN5bXB0b3RpYyByZWdyZXNzaW9uIG1vZGVsIAoKVGhpcyBpcyBhIGZ1bmN0aW9uIG9mdGVuIHVzZWQgdG8gZGVzY3JpYmUgbGltaXRlZCBncm93dGggaW4gZWNvbG9naWNhbCBtb2RlbHMsIE1vbm9tb2xlY3VsYXIgZ3Jvd3RoLCBNaXRzY2hlcmxpY2ggbGF3LCBhbmQgVm9uIEJlcnRhbGFuZmZ5IGxhdy4gCgpUaGUgbW9zdCB3aWRlc3ByZWFkIHBhcmFtZXRlcmlzYXRpb24gaW4gZWNvbG9naWNhbCBtb2RlbHMgaXM6IAoKJCRZID0gYSAtIChhLWIpIFxjZG90IGV4cCgtY1gpJCQKCndoZXJlICoqYSoqIGlzIHRoZSAqKm1heGltdW0qKiBhdHRhaW5hYmxlIFksICoqYioqIGlzIFkgYXQgeCA9IDAsIGFuZCAqKmMqKiBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHJlbGF0aXZlIHJhdGUgb2YgWSBpbmNyZWFzZSB3aGlsZSBYIGluY3JlYXNlcy4gVGhlIGZpcnN0IGRlcml2YXRpdmUgJGRZL2R4JCBpczogCgpgYGB7cn0KRChleHByZXNzaW9uKGEgLSAoYSAtIGIpICogZXhwICgtIGMgKiBYKSksICJYIikKYGBgCgp0aGF0IGlzOgoKJCRZJyA9IGMgXGNkb3QgKGEtWSkkJAoKd2hhdCBpcyBpbnRlcmVzdGluZyBoZXJlIGlzIHRoYXQgd2Ugc2VlIHRoYXQgdGhlIHJhdGUgb2YgZ3Jvd3RoIGlzIGFjdHVhbGx5IG1heCB3aGVuIFkgaXMgMCBhbmQgaXQgZGVjcmVhc2VzIGFzIFkgaW5jcmVhc2UuCgpMZXQncyBleGFtaW5lIGFuIGV4YW1wbGUKCmBgYHtyfQpYIDwtIGMoMSwgMywgNSwgNywgOSwgMTEsIDEzLCAyMCkKWWUgPC0gYXN5bVJlZy5mdW4ocHJlZGljdG9yID0gWCwgaW5pdCA9IDAuMywgbSA9IDUsIHBsYXRlYXUgPSAyMCkKZXBzaWxvbiA8LSBybm9ybSg4LCAwLCAwLjAwNSkKWSA8LSBZZSArIGVwc2lsb24KbW9kZWwgPC0gZHJtKFkgfiBYLCBmY3QgPSBEUkMuYXN5bVJlZygpKQpwbG90KG1vZGVsLCkjIGxvZz0iIiwgbWFpbiA9ICJBc3ltcHRvdGljIHJlZ3Jlc3Npb24iKQpgYGAKCiMjIyBOZWdhdGl2ZSBleHBvbmVudGlhbCBlcXVhdGlvbgoKSWYgd2UgYWRhcHQgdGhlIGFzeW1wdG90aWMgZXF1YXRpb24gYW5kIGFkZCBhIGNvbnN0cmFpbnQgdGhhdCAkYj0wJCwgd2UgZ2V0IHRoZSBmb2xsb3dpbmcgZXF1YXRpb24sIHRoYXQgaXMgb2Z0ZW4ga25vd24gYXMgYSAqKm5lZ2F0aXZlIGV4cG9uZW50aWFsIGVxdWF0aW9uKiouIAoKJCRZID0gYVsxLWV4cCgtY1gpXSQkCgpzaW1pbGFyIHRvIGFzeW1wdG90aWMgYnV0IGZvciAkWCA9IDAkLCBZIGlzIGFsc28gMCwgbWVhbmluZyB0aGF0IHRoZSBjdXJ2ZSBwYXNzZXMgdGhyb3VnaCB0aGUgb3JpZ2luLiBJdCBpcyBvZnRlbiB1c2VkIHRvIG1vZGVsIHRoZSBbYWJzb3JiZWQgcGhvdG9zeW50aGV0aWNhbGx5IGFjdGl2ZSByYWRpYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZBUEFSKS4gCg==