1 Logistic Model for World Population (pdf document)

David Maslanka
Math 252 - Lecture Notes # 1 -
FITTING WORLD POPULATION DATA TO A LOGISTIC MODEL
We have seen that the differential equation desribing the logistic law for population growth:
dy
= a y − b y2
dt
where y ( t ) denotes the population size at time t, has a solution of the form:
y =
a
b+Ke
( −a t )
.
(*)
We will attempt to fit world census data to such a curve by choosing a, b and K appropriately.
Consider the following table of population estimates recorded at various times between the years 1800 and 2005.
Year
1800
1850
1900
1910
1920
1930
1940
1950
1960
1970
1980
1990
2000
2005
World
Population
969,000,000
1,265,000,000
1,656,000,000
1,750,000,000
1,860,000,000
2,070,000,000
2,300,000,000
2,550,000,000
3,000,000,000
3,700,000,000
4,500,000,000
5,300,000,000
6,100,000,000
6,450,000,000
First, we will copy the data points from the above chart to a Maple list called WorldPop.
> restart:with(plots):
> WorldPop:=[[1800,969000000],[1850,1265000000],[1900, 1656000000],[1910, 175000000
0],[1920, 1860000000],[1930, 2070000000],[1940, 2300000000],[1950,
2550000000],[1960, 3000000000],[1970, 3700000000],[1980, 4500000000],[1990, 53000
00000],[2000, 6100000000],[2005, 6450000000]];
Warning, the name changecoords has been redefined
WorldPop := [ [ 1800, 969000000 ], [ 1850, 1265000000 ], [ 1900, 1656000000 ], [ 1910, 1750000000 ],
[ 1920, 1860000000 ], [ 1930, 2070000000 ], [ 1940, 2300000000 ], [ 1950, 2550000000 ], [ 1960, 3000000000 ],
[ 1970, 3700000000 ], [ 1980, 4500000000 ], [ 1990, 5300000000 ], [ 2000, 6100000000 ], [ 2005, 6450000000 ] ]
Next, we will plot all fourteen data points in the coordinate plane:
> p1:=plot([WorldPop,WorldPop,WorldPop,WorldPop,WorldPop],style=point,symbol=[circl
e],symbolsize=[5,10,15,20,25],color=[red,black,black,black,black]):
> display(p1,labels=[`YEAR`,`POPULATION SIZE`], labelfont=[TIMES,ITALIC,10],
labeldirections=[HORIZONTAL,VERTICAL],axesfont=[TIMES,ITALIC,9],title=`HUMAN
POPULATION`,titlefont=[TIMES,ITALIC,11]);
>
1
We know that there is a number c at which
dy
b
.
2a
dt
So we will proceed to estimate the growth rate in each of the years: 1900 + 10n, for n =1, 2, . . . 9, by setting:
Growth Rate in year 1900+10n =
is maximized and that at this point y takes on the value:
y( 1900 + 10( n + 1 ) ) − y( 1900 + 10( n − 1 ) )
20
.
> GR9:=seq((WorldPop[k+1][2]-WorldPop[k-1][2])/20, k=4..12);
GR9 := 10200000, 16000000, 22000000, 24000000, 35000000, 57500000, 75000000, 80000000, 80000000
Note that the population in 1995 was 5,700,0000, so we will calculate the growth rate in the year 2000 by using only
a 10 year interval:
Growth Rate in year 2000 =
y( 2005 ) − y( 1995 )
10
.
> (6450000000-5700000000)/10;
75000000
> GR10:=[GR9,(6450000000-5700000000)/10];
GR10 :=
[ 10200000, 16000000, 22000000, 24000000, 35000000, 57500000, 75000000, 80000000, 80000000, 75000000 ]
Now we form a list of ordered pairs which links these computed growth rates to the corresponding years between
1910 and 2000:
> GR:=[seq( [WorldPop[k][1], GR10[k-3]],k=4..13 )];
GR := [ [ 1910, 10200000 ], [ 1920, 16000000 ], [ 1930, 22000000 ], [ 1940, 24000000 ], [ 1950, 35000000 ],
[ 1960, 57500000 ], [ 1970, 75000000 ], [ 1980, 80000000 ], [ 1990, 80000000 ], [ 2000, 75000000 ] ]
The calculated growth rate values are displayed in a table and on a plot in the plane below.
2
Year
1910
1920
1930
1940
1950
1960
1970
1980
1990
2000
Growth Rate
10,200,000
16,000,000
22,000,000
24,000,000
35,000,000
57,500,000
75,000,000
80,000,000
80,000,000
75,000,000
> p2:=plot([GR,GR,GR,GR,GR],style=point,symbol=[circle],symbolsize=[5,10,15,20,25],
color=[red,black,black,black,black]):
> display(p2,labels=[`YEAR`,`GROWTH RATE`], labelfont=[TIMES,ITALIC,10],
labeldirections=[HORIZONTAL,VERTICAL],axesfont=[TIMES,ITALIC,9],title=`ESTIMATED
POPULATION GROWTH RATES`,titlefont=[TIMES,ITALIC,11]);
>
From the above analysis, we may estimate the Maximum Growth Rate, M, to be 80,000,000 and we may expect
y to achieve this value in the year 1985. We know from our study of logistic curves that:
2
(1) Maimum Growth Rate, M =
a
4b
and
(2) y(1985) =
a
2b
, i.e., y( 1985 ) is equal to one half of the carrying capacity of the population.
If we estimate y ( 1985 ) to be the average of the values: y( 1980 ) and y( 1990 ):
3
y( 1985 ) =
y( 1990 ) + y( 1980 )
a
= 4,900,000,000, then 4,900,000,000 =
.
2b
2
So we have the pair of equations:
> eq1:=80000000=a^2/(4*b);
a2
eq1 := 80000000 =
4b
> eq2:=(WorldPop[11][2] + WorldPop[12][2])/2=a/(2*b);
eq2 := 4900000000 =
a
2b
Solving this pair for a and b we find:
> solve({eq1,eq2},{a,b});
{b =
1
8
,a=
}
300125000000
245
> a:=8/245;b:=1/300125000000;
a :=
b :=
8
245
1
300125000000
> evalf(a);
0.03265306122
It should be noted that some ecologists have estimated the natural value of a to be 0.029, so our calculated value of
8
245
= 0.03265306122 for this constant is in close agreement with the experts. Further, in the case of logistic growth, it is
always true that:
a
lim y( t ) = . So our projected limiting human population size for Earth is 9.8 billion.
b
t→∞
> a/b;
9800000000
Let us set t = 1985 and y( t ) = 4,900,000,000 in (*) to solve for K:
> solve(4900000000=a/(b+K*exp(-a*1985)),K);
1
1
300125000000
e
 -3176 


 49 
> K:=1/300125000000*1/exp(-3176/49);
K :=
1
1
300125000000
e
 -3176 


 49 
Thus, our population growth function, y , is now completely determined to be:.
> y:=t->a/(b+K*exp(-a*(t)));
y := t →
a
b+Ke
( −a t )
> `y(t)`=simplify(y(t));
4
y(t) =
9800000000
1+e
 3176 8 t 


−
 49
245 
A plot the population function, y, together with the actual known data points are displayed simultaneously in the graph
below:
> p3:=plot(y(t),t=1800..2050,0..9000000000,color=navy,thickness=2):
> display([p1,p3],labels=[`YEAR`,`POPULATION SIZE`], labelfont=[TIMES,ITALIC,10],
labeldirections=[HORIZONTAL,VERTICAL],axesfont=[TIMES,ITALIC,9],title=`LOGISTIC
MODEL FOR HUMAN POPULATION`,titlefont=[TIMES,ITALIC,11]);
>
It appears from the plot that our logistic model is a pretty good estimator of the true population size at all times between the
years 1950 and the present. However, it is not very accurate whenever the population size is small, i.e. under about 2 billion.
Finally, we will calculate the actual and percentage errors relative to our logistic population model.
> yEstimates:=seq(round(evalf(y(1900+10*k))), k=0..10);
yEstimates := 574887551, 779229378, 1047952905, 1395016728, 1832949770, 2369602495, 3004131115, 3723428120,
4500886145, 5299113851, 6076571878
> yEst:=[round(evalf(y(1800))),round(evalf(y(1850))),yEstimates,round(evalf(y(2005)
))];
yEst := [ 23264871, 117903964, 574887551, 779229378, 1047952905, 1395016728, 1832949770, 2369602495,
3004131115, 3723428120, 4500886145, 5299113851, 6076571878, 6445459725 ]
> yError:=[seq( [WorldPop[k][1], (yEst[k]-WorldPop[k][2]) ],k=1..14) ];
yError := [ [ 1800, -945735129 ], [ 1850, -1147096036 ], [ 1900, -1081112449 ], [ 1910, -970770622 ],
[ 1920, -812047095 ], [ 1930, -674983272 ], [ 1940, -467050230 ], [ 1950, -180397505 ], [ 1960, 4131115 ],
[ 1970, 23428120 ], [ 1980, 886145 ], [ 1990, -886149 ], [ 2000, -23428122 ], [ 2005, -4540275 ] ]
> yPercentError:=[seq( [WorldPop[k][1],
5
abs(100*evalf((yEst[k]-WorldPop[k][2])/WorldPop[k][2])) ],k=1..14) ];
yPercentError := [ [ 1800, 97.59908452 ], [ 1850, 90.67952854 ], [ 1900, 65.28456818 ], [ 1910, 55.47260697 ],
[ 1920, 43.65844597 ], [ 1930, 32.60788754 ], [ 1940, 20.30653174 ], [ 1950, 7.074411961 ], [ 1960, 0.1377038333 ],
[ 1970, 0.6331924324 ], [ 1980, 0.01969211111 ], [ 1990, 0.01671979245 ], [ 2000, 0.3840675738 ],
[ 2005, 0.07039186047 ] ]
>
All of these above calculations are displayed in a final summary table.
Year
1800
1850
1900
1910
1920
1930
1940
1950
1960
1970
1980
1990
2000
2005
World
Population
969,000,000
1,265,000,000
1,656,000,000
1,750,000,000
1,860,000,000
2,070,000,000
2,300,000,000
2,550,000,000
3,000,000,000
3,700,000,000
4,500,000,000
5,300,000,000
6,100,000,000
6,450,000,000
Estimated
Population
23,264,871
117,903,964
574,887,551
779,229,378
1,047,952,905
1,395,016,728
1,832,949,770
2,369,602,495
3,004,131,115
3,723,428,120
4,500,886,145
5,299,113,851
6,076,571,878
6,445,459,725
Estimation
Error
%age
Error
-945,735,129
-1,147,096,036
-1,081,112,449
-970,770,622
-812,047,095
-674,983,272
-467,050,230
-180,397,505
4,131,115
23,428,120
886,145
-886,149
-23,428,122
-4,540,275
97.60
90.68
65.28
55.47
43.66
32.61
20.31
7.07
0.14
0.63
0.02
0.02
0.38
0.07
6