Rで 安定した男系男子継承に関する分析 を、ゴルトン・ワトソン過程(Galton-Watson process) により試みます。
具体的には 1組の夫婦から始まり(第1世代とします)、20世代(約1000年)に渡って男系男子の子孫が1人でも存続しているために、1組の夫婦が儲けるべき子供の数を求めます。
前提
- 全ての男子が結婚する。
- 常に一定数の子供を儲ける。
- 出生時男女比を
男:女 = 105:100として、男子出生確率を105 / (100 + 105) × 100 = 51.2%とする。
よって、1人の男系男子が次世代に残す男子の数の期待値は、「子供の数 × 男子出生確率」で計算できます。
- 子供1人:
1 * 0.512 = 0.512(1未満) - 子供2人:
2 * 0.512 = 1.024(1以上) - 子供3人:
3 * 0.512 = 1.536(1以上) - 子供4人:
4 * 0.512 = 2.048(1以上) - 子供5人:
5 * 0.512 = 2.560(1以上) - 子供6人:
6 * 0.512 = 3.072(1以上)
この期待値が 1 を上回るかどうかが、男系男子の血統が長期的に継続するか衰退するかの理論的な分岐点となります。
記号の定義
まず、計算に使用する記号を以下のように定義します。
-
c: 1組の夫婦から生まれる子供の数(1人, 2人, 3人, 4人, 5人, 6人の各ケース) -
p: 子供が男子である確率(105 / 205 ≈ 0.512) -
n: 世代数(最初の夫婦が第1世代、その子供が第2世代、…) -
q_n: 第n世代までに男系が絶滅している確率 -
S_n: 第n世代で男系が存続している確率
計算の考え方
直接「存続確率 S_n」を求めるのではなく、逆の事象である「絶滅確率 q_n」を先に計算し、最後に 1 から引くことで存続確率を求めます。
S_n = 1 - q_n
絶滅確率 q_n は、以下の漸化式(ぜんかしき:前の項を使って次の項を計算する式)で求めることができます。
男系存続確率を求める数式
1. 第2世代の存続確率 S_2
男系が「第2世代で絶える」とは、第1世代の夫婦から生まれた c 人の子供(第2世代)に、一人も男子がいない場合です。
- 子供1人が女子である確率は
(1 - p)です。 -
c人の子供が全員女子である確率は(1 - p)^cです。これが第2世代で絶滅する確率q_2となります。
絶滅確率 q_2: \[ q_2 = (1 - p)^c \]
したがって、第2世代で男系が存続している確率 S_2 は以下のようになります。
存続確率 S_2: \[ S_2 = 1 - q_2 = 1 - (1 - p)^c \]
2. 第 n 世代の存続確率 S_n (n ≥ 3)
第 n 世代までに絶滅する確率 q_n は、第 n-1 世代までの絶滅確率 q_{n-1} を使って、以下の漸化式で計算できます。
絶滅確率の漸化式 q_n: \[ q_n = (1 - p + p \cdot q_{n-1})^c \]
この式は、「第 n-1 世代の各男子が、次世代(第 n 世代)の男子を残せずに家系が途絶える確率」を全生存系統について考慮したものです。
したがって、第 n 世代で男系が存続している確率 S_n は以下のようになります。
存続確率の漸化式 S_n: \[ S_n = 1 - q_n = 1 - (1 - p + p \cdot q_{n-1})^c \] ここで q_{n-1} は 1 - S_{n-1} なので、S_n を S_{n-1} を使って直接表現することもできます。 \[ S_n = 1 - (1 - p + p \cdot (1 - S_{n-1}))^c = 1 - (1 - p \cdot S_{n-1})^c \]
計算手順のまとめ
各ケース(c=1, 2, 3, 4, 5, 6)について、世代ごとの存続確率を計算する手順は以下の通りです。
- 定数を設定する
p = 105 / 205-
cをケースに応じて設定する (例:c=2)
- 第2世代の存続確率
S_2を計算するS_2 = 1 - (1 - p)^c
- 第3世代以降の存続確率
S_nを順次計算する (n=3, 4, 5, …)S_3 = 1 - (1 - p \cdot S_2)^cS_4 = 1 - (1 - p \cdot S_3)^c- …
S_n = 1 - (1 - p \cdot S_{n-1})^c
Rコード
library(dplyr)
library(knitr)
# ゴルトン・ワトソン過程 によるシミュレーションの関数
Galton_Watson_process <- function(NUM_CHILDREN) {
# --- 1. パラメータ設定 ---
PROB_MALE <- 105 / 205 # 男子が生まれる確率 (p)
MAX_GENERATION <- 20 # 計算する最大世代数
# 引数 NUM_CHILDREN は 1夫婦あたりの子供の数 (c)
# --- 2. 確率計算の準備 ---
# 結果を格納するベクトルを初期化
# survival_prob[n] は第n世代で存続している確率を格納します
survival_prob <- numeric(MAX_GENERATION)
# 第1世代は定義により存続しているので、存続確率 = 1.0
survival_prob[1] <- 1.0
# --- 3. 漸化式による計算 (ループ処理) ---
# 第2世代からMAX_GENERATIONまで、存続確率を順次計算
for (n in 2:MAX_GENERATION) {
# 前世代(n-1)の存続確率 S_{n-1} を取得
s_prev <- survival_prob[n - 1]
# 存続確率の漸化式 S_n = 1 - (1 - p * S_{n-1})^c を計算
s_current <- 1 - (1 - PROB_MALE * s_prev)^NUM_CHILDREN
# 計算結果を格納
survival_prob[n] <- s_current
}
# --- 4. 結果の表示 ---
# 世代と計算された存続確率をデータフレームにまとめる
results_df <- data.frame(
Generation = 1:MAX_GENERATION,
Survival_Probability = survival_prob
)
# 存続確率をパーセンテージ形式に変換して追加
results_df$Survival_Percentage <- sprintf("%.1f %%", results_df$Survival_Probability * 100)
colnames(results_df)[c(1, 3)] <- c("世代", paste0("子供の数:", NUM_CHILDREN))
return(results_df[c(1, 3)])
}
results_df <- lapply(seq(6), function(x) Galton_Watson_process(x)) %>% Reduce(function(x, y) plyr::join(x, y), .)
# kable()関数を使って、結果をテーブル形式で出力
kable(
results_df,
align = "r"
)| 世代 | 子供の数:1 | 子供の数:2 | 子供の数:3 | 子供の数:4 | 子供の数:5 | 子供の数:6 |
|---|---|---|---|---|---|---|
| 1 | 100.0 % | 100.0 % | 100.0 % | 100.0 % | 100.0 % | 100.0 % |
| 2 | 51.2 % | 76.2 % | 88.4 % | 94.3 % | 97.2 % | 98.7 % |
| 3 | 26.2 % | 62.8 % | 83.6 % | 92.9 % | 96.8 % | 98.5 % |
| 4 | 13.4 % | 54.0 % | 81.3 % | 92.4 % | 96.7 % | 98.5 % |
| 5 | 6.9 % | 47.7 % | 80.1 % | 92.3 % | 96.7 % | 98.5 % |
| 6 | 3.5 % | 42.9 % | 79.5 % | 92.3 % | 96.7 % | 98.5 % |
| 7 | 1.8 % | 39.1 % | 79.2 % | 92.3 % | 96.7 % | 98.5 % |
| 8 | 0.9 % | 36.0 % | 79.0 % | 92.3 % | 96.7 % | 98.5 % |
| 9 | 0.5 % | 33.5 % | 78.9 % | 92.3 % | 96.7 % | 98.5 % |
| 10 | 0.2 % | 31.4 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 11 | 0.1 % | 29.6 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 12 | 0.1 % | 28.0 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 13 | 0.0 % | 26.6 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 14 | 0.0 % | 25.4 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 15 | 0.0 % | 24.3 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 16 | 0.0 % | 23.4 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 17 | 0.0 % | 22.5 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 18 | 0.0 % | 21.7 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 19 | 0.0 % | 21.0 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
| 20 | 0.0 % | 20.4 % | 78.8 % | 92.3 % | 96.7 % | 98.5 % |
Table 1 のとおり、20世代(約1000年後)まで男系男子の子孫が最低1人でも存続している確率は以下のとおりになります。
1組の夫婦が儲ける子供の数が、
- 1人の場合:
0 %です。 - 2人の場合:
20.4 %です。 - 3人の場合:
78.8 %です。 - 4人の場合:
92.3 %です。 - 5人の場合:
96.7 %です。 - 6人の場合:
98.5 %です。
つまり、あくまでも男子出生確率を 51.2% に固定した場合、第20世代までに男系男子の子孫が断絶してしまう確率を5%未満にするには、全ての男系男子の子孫が最低5人の子供を儲ける必要があります(100 - 96.7 = 3.3%)。
以上です。

