人口問題 ズレを修正する

人口問題の続き。
ズレが出てきたので、数学モデルの作り方の過程に戻って修正する。
 
マルサス法でイケイケドンドンかとおもいきや、やはりずれてくるようだ。

x <- 0:14 # 年度
y <- c(3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6, 50.2, 62.9, 76, 92, 106.5, 123.2)*10^6 # 実際の人口
z <- c(NA, NA, NA, 10, 13.7, 18.7, 25.6, 35, 47.8, 65.5, 89.6, 122.5, 167.6, 229.3, 313.7)*10^6 # モデル予測値
cbind(1790+x*10,y/10^6,z/10^6)
      [,1]  [,2]  [,3]
 [1,] 1790   3.9    NA
 [2,] 1800   5.3    NA
 [3,] 1810   7.2    NA
 [4,] 1820   9.6  10.0
 [5,] 1830  12.9  13.7
 [6,] 1840  17.1  18.7
 [7,] 1850  23.2  25.6
 [8,] 1860  31.4  35.0
 [9,] 1870  38.6  47.8
[10,] 1880  50.2  65.5
[11,] 1890  62.9  89.6
[12,] 1900  76.0 122.5
[13,] 1910  92.0 167.6
[14,] 1920 106.5 229.3
[15,] 1930 123.2 313.7

何がこれを引き起こしたかを考えてみる。
本では、とりあえずイケイケドンドンで増え続ける、というのは無茶があっただろう、と考えている。
そこで、何か頭打ちになる要素を取り入れた(ヴェアフルスト)。
 
人口が上限N_{\infty}を超えないものとし、人口の増え方は

  • N(t):現在の人口
  • 1\hspace{3}-\hspace{3} \frac{N}{N_{\infty}}:未利用の人口資源に対する比

に比例するとすると、微分方程式
\frac{\delta N}{\delta t}=\gamma N(1\hspace{3}-\hspace{3} \frac{N}{N_{\infty}})
これを頑張って解くと
N(t)=\frac{N_{\infty}}{1+ (\frac{N_{\infty}}{N_0}-1) exp{-\gamma t}}
差分でRを使ってプロットしてみる。

# 20年間のシミュレーションを想定。
time <- seq(from=0, to=30, length=20)
# 数値は本から。
gamma <- 0.3134
N_0 <- 3.9*10^6
Ninf <- 197*10^6
# 地味に計算する場合
N <- matrix(0, nr=length(gamma), nc=length(time))
N[, 1] <- N_0
for(j in 1:length(gamma)){
for(i in 2:length(time)){
	N[j, i] <- N[j, i-1] + gamma[j] * N[j, i-1]
}
}

Nv <- matrix(0, nr=length(gamma), nc=length(time))
Nv[, 1] <- N_0
for(j in 1:length(gamma)){
for(i in 2:length(time)){
	Nv[j, i] <- Nv[j, i-1] + gamma[j] * Nv[j, i-1]*(1-Nv[j, i-1]/Ninf)
}
}

ylim <- range(N, Nv)
matplot(t(N), type="l", lty=1, ylim=ylim)
par(new=TRUE)
matplot(t(Nv), type="l", lty=1, ylim=ylim, col=2)
abline(h=Ninf, lty=2)
legend(1, max(N, Nv), c("unlimited model", "limited model"), col=1:2, lwd=3)


これは長年受け入れられてきた手法らしい。
ただ、アメリカを例に取ったが、上限1.97億の人口は既に超えている。
人口の増減に大影響を与えるような、例えば、大災害や戦争や大移民とか、そういうのは想定していない、というのがある。