logo

Gompertz Growth Model: Time-dependent Growth Deceleration 📂Dynamics

Gompertz Growth Model: Time-dependent Growth Deceleration

Model 1

gompertz.png

dNdt=reαtN,α0 {{ d N } \over { dt }} = r e^{ - \alpha t} N \qquad, \alpha 0

Variables

  • N(t)N(t): Represents the population size at time tt.

Parameters

  • rRr \in \mathbb{R}: Intrinsic Rate of Increase, it grows when greater than 00 and declines when less than 00. It can also be defined as the difference r:=bdr:=b-d between Birth Rate bb and Death Rate dd.
  • α>0\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 dNdt=rN\displaystyle {{ d N } \over { dt }} = r N, the difference is the term eαte^{- \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")

  1. Allen. (2006). An Introduction to Mathematical Biology: p245. ↩︎