In plant pathology we are often interested in studying disease progress over time, where time (t) is modeled as a continuous variable rather than as a discrete variable. Many different population growth models have been used for modeling disease progress curves (Gilligan 1990; Madden et al. 2007). Five common growth curve models are discussed below along with their assumptions. For the illustration of some of these models in R, we refer to Table 1 from Gottwald et al. (1989) which compared different models for disease progress, based on nonlinear regression analysis. In this table, the initial disease incidence for orange and grapefruit is y0 = 1/(13*45) = 0.0017 and for swingle is y0 = 1/(15*67) = 0.001.
Growth Curve Models
Model |
Differential Equation Form |
Integrated Form |
Linearized Form |
Exponential |
logy= logy0 + rt |
y = y0exp(rt) |
logy = logy0 + rt |
Monomolecular |
ln{1/(1-y)} = ln{1/(1- y0)} + rt |
y = 1-(1-y0)exp(-rt) |
ln{1/(1-y)} = ln{1/(1- y0)} + rt |
Logistic |
y = 1/[1 + {-lny0/(1- y0) + rt}] |
y = 1/[1 + exp{-lny0/(1- y0) + rt}] |
ln(y/(1-y) = ln{y0/(1- y0) + rt} |
Gompertz |
dy/dt = ry ln(1/y) = ry(-lny) |
y = exp(lny0exp(-rt)) |
-ln(-lny) = -ln(-lny0) + rt |
Weibull |
dy/dt = c/b{(t-a)/b}(c-1)exp[-{(t-a)/b}c] |
y = 1-exp[-{(t-a)/b}^c] |
ln[ln{1/(1-y)}] = -clnb + ln(t-a) |
Exponential Model
The exponential model assumes that the absolute rate of disease increase (dy/dt) is proportional to the disease intensity (y). The following R code creates a function, plotexp
, that plots an exponential relationship between disease incidence and time. After you create the plotexp
function, you can apply it using different values of the parameters to better understand how the parameters affect the shape of the curve. In the illustration, the parameter y0 is set to 0.0017, the parameter r is set to 0.01579, and the maximum time for the illustration is set to 100. Try changing those values when applying the plotexp
function.
## Exponential Model Example
plotexp <- function(y0,r,maxt){
curve(
y0*exp(r*x),
from=0,
to=maxt,
xlab='Time',
ylab='Disease Incidence',
col='mediumblue')
}
plotexp(0.0017, 0.01579, 100)
Output
Click on the image for larger version.
Monomolecular model
The monomolecular model assumes a carrying capacity of one, that is, the maximum level of disease is one, so disease severity or incidence is measured as a proportion. Diseased plant tissue may only lie between zero (healthy) and one (complete disease). It also assumes the absolute rate of change is proportional to the healthy tissue i.e., (1-y). After creating the plotmono
function and trying the example set of parameter values, try replacing the parameter values with others to see how the shape of the relationship changes.
## Monomolecular Model Example
plotmono <- function(y0,r,maxt){
curve(
1-(1-y0)*exp(-r*x),
from=0,
to=maxt,
xlab='Time',
ylab='Disease Incidence',
col='mediumblue')
}
plotmono(0.0017, 0.00242, 2000)
Output
Click on the image for larger version.
Logistic model
The logistic model assumes that the absolute rate of change in disease level depends on both healthy tissue (y) and diseased tissue (1-y) present at the time. The curve is perfectly symmetric with an inflection point at t = 1/rln y0/(1- y0) when y = 1/2. That is, dy/dt increases up until y = 1/2 and decreases thereafter. After creating the plotlog
function, try applying it with different parameter values.
## Logistic Model Example
plotlog <- function(y0,r,maxt){
curve(
1/(1+(1-y0)/y0*exp(-r*x)),
from=0,
to=maxt,
xlab='Time',
ylab='Disease Incidence',
col='mediumblue'
)
}
plotlog(0.001, 0.01636, 1000)
Output
Click on the image for larger version.
Gompertz Model
The Gompertz model assumes that the absolute rate of change depends on y and ln(1/y) and is very similar to the logistic model. However, the Gompertz model is more asymmetric, with an inflection point attained at 0.37(1/e) instead. After creating the plotgomp
function and comparing it to the other models before, try changing the parameter values to see the effect on the shape of the curve.
## Gompertz Model Example
plotgomp <- function(y0,r,maxt){
curve(
exp(log(y0)*exp(-r*x)),
from=0, to=maxt, xlab='Time',
ylab='Disease Incidence',
col='mediumblue'
)
}
plotgomp(0.0017,0.02922, 250)
Output
Click on the image for larger version.
Weibull Model
The Weibull model includes a larger number of parameters, and so can describe more complicated curves. The parameters are:
- a - units of time, indicating the time of disease onset,
- b - the scale parameter,inversely related to the rate of disease increase,
- c - the unitless shape parameter that controls the skewness of the curve.
If c = 1, this model is identical to the monomolecular model with the rate parameter r = 1/b and the initial disease level y0 = 1-exp(a/b). With suitable values of parameters 1, 2, and 3, other models can be approximated by the Weibull model.
## Weibull Model Example
plotweib <- function(a,b,c,maxt){
curve(
1-exp(-((x-a)/b)^c),
from=0,
to=maxt,
xlab='Time',
ylab='Disease Incidence',
col='mediumblue'
)
}
plotweib(1, 331.10, 10.04, 500)
Output
Click on the image for larger version.
Note that for some parameter combinations, these different models may produce very similar curves. For this reason, when the fit of these curves is being compared for a real data set, more than one of the models may give a good fit. In that case, it may be best to go with the simplest model. On the other hand, if many different data sets are being compared, a more complicated model such as the Weibull may make it easier to obtain reasonable fits to all the data sets being considered. For an in-depth comparison of the different uses of growth models in plant pathology we refer the reader to Gilligan (1990) and Madden et al. (2007).
Next, modeling citrus canker using growth curves