You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言按概率分配离散死亡数至人口年龄组的技术问询

解决方案

要实现固定总死亡数下符合真实人口死亡规律的整数死亡数分配,可基于多分类抽样方法,以各年龄组的期望死亡数为权重进行随机分配,同时自动排除零人口组(无死亡可能)。具体实现步骤如下:

步骤1:数据预处理与期望死亡数计算

先过滤掉人口数为0的年龄组,同时计算每个有效组的期望死亡数(人口数×死亡率),作为抽样权重:

# 加载原始数据
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)

# 筛选有人口的年龄组,计算期望死亡数
valid_groups <- subset(data, pop > 0)
valid_groups$expected_deaths <- valid_groups$pop * valid_groups$mortality_p

步骤2:多分类抽样分配死亡数

使用rmultinom()函数从多分类分布中抽样,确保总死亡数严格为259,且分配概率与期望死亡数成正比:

# 设置随机种子,保证结果可复现
set.seed(123)

# 分配259个死亡数到有效年龄组
allocated_deaths <- rmultinom(n = 1, size = 259, prob = valid_groups$expected_deaths)[,1]

# 将分配结果绑定到有效组数据框
valid_groups$deaths <- allocated_deaths

步骤3:合并回原数据,补全零人口组结果

将分配结果与原始数据合并,零人口组的死亡数直接设为0:

# 合并数据,保留所有原始年龄组
final_result <- merge(data, valid_groups[, c("age", "deaths")], by = "age", all.x = TRUE)

# 零人口组死亡数填充为0
final_result$deaths[is.na(final_result$deaths)] <- 0

结果验证

检查总死亡数是否符合要求,以及零人口组是否无死亡:

# 验证总死亡数
sum(final_result$deaths)
# 验证零人口组死亡数总和
sum(final_result$deaths[final_result$pop == 0])

方法优势

  • 严格保证总死亡数为指定值,避免四舍五入的累积误差;
  • 以期望死亡数为权重,自然贴合真实死亡分布:老年组分配到的死亡数更多,低龄组仅偶尔出现死亡;
  • 随机抽样特性模拟了真实死亡的随机性,比确定性分配更符合现实场景。

内容的提问来源于stack exchange,提问作者KjetilH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:37:02