人口予測の可視化 - Minato Nakazawa / 中澤 港

人口予測の可視化
中澤 港
神戸大学大学院保健学研究科
国際保健学領域
<[email protected]>
人口予測とは
• 集団の人口及びその構成が将来どうなるかを予測する
• もっとも単純な方法はトレンドの延長
• ロジスティック曲線などを当てはめて補外。短期的にしか有効でない。
• 古い世界人口予測など
• 標準的な方法はコーホート要因法
• 人口の増減は+出生-死亡+移入-移出で決まるので,これらの要素を
それぞれ予測して合計すればいい
• 予測はトレンド延長の他,モデルの当てはめやシナリオベースで実施
• それぞれ年齢により変化するので,人口増減も年齢別に計算
→総人口だけでなく人口構造(年齢構造)も予測
• 世界人口でも地域分割すれば適用できる
• 予測した結果が一目でわかるようなグラフも大事
• 総人口のトレンド延長なら折れ線グラフ(確率的予測ならばらつきも)
• 人口構造は人口ピラミッドで示すのがわかりやすいが変化は経時的に上書
き表示するか,構造係数を計算して折れ線グラフ表示
現在の世界人口予測
• U.S. Census Bureauのもの(右
図)は国ごとにコーホート要因法
で予測した値を合計。増加率は
合計値から
{P(t+1)-P(t)}/P(t)*100で計算
• 合計値さえあれば増加率を計算
し推移パタンを折れ線グラフに
するのは簡単
→http://minato.sip21c.org/RW
S2012/increase.R
• 国連推計は2300年まである。出
生予測が大きく変わったので,
1998年推計(2150年まで)と
2002年,2010年推計は大きく異
なる。
http://www.census.gov/population/international/dat
a/worldpop/graph_population.php
コーホート要因法の概念図
• 出典:河野稠果『人口学への招待』中公新書,2007年
2005年女子人口
2010年女子人口
0~4歳
0~4歳
5~9歳
5~9歳
出生
20~24歳
20~24歳
25~29歳
25~29歳
30~34歳
生存
30~34歳
95~99歳
95~99歳
100歳以上
100歳以上
*実際は男女別に
*男女出生は半々か出生
性比を考慮して1.05:1等
*移動も考慮
*左図では20~34歳のみ
示しているが,15~49歳
女性について,年齢階級
別出生率を掛け,合計
してから0~4歳の生命表
生残率を掛け,2010年の
0~4歳人口を得る。使う
生命表は2005年と2010年
の平均。2010年生命表の
推計は,通常,リー=カーター
モデル(リレーショナル
モデル)による
年齢別出生率の予測
• 突発的なイベントで大きく変化する
• 1998年国連予測では21世紀に100億を超えるとされていた世
界人口が,2002年や2010年の予測では2050年を過ぎたとこ
ろで90億少々で頭打ちになると変わったのは,出生予測の変
化が原因
• 国連は,先進国についてはTFRの年次変化パタンをみる
→変化速度に応じ,どのコースでTFR=1.85となるかを選択
→途中のTFRの水準に従い,異なる年齢分布パタンを選択
途上国については期間出生率法(年齢階級別トレンド外挿)
• 日本では1930年~1975年は期間出生率法だったが,晩婚・
晩産が進み20歳代前半の未婚率が増加すると後半の産み戻
しが起こってトレンド予測ではまずくなったので,1976年から
コーホート出生率法(複雑)が採用された
Hadwigerモデルを年齢別出生に当てはめ
パラメータのトレンドを3次曲線で延長(1)
• library(fmsb); layout(matrix(c(1,2,3,3,3,3), nrow=2, ncol=3))
• matplot(Jfert[,1], Jfert[,2:14], type="b", col=1:13, pch=1:13, lty=1, main="日本
•
•
•
•
•
•
•
•
•
•
人女性の年齢別出生率の推移", xlab="女性の年齢", ylab="ASFR")
legend("right",col=1:13,pch=1:13,lty=rep(1,13),legend=colnames(Jfert[,2:14]))
Years <- 1950+0:12*5
abc <- matrix(numeric(3*length(Years)), ncol=3); colnames(abc) <- letters[1:3]
for (Y in Years) { ASFR <- Jfert[, paste("ASFR",Y,sep="")]
res <- fitHad(, ASFR)
FLAG <- res[5]
while (FLAG>0) { res <- fitHad(res[1:3], ASFR); FLAG <- res[5] }
abc[(Y-1950)/5+1,] <- res[1:3] }
matplot(Years, abc, type="b", col=1:3, pch=1:3, lty=1, xlim=c(1950, 2050),
ylim=c(0, 35), main="日本人女性の年齢別出生率パタンにHadwigerモデルを当
てはめたパラメータの推移", xlab="年次(西暦)", ylab="パラメータ(abc)")
legend("right", col=1:3, pch=1:3, lty=1, legend=letters[1:3])
Hadwigerモデルを年齢別出生に当てはめ
パラメータのトレンドを3次曲線で延長(2)
• Pyears <- 2015+0:7*5 # 2015年から2050年まで予測
• sYears <- Years[6:13] # 1975年以降のデータを使用
• pa <- abc[6:13, 1]; rega <- lm(pa ~ I(sYears^3) + I(sYears^2) + sYears) # 3次式で近似
• pax <- predict(rega, list(sYears=Pyears)) # パラメータaの将来予測
• pb <- abc[6:13, 2]; regb <- lm(pb ~ I(sYears^3) + I(sYears^2) + sYears)
• pbx <- predict(regb, list(sYears=Pyears)) # パラメータbの将来予測
bが負になった
2040年以降は
pcx <- predict(regc, list(sYears=Pyears)) # パラメータcの将来予測
不適切
• pc <- abc[6:13, 3]; regc <- lm(pc ~ I(sYears^3) + I(sYears^2) + sYears)
•
• pabc <- cbind(pax, pbx, pcx) # 予測されたパラメータを行列に
• matlines(Pyears, pabc, col=1:3, lty=2) # 予測値を破線で追加
• pJfert <- matrix(numeric(8*length(Jfert[, "ASFR2000"])), ncol=8)
• for (i in 1:length(Pyears)) { pJfert[, i] <- Hadwiger(pabc[i, 1], pabc[i, 2], pabc[i, 3]) }
• matplot(Jfert[,1], pJfert, type="b", col=1:8, pch=1:8, lty=1, main="日本人女性の年齢別出
生率の推移予測", xlab="女性の年齢", ylab="ASFR")
• legend("topright",col=1:8,pch=1:8,lty=rep(1,8),legend=Pyears)
人口ピラミッドの描画
• pyramidパッケージの開発
• コンセプトは,pyramid(左側年齢別人口ベクトル,右側年齢別人口ベクトル,
中央に表示する文字列のベクトル)とすると自動的に人口ピラミッドができあ
がること
• layout()での画面分割,グラフィックデバイスへの出力やコピーがすべて普通
に使えるようにしたかったので,gridグラフィックスは避け,2画面分割して
barplot()をアレンジして使うことも避けた
• 日本の年齢別人口データをfmsbパッケージ(元々は『Rによる保
健医療データ解析演習』のサポートパッケージだったが,人口デー
タや人口分析関数を追加したもの)に組み込み
• Jpop:男女年齢別人口データフレーム(85歳以上は合計人数)。例えば2010
年男性の年齢別人口ベクトルを得るには,Jpop[, “M2010”]として参照する
• Jpopl:男女年齢別人口データフレーム(110歳以上は合計人数)。例えば
1888年女性の年齢別人口ベクトルを得るには,Jpopl[, “F1888”]として参照
する
pyramid( )関数の仕様
• pyramid(data, Laxis=NULL, Raxis=NULL, AxisFM="g",
AxisBM="", AxisBI=3, Cgap=0.3, Cstep=1, Csize=1,
Llab="Males", Rlab="Females", Clab="Ages", GL=TRUE,
Cadj=-0.03, Lcol="Cyan", Rcol="Pink", Ldens=-1,
Rdens=-1, main="", ...)
• dataは少なくとも2列を含むデータフレーム。1列目が左に表
示する数値ベクトル,2列目は右に表示する数値ベクトル,3
列目があれば中央に表示する文字列ベクトル(数値でも可)。
通常は左が男性人口,右が女性人口,中央が年齢階級名
• LcolとRcolをベクトルにすると年齢による塗り分けが可能
4種類の人口ピラミッド描画
• library(fmsb); library(pyramid); par(mar=c(1, 2, 2, 1), mfrow=c(2, 2))
• pyramid(data.frame(M=Jpop$M2010/1000, F=Jpop$F2010/1000, A=Jpop$Age),
Laxis=0:3*1000, AxisFM="d", Cstep=10, Llab="Males\n(x1000)",
Rlab="Females\n(x1000)", Clab="", main="Population structure in Japan in\n 2010,
pooled for age 85+")
• pyramid(data.frame(M=Jpopl$M1888/10000, F=Jpopl$F1888/10000, A=Jpopl$Age),
Laxis=0:5*25, AxisFM="d", Cstep=10, Llab="Males\n(x10000)",
Rlab="Females\n(x10000)", Clab="", main="Population structure in Japan in 1888")
• pyramid(data.frame(M=Jpopl$M2010/10000, F=Jpopl$F2010/10000, A=Jpopl$Age),
Laxis=0:5*25, AxisFM="d", Cstep=10, Llab="Males\n(x10000)",
Rlab="Females\n(x10000)", Clab="", main="Population structure in Japan in 2010")
• pyramid(data.frame(M=Jpopl$M2010J/10000, F=Jpopl$F2010J/10000, A=Jpopl$Age),
Laxis=0:5*25, AxisFM="d", Cstep=10, Llab="Males\n(x10000)",
Rlab="Females\n(x10000)", Clab="", Lcol="green", main="Population structure of
Japanese\n in Japan in 2010")
人口学教育教材としての利用
• 安定人口理論(どのような人口構造から出発しても,年齢別
死亡率と年齢別出生率が一定であれば,長時間経てば一定
の人口構造に収束する)を示す
SPT.R
• 高齢化は少子化の帰結であって平均寿命(年齢別死亡率だ
けで決まる)とは無関係なことを示す
menuprojection.R