Transformation between discrete and continuous growth models

Overview

There are two types of exponential growth models depending on whether time is measured in discrete time interval or continuous time unit.

Figure source: Understanding Discrete vs. Continuous Growth, https://betterexplained.com/articles/understanding-discrete-vs-continuous-growth/

Upon proper transformation, these two could be converted into each other.

Discrete growth

\(x(t+1)-x(t)=rx(t) <=> x(t)=(1+r)^t*x(0)\)

Continuous growth

\(dx/dt=kx <=> x(t) = Ce^{kt}\)

Another way of derivation

As in discrete growth model, r is the growth rate in a time interval, for example, growth rate per year.

With r set at per year, r/12 is per month, r/12/4 is per week, r/365 is per day.

In this line, if we divide time into infinite small intervals via r/n where n is pretty big, we approximates the instanenous rate in the continuous growth model.

After dividing time, how does the population growth equation change? With the same spirit as (1+r)^t*x(0), the time interval becomes smaller and the number of time intervals become big. Divide time interval by n, the previous one time interval now becomes n pieces. \((1+r/n)^n\)

When {x->Inf}, we have \(\lim_{x->Inf} (1+r/n)^n = e^r\)

Thus, \(x(t) = x(0)*(1+r)^t = x(0)*((1+r/n)^n)^t = x(0) * ((1+r/n)^{nt}) = x(0)*e^{rt}\)

Therefore, \(dx(t)/dt = r*e^{rt} = r*x(t)\), the continuous growth rate is r.

Application in survival analysis: Finite and instantaneous rates

Finite mortality rates

Suppose we have a cohort of 100 animals, 10% of which die every month, which means the finite mortality rate = 0.1.

Over the full year, the yearly cumulative mortality is 1-(1-0.1)^{12}= 0.7175705.

Instantaneous rates

With the above finite mortality rate, we could divide the time interval, in this case, 1 month, into many short time periods. Mathematically, using calculus, we have:

\(Instantaneous\ mortality\ rate = ln (1.0 - finite\ mortality\ rate)\)

Thus, in this example, Instantaneous mortality rate = ln (1.0 - 0.1) = ln 0.9 = -0.105 per month

As this is a true rate, and not a proportion, it can vary from -∞ to 0.

We can just multiply this value by 12 to give the yearly instantaneous mortality rate. Hence the yearly instantaneous mortality rate = 12 x -0.105 = -1.26 per year.

This can be converted to a finite rate using:

Finite mortality rate = 1.0 - e^{instantaneous mortality rate}$ = 1-exp(-0.105*12) = 0.716.

Mean life expectancy

Suppose we have survival rate per day 0.66, change it into finite mortality rate per day 1-0.66=0.34, then into instantaneous mortality rate ln(1-0.34), the mean life expectancy thus equals -1/instantaneous mortality rate = -1/ln(1-0.34) = 2.40 days.

Figure source: Life-History Evolution and the Genetics of Fitness Components in Drosophila melanogaster, https://doi.org/10.1534%2Fgenetics.119.300160

References

sessionInfo()
## R version 4.1.3 (2022-03-10)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur/Monterey 10.16
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] bookdown_0.25   digest_0.6.29   R6_2.5.1        jsonlite_1.8.0 
##  [5] magrittr_2.0.2  evaluate_0.15   blogdown_1.17.2 stringi_1.7.8  
##  [9] rlang_1.0.6     cli_3.5.0       rstudioapi_0.13 jquerylib_0.1.4
## [13] bslib_0.3.1     rmarkdown_2.13  tools_4.1.3     stringr_1.4.0  
## [17] xfun_0.39       yaml_2.3.4      fastmap_1.1.0   compiler_4.1.3 
## [21] htmltools_0.5.2 knitr_1.37      sass_0.4.0