Python自动化实现生命表时lx计算结果异常问题求解
生命表Python计算问题排查与修复
问题原因
- 变量逻辑错误:
deaths变量仅存储单一年龄组的死亡人数,并非累计死亡总人数,循环首行starting_cohort = 100000 - deaths的计算逻辑不符合生命表累计存活的要求 - 变量未持久化:
starting_cohort在循环内部每次被重新赋值,上一轮计算得到的剩余存活人口不会被带入下一轮计算,导致结果错误
修复方案
直接维护全局的剩余存活人口变量,不需要通过初始人口反算,修正后代码如下:
Qx = [0.07230,0.02765,0.00851,0.00636,0.00641,0.00899,0.00814,0.00984,0.01497,0.02184,0.03175,0.04509,0.06498] dx = [] lx = [] # 初始化初始队列人口 survival = 100000 for q in Qx: # 计算当前年龄组死亡人数 current_death = survival * q dx.append(current_death) # 计算剩余存活人口 survival = survival - current_death lx.append(survival) print(dx) print(lx)
逻辑说明
- 初始将总队列人口
survival设为100000,作为全局变量在循环外定义 - 每轮遍历对应年龄组死亡率
q,直接用当前剩余存活人口计算该组死亡人数 - 扣除死亡人数后更新
survival的值,直接带入下一轮计算,自动完成累计存活的统计
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

