R语言预测人口死亡率:用李·卡特(Lee-Carter)模型、非线性模型进行平滑估计

我们在研究人口数据集,可以观察到很多波动性。

由Kaizong Ye,Sherry Deng撰写

我们得到这样的结果:

由于我们缺少一些数据,因此我们想使用一些广义非线性模型。因此,让我们看看如何获​​得死亡率曲面图的平滑估计。我们编写一些代码。


D=DEATH$Male
E=EXPO$Male
A=as.numeric(as.character(DEATH$Age))
Y=DEATH$Year
I=(A<100)
base=data.frame(D=D,E=E,Y=Y,A=A)
subbase=base[I,]
subbase=subbase[!is.na(subbase$A),]


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加

第一个想法可以是使用Poisson模型,其中死亡率是年龄和年份的平稳函数,类似于

​可以使用


persp(vZ,theta=-30,col="green",shade=TRUE,xlab="Ages (0-100)",
ylab="Years (1900-2005)",zlab="Mortality rate (log)")

死亡率曲面图​

还可以提取年份的平均值,这是​ Lee-Carter模型中系数的解释  

predAx=function(a) mean(predict(regbsp,newdata=data.frame(A=a,
Y=seq(min(subbase$Y),max(subbase$Y)),E=1)))
plot(seq(0,99),Vectorize(predAx)(seq(0,99)),col="red",lwd=3,type="l")

我们有以下平滑的死亡率

回顾下李·卡特模型是

可以使用以下方法获得参数估计值

persp(vZ,theta=-30,col="green",shade=TRUE,xlab="Ages (0-100)",
ylab="Years (1900-2005)",zlab="Mortality rate (log)")

粗略的死亡率曲面图是

有以下  ​ 系数。

plot(seq(1,99),coefficients(regnp)[2:100],col="red",lwd=3,type="l")

这里我们有很多系数,但是,在较小的数据集上,我们具有更多的可变性。我们可以平滑李·卡特模型: 


R语言Lee-Carter模型对年死亡率建模预测期望寿命

阅读文章


 代码片段


persp(vZ,theta=-30,col="green",shade=TRUE,xlab="Ages (0-100)", 
ylab="Years (1900-2005)",zlab="Mortality rate (log)")

现在的死亡人数是

得出多年来随年龄变化的平均死亡率,


随时关注您喜欢的主题


BpA=bs(seq(0,99),knots=knotsA,Boundary.knots=range(subbase$A),degre=3)
Ax=BpA%*%coefficients(regsp)[2:8]
plot(seq(0,99),Ax,col="red",lwd=3,type="l")

然后,我们可以使用样条函数的平滑参数,并查看对死亡率曲面的影响

persp(vZ,theta=-30,col="green",shade=TRUE,xlab="Ages (0-100)",
ylab="Years (1900-2005)",zlab="Mortality rate (log)")


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds