R:按概率在人群群组之间分配 N 个离散元素

问题描述 投票:0回答:1

我想使用 1986 年至今的历史数据对人口中的人口变化进行建模。我的数据涵盖了一年内分为不同年龄组的人口:0、1、2 ... 106+。

根据国家统计数据,每个年龄段都有相应的死亡概率。将 50 岁男性人数乘以死亡概率即可得出

276 x 0.004813 = 1.328

虽然预期是 1.328,但 1986 年 50 岁男性死亡人数必须是整数,并且可能接近预期。我可以简单地将这些数字相乘并向上或向下舍入,但多年来对整个人口进行此操作会产生显着的舍入误差。

由于我使用的是历史数据,因此我知道 1986 年整个男性人口的总死亡人数:259。我还知道每个队列中的人数,以及相应的估计死亡概率。

考虑 1986 年的以下数据:

age <- (0:106)
pop <- c(313,330,266,347,289,297,282,300,287,329,345,347,397,390,426,425,493,464,446,428,441,459,406,415,381,410,390,388,390,401,382,385,346,355,401,396,377,424,428,487,424,447,407,328,298,324,315,299,297,259,276,258,277,280,283,263,253,253,269,292,267,247,244,251,227,253,206,213,193,193,165,162,144,173,128,120,102,106,91,85,67,67,54,47,36,39,26,22,24,9,12,9,5,2,1,0,1,1,0,0,0,0,0,0,0,0,0)
mortality_p <- c(0.008395, 0.001153, 0.000464, 0.000229, 0.000304, 0.000342, 0.000263, 0.000337, 0.000414,
  0.000037, 0.000212, 0.000168, 0.000353, 0.000246, 0.000389, 0.000506, 0.000878, 0.000890, 0.001480, 0.001779, 0.001226, 0.001476, 0.001033, 0.001407, 0.000973, 0.001418, 0.001034, 0.000684, 0.000937, 0.000933, 0.001085, 0.001289, 0.001361, 0.000949, 0.001028, 0.001383, 0.001428, 0.001618, 0.001456, 0.001586, 0.001880, 0.001824, 0.002599, 0.002735, 0.002613, 0.003712, 0.003805, 0.005025, 0.004538, 0.004156, 0.004813, 0.004727, 0.006535, 0.007961, 0.007828, 0.007898, 0.008708, 0.010078, 0.013314, 0.013609, 0.015112, 0.016745, 0.016766, 0.020449, 0.022059, 0.022400, 0.026670, 0.027975, 0.032242, 0.032829, 0.038957, 0.039702, 0.046757, 0.051496, 0.056179, 0.062836, 0.063975, 0.071973, 0.076188, 0.090343, 0.089612, 0.100477, 0.104900, 0.118855, 0.135289, 0.141978, 0.157365, 0.161306, 0.169835, 0.198279, 0.197704, 0.228076, 0.230895, 0.249000, 0.289030, 0.337058, 0.282705, 0.335130, 0.322072,0.392166, 0.327260, 0.270787, 0.527633, 0.264859, 0.358820, 0.981684, 1.000000)

data <- data.frame(age,pop,mortality_p)

模拟死亡率的一种方法是获取记录的死亡人数 259,并根据各群体各自的死亡概率将其随机分配。

为了现实,大多数死亡应该发生在老年人中,但对于大量人口来说,不太可能发生的事件(例如 10 岁儿童死亡)应该偶尔发生。此外,由 0 人组成的年龄组不会发生死亡。

使用 R,对于如何根据相关概率和每个队列中的人数在 107 个队列之间分配 259 个元素,有什么建议吗?

r modeling rounding-error probability-distribution demographics
1个回答
0
投票

死亡遵循加权瓮模型。我不知道 R 函数可以有效地生成大量样本,但是对于您示例中的中等大小的数字,可以使用

tabulate
sample
来完成:

data$deaths <- with(
  data,
  tabulate(
    sample(
      rep.int(seq_along(age), pop), 259, 1,
      rep.int(mortality_p, pop)
    ),
    nrow(data)
  )
)
© www.soinside.com 2019 - 2024. All rights reserved.