第 7 章 人口移動と人口分布 131
8.2 コウホート要因法
コウホート要因法とは,Cannan(1895)が開発した人口予測の方法で,主要な人口学研 究施設が出している予測はほぼすべてこの原理に基づいている。コウホート要因法では,
出生や死亡の将来予測が必要となる。出生でも死亡でも,2時点でのデータからトレンド を計算するLee-Carter法で行われるのが普通である。Rでは demographyパッケージの lca()関数でLee-Carter法が実施可能。
• まず,最新の調査データとして,性・年齢階級(現在では5歳階級が多いが,Cannan は10歳階級)別人口を得る。以下,通常は女性人口についてのみ考える。
• 次に,最近5年間の年齢階級別の死亡率を求めて,年齢階級別生残率を得る。
• それが次の5年間にも維持されるとか10%改善されるとか仮定すれば,5歳未満 人口を除く,5年後の年齢階級別人口が推定できる。
• 5年後の5歳未満人口は,再生産年齢(通常は15歳から49歳)の女性について,
年齢階級別人口と年齢階級別有効出生率(生残する子どもについての出生率)を掛
8.2 コウホート要因法 135 ければ得られる(年齢階級別有効出生率は,一番単純には,5年前に各年齢階級別 女性人口から生まれた現在の5歳未満女児人口を5年前の各年齢階級別女性人口で 割れば推定できるが(生残率と同様,それが維持されると考えたり,一定割合で変 化すると仮定したりする),他の方法もある。)。
• 以上で5年後の年齢階級別女性人口が得られたので,後はそれを繰り返せばもっと 先が推定できる。
• 男性人口については,女性人口を2倍する方法の他,5歳以上人口は女性人口と同 様に年齢階級別生残率から求めて,5歳未満人口に関しては女性人口を1.05倍す るという方法などがある。
• これに移住の影響を組み合わせて将来予測をする。
最大の問題は,妥当性のある出生率予測だと言われている。死亡率に比べ,出生率に影 響する要因は不明な点が多く,社会文化的な複雑な要因の影響を受けると考えられるし,
法制などによって急に変わることがあるためである。最近では避妊実行割合の予測と組み 合わせたり,出生率や生残率の予測に確率的な変動を組み込んだりすることも行われて いる。
コウホート要因法は,過去は現在を通じてのみ未来に影響するという意味でマルコフ的 である。よく使われているように予測の関数を線型にしてしまうと,数学的解析は容易だ が,生態学的な制約が考慮されなくなってしまう。しかし,非線型の予測は難しく,今後 の研究の進展が待たれる分野である。
移動を含まないコウホート要因法で日本の人口推計をするコードの例を以下に示す。
fmsbパッケージに入っている日本の人口データの,JfertとJlifeから出生と死亡に使う年 齢パタンを選び,それが今後100年間変化しないとして,Jpoplの2010年人口から今後 100年の人口推計をして1秒ごとに人口ピラミッドを書き換えていく。人口ピラミッドの 描画のため,pyramidパッケージもインストールしておく必要がある。
136 8
library(fmsb) library(pyramid)
wx <- length(Jpopl[, "Age"])
mp <- fp <- matrix(rep(0, wx*100), wx, 100)
mp[, 1] <- Jpopl[, "M2010"] # set 2010 males as initial males fp[, 1] <- Jpopl[, "F2010"] # set 2010 females as initial females
# select lifetable for males mqxn <- select.list(choices=
names(Jlife)[grep("qx([0-9]+)M", names(Jlife))],
preselect="qx2010M", title="Select the lifetable for males") mmx <- qxtomx(Jlife[, mqxn])
mcx <- length(mmx[!is.na(mmx)]) if (mcx < wx-1) {
mmx <- c(mmx[!is.na(mmx)], rep(0, wx-mcx-1)) } else {
mmx <- mmx[1:(wx-1)]
}
# select lifetable for females fqxn <- select.list(choices=
names(Jlife)[grep("qx([0-9]+)F", names(Jlife))],
preselect="qx2010F", title="Select the lifetable for females") fmx <- qxtomx(Jlife[, fqxn])
fcx <- length(fmx[!is.na(fmx)]) if (fcx < wx-1) {
fmx <- c(fmx[!is.na(fmx)], rep(0, wx-fcx-1)) } else {
fmx <- fmx[1:(wx-1)]
}
# select fertility schedule FERTN <- select.list(choices=
names(Jfert)[grep("ASFR([0-9]+)", names(Jfert))],
preselect="ASFR2010", title="Select the fertitiliy schedule") asfr <- c(rep(0, 15), Jfert[, FERTN], rep(0, wx-55))