2023-2030老龄化(>=65)比率预测模型

目录

前言

一、数据来源和处理

二、相关性检验

Ⅰ、图形说明

Ⅱ、相关矩阵

三、LSTM算法预测

四、BP神经网络预测


前言

        如何预测未来八年老龄化比率?作者从以下四个角度出发:GDP,医院数(医院包括综合医院、中医医院、中西医结合医院、民族医院、各类专科医院和护理院,不包括专科疾病防治院、妇幼保健院和疗养院。),自然增长率,15-64岁人群比率。经济的发展和医疗服务保障会促进人类平均寿命的延长,自然增长率则涉及到人口基数的变化,由于预测的是未来五年老龄化比率,15-64人群比率也要考虑在内。

        其他因素对老龄化也有很大影响,如不可抗力(自然灾害,疫情等),或因为作者知识水平有限,或为了简化模型,不考虑在内。如果你有相异的见解,欢迎一起交流。

一、数据来源和处理

        声明:本文所用数据都来自于国家统计局,特别感谢作者的信息检索老师,为数据的寻求提供了帮助。

        由于各方面的原因,国统局对65岁以上人群的连续(每年)统计从1990年开始,本文所用到的数据均为相同的时间跨度:1990-2022。补充:2023/2/19,国统局上尚未公布2022年医院数,以38000估计。

        附议Python文件处理代码:

f=open(r"C:\Users\username\Desktop\1.txt",'r').readlines()
#1.txt存放了复制粘贴的数据
g=open(r"C:\Users\username\Desktop\2.txt",'w')
#2.txt准备写入处理后的数据
for i in list(reversed(f[0].split())):#原年份为倒序,故reversed
    g.write(i+'\n')#注意要换行
g.close()

二、相关性检验

Ⅰ、图形说明

        p是经过处理后的数据,各列所代表的意义如下图。(想要完整数据的请私信)

 将p归一化处理后(对每个指标),绘制五个指标在同一坐标系下的图

 从中发现:

①15-64岁人口比率和>65的比率相关性较弱

②自然增长率与>65的比率大致呈负相关

③GDP与>65的比率大致呈正相关

④医院数大致与老龄化正相关

q=mapminmax(p',0,1);
ls=['r*--','go--','bd--','ys:','kx-.'];%linestyle
for i=1:5
    plot(1990:2022,q(i,:),ls(i));
    hold on
end
set(gca,'XTick',1990:3:2023);
legend('15-64比率','>65比率','自然增长率','GDP','医院数');
title('各数据归一化后在同一坐标轴的呈现');

Ⅱ、相关矩阵

        想要进一步了解相关矩阵请前往阿白数模笔记之协方差矩阵与相关矩阵

>> corrcoef(p)

ans =

    1.0000    0.3315   -0.5089    0.3467    0.2950
    0.3315    1.0000   -0.8596    0.9920    0.9925
   -0.5089   -0.8596    1.0000   -0.8062   -0.8119
    0.3467    0.9920   -0.8062    1.0000    0.9940
    0.2950    0.9925   -0.8119    0.9940    1.0000

数据第二列(老龄化比率)和有强相关性(绝对值>=0.8)的有:第三列(自然增长率),第四列(GDP),第五列(医院数)

三、LSTM算法预测

        我们先用LSTM算法预测未来八个时间步的自然增长率,GDP,医院数

clc;clear;
load('p.mat');
t={'自然增长率','GDP','医院总数'};
fore=zeros([3,8]);
for i=1:3
    subplot(1,3,i);
    fore(i,:)=fig(p(:,i+2)');
    title(t(i));
end

fig函数的定义

function [r] = fig(data) %r用来储存预测值
dataTrain = data;
mu = mean(dataTrain);
sig = std(dataTrain);
dataTrainStandardized = (dataTrain - mu) / sig;
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 200;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits)
    fullyConnectedLayer(numResponses)
    regressionLayer];
options = trainingOptions('adam', ...
    'MaxEpochs',500, ...
    'GradientThreshold',0.1, ...
    'InitialLearnRate',0.001, ...
    'LearnRateSchedule','piecewise', ...
    'LearnRateDropPeriod',100, ...
    'LearnRateDropFactor',0.1, ...
    'Verbose',0, ...
    'Plots','training-progress');
net = trainNetwork(XTrain,YTrain,layers,options);
net = predictAndUpdateState(net,XTrain);
[net,YPred] = predictAndUpdateState(net,YTrain(end));
for i = 2:8 #预测8年的
    [net,YPred(:,i)] = predictAndUpdateState(net,YPred(:,i-1),'ExecutionEnvironment','cpu');
end
YPred=YPred*sig+mu;
plot(1990:2022,data,'bo-',2023:2030,YPred,'r*-');
hold on
legend('data','pred')
r=YPred;
end

四、BP神经网络预测

        以1990-2022的数据为训练集进行训练搭建出网络,以此预测2023-2030的老龄化比率

q=[p(:,[3,4,5]);fore'];
input=q;
output=p(:,2);
%训练集,测试集
input_train=input(1:33,:)';
output_train=output(1:33,:)';
input_test=input(34:end,:)';
%数据归一化
[inputn,inputs]=mapminmax(input_train,-1,1);
[outputn,outputs]=mapminmax(output_train);
inputn_test=mapminmax('apply',input_test,inputs);
net=newff(inputn,outputn,12);
%网络参数
net.trainparam.epochs=10000;
net.trainparam.lr=0.000001;
net.trainparam.goal=0.000001;
net.dividefcn='';
%bp神经网络训练
net=train(net,inputn,outputn);
an=sim(net,inputn_test);%用训练好的模型进行仿真
result=mapminmax('reverse',an,outputs);%预测结果反归一化
plot(1990:2022,output,'bo-',2023:2030,result,'r*-');
legend('1990-2022老龄化','2023-2027老龄化预测','location','northwest')
axis tight;

效果如下:

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿白啥也不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值