Gompertz Growth Model: Time-dependent Growth Deceleration
Model 1
$$ {{ d N } \over { dt }} = r e^{ - \alpha t} N \qquad, \alpha 0 $$
Variables
- $N(t)$: Represents the population size at time $t$.
Parameters
- $r \in \mathbb{R}$: Intrinsic Rate of Increase, it grows when greater than $0$ and declines when less than $0$. It can also be defined as the difference $r:=b-d$ between Birth Rate $b$ and Death Rate $d$.
- $\alpha>0$: A constant representing a kind of damping rate, the higher it is, the faster the growth declines.
Explanation
Compared to the Malthusian Growth Model $\displaystyle {{ d N } \over { dt }} = r N$, the difference is the term $e^{- \alpha t}$ that represents growth inhibition over time, which makes it a non-autonomous system that is unusual in population dynamics models.
There is no issue using the Gompertz growth model wherever it fits reasonably and is actually fitting but it’s mainly used in the business sector for demand forecasting or in biology to fit the growth of a tumor (Tumor).
- (1) In demand forecasting, ‘population’ refers to the number of consumers wanting a good or service. When something new comes to the market and it appeals to consumers, it will sell with explosive growth, but this can’t last forever and the growth will eventually slow down. This is a fundamentally different idea from the Logistic Growth Model, where growth stops because ’there’s no more room to accommodate’ or ‘due to intense competition between the same species’.
- (2) For tumor growth, as the size of the tumor increases, the ratio of volume to surface area decreases, thus slowing down the growth itself. Although the number of cells making up the tumor increases, the model can simply represent that the actual cells capable of enlarging the tumor size are progressively diminishing.
Code
The following is the Julia code for creating the gif in the article.
cd(@__DIR__) # 파일 저장 경로
@time using Plots
@time using DifferentialEquations
#---
end_time = 30.
function logistic_growth!(du,u,p,t)
N = u[1]
r, K = p
du[1] = dN = r/K*N*(K-N)
end
u0 = [1.0]
p = [0.5, 100.]
tspan = (0.,end_time)
prob = ODEProblem(logistic_growth!,u0,tspan,p)
sol1 = solve(prob; saveat=(0.0:0.1:end_time))
function gompertz_growth!(du,u,p,t)
N = u[1]
r, α = p
du[1] = dN = r*exp(-α*t)*N
end
u0 = [1.0]
p = [1., 0.217]
tspan = (0.,end_time)
prob = ODEProblem(gompertz_growth!,u0,tspan,p)
sol2 = solve(prob; saveat=(0.0:0.1:end_time))
compare = plot(sol1,vars=(0,1),
linestyle = :dash, color = :black,
size = (400,300), label = "logistic", legend=:bottomright)
plot!(compare, sol2,vars=(0,1),
linestyle = :solid, color = :red,
size = (400,300), label = "gompertz", legend=:bottomright)
png(compare, "gompertz.png")
Allen. (2006). An Introduction to Mathematical Biology: p245. ↩︎