中国人口增长预测

目录

问题分析

模型建立

Logistic模型

 Leslie模型

模型求解

问题一

问题二

 问题三


问题分析


问题

基本假设

(1)不考虑移民对人口总数的影响

(2)超过90岁按照90岁计算

(3)在较短时间内,平均年龄变化较小,可认为不变

(4)社会稳定,不会发生重大灾害和战争,出生率和死亡率基本不变


模型建立


Logistic模型


 Leslie模型


模型求解

inline

f = inline(expr) 按照 expr 中包含的 MATLAB® 表达式构造一个内联函数对象。内联函数的输入参数是通过在 expr 中搜索孤立的小写字母字符(i 或 j 除外)自动确定的,该小写字母字符不属于通过多个字母字符构成的字词的一部分。如果不存在此类字符,则使用 x。如果该字符不是唯一的,则使用最接近 x 的字符。如果找到两个字符,则选择在字母表中靠后的字符。

f = inline(expr,arg1,arg2,…,argN) 构造一个由 arg1,arg2,…,argN 指定输入参数的内联函数。可以使用多字符符号名称。

f = inline(expr,N)(其中 N 是标量)构造一个其输入参数为 x 和 P1,P2,…,PN 的内联函数

sqr = @(x) x.^2

(比起inline,更加推荐使用匿名函数)

变量 sqr 是一个函数句柄。@ 运算符创建句柄,@ 运算符后面的圆括号 () 包括函数的输入参数。该匿名函数接受单个输入 x,并显式返回单个输出,即大小与包含平方值的 x 相同的数组。

通过将特定值 (5) 传递到函数句柄来计算该值的平方,与您将输入参数传递到标准函数一样。

nlinfit 非线性回归

beta = nlinfit(X,Y,modelfun,beta0) 使用 modelfun 指定的模型,返回一个向量,其中包含 Y 中的响应对 X 中的预测变量的非线性回归的估计系数。它使用迭代最小二乘估计来估计系数,初始值由 beta0 指定。

beta = nlinfit(X,Y,modelfun,beta0,options) 使用结构体 options 中的算法控制参数来拟合非线性回归。您可以返回上述语法中的任何输出参数。

beta = nlinfit(___,Name,Value) 使用由一个或多个名称-值对组参数指定的附加选项。例如,您可以指定观测值权重或非常量误差模型。您可以使用上述语法中的任何输入参数。

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(___) 还返回残差 Rmodelfun 的 Jacobian 矩阵 J、估计系数的估计方差-协方差矩阵 CovB、误差项的方差估计 MSE 以及包含误差模型细节的结构体 ErrorModelInfo


问题一

        Logistic模型根据经济发展水平、政策情况,分为三个时间段(三种情况)对问题进行求解。

①将1954年看成初始年t=0;1955年为t=1;2005年为t=51,作为终止时刻。

clear all 
clc
t=0:51;  %令1954年为初始年
x=[60.2 61.5 62.8 64.6 66 67.2 66.2 65.9 67.3 69.1 70.4 72.5 74.5 76.3 78.5 80.7 83 85.2 87.1 89.2 90.9 92.4 93.7 95 96.259 97.5 98.705 100.1 101.654 103.008 104.357 105.851 107.5 109.3 111.026 112.704 114.333 115.823 117.171 118.517 119.85  121.121 122.389 123.626 124.761 125.786 126.743 127.627 128.453 129.227 129.988 130.756]; 

syms c d
c/(1+(c/60.2-1)*exp(-5*d))==67.2
c/(1+(c/60.2-1)*exp(-20*d))==90.9
%求初始参数
solve(c,d)

b0=[ 241.9598, 0.02985];   %初始参数值
fun=inline('b(1)./(1+(b(1)/60.2-1).*exp(-b(2).*t))','b','t');
[b1,r1,j1]=nlinfit(t,x,fun,b0)
y=180.9871./(1+( 180.9871/60.2-1).*exp( -0.0336.*t));  %非线性拟合的方程
figure(1)
plot(t,x,'*',t,y,'-or')  %对原始数据与曲线拟合后的值作图
title('原始数据与曲线拟合后曲线')
xlabel('时间')
ylabel('人口数量(单位:千万)')
R1=r1.^2;
R2=(x-mean(x)).^2;  
R=1-R1/R2';          %可决系数
W=sum(abs(r1))     %残差绝对值之和
% t=56;
% y56=180.9871./(1+( 180.9871/60.2-1).*exp( -0.0336.*t))  %非线性拟合的方程
% t=66;
% y66=180.9871./(1+( 180.9871/60.2-1).*exp( -0.0336.*t))  %非线性拟合的方程
% t=79;
% y79=180.9871./(1+( 180.9871/60.2-1).*exp( -0.0336.*t))  %非线性拟合的方程
% %1954年到2005年的总人口数进行拟合产生的残差散点图
% figure(2)
% t=1954:2005;
% plot(t,r1,'.-')

 ②将1963年看为t=0;2005年为终止年,t=42。

clear all
clc 
t=46:3:94
y=  180.9871./(1+( 180.9871/60.2-1).*exp( -0.0336.*t))%对总人口进行预测
t=0:42;  %令1963年为初始年
x=[69.1 70.4    72.5    74.5    76.3    78.5    80.7    83  85.2    87.1    89.2    90.9    92.4    93.7    95  96.259  97.5    98.705  100.1   101.654 103.008 104.357 105.851 107.5   109.3   111.026 112.704 114.333 115.823 117.171 118.517 119.85  121.121 122.389 123.626 124.761 125.786 126.743 127.627 128.453 129.227 129.988 130.756]; 

syms c d
c/(1+(c/69.1-1)*exp(-5*d))==78.5
c/(1+(c/69.1-1)*exp(-20*d))==103.008 %求初始参数
solve(c,d)

b0=[   134.368,0.056610];   %初始参数值
fun=inline('b(1)./(1+(b(1)/69.1-1).*exp(-b(2).*t))','b','t');
[b1,r1,j1]=nlinfit(t,x,fun,b0)
y=151.4513./(1+(151.4513/69.1-1).*exp( -0.0484.*t));  %非线性拟合的方程
figure(1)
plot(t,x,'*',t,y,'-or')  %对原始数据与曲线拟合后的值作图
title('原始数据与曲线拟合后曲线')
xlabel('时间')
ylabel('人口数量(单位:千万)')
R1=r1.^2;
R2=(x-mean(x)).^2;  
R=1-R1/R2';          %可决系数
W=sum(abs(r1))     %残差绝对值之和
% t=47;
% y47=151.4513./(1+(151.4513/69.1-1).*exp( -0.0484.*t))  %非线性拟合的方程
% t=57;
% y57=151.4513./(1+(151.4513/69.1-1).*exp( -0.0484.*t))  %非线性拟合的方程
% t=70;
% y70=151.4513./(1+(151.4513/69.1-1).*exp( -0.0484.*t))  %非线性拟合的方程
% %1963年到2005年的总人口数进行拟合产生的残差散点图
% figure(2)
% t=1963:2005;
% plot(t,r1,'.-')

 ③将1980年看为起始年,2005年视为终止年

clear all
clc 
t=37:3:85
y=151.4513./(1+(151.4513/69.1-1).*exp( -0.0484.*t))%对总人口进行预测
t=0:25;  %令1980年为初始年
x=[98.705   100.1   101.654 103.008 104.357 105.851 107.5   109.3   111.026 112.704 114.333 115.823 117.171 118.517 119.85  121.121 122.389 123.626 124.761 125.786 126.743 127.627 128.453 129.227 129.988 130.756]; 

syms c d
c/(1+(c/98.705-1)*exp(-5*d))==105.851
c/(1+(c/98.705-1)*exp(-8*d))==111.026
solve(c,d)
 %求初始参数
b0=[ 109.8216, - 0.19157];   %初始参数值
fun=inline('b(1)./(1+(b(1)/98.705-1).*exp(-b(2).*t))','b','t');
[b1,r1,j1]=nlinfit(t,x,fun,b0)
y= 153.5351./(1+(153.5351/98.705-1).*exp( -0.0477.*t));  %非线性拟合的方程
figure(1)
plot(t,x,'*',t,y,'-or')  %对原始数据与曲线拟合后的值作图
title('原始数据与曲线拟合后曲线')
xlabel('时间')
ylabel('人口数量(单位:千万)')
R1=r1.^2;
R2=(x-mean(x)).^2;  
R=1-R1/R2';          %可决系数
 W=sum(abs(r1))     %残差绝对值之和
% t=20:3:53;
% y= 153.5351./(1+(153.5351/98.705-1).*exp( -0.0477.*t))%对总人口进行预测
% %1954年到2005年的总人口数进行拟合产生的残差散点图
% figure(2)
% t=1980:2005;
% plot(t,r1,'.-')
% grid on


问题二

        采用考虑种群结构的Leslie离散模型。

clear all 
clc
%计算2001到2051年的人口总数程序
p=0.464429182;              %女性占总人口的比例
N=[0.680891272  0.58459172  0.584558207 0.692220217 0.72411021  0.775536041 0.847368918 0.834418703 0.917922042 0.951466819 1.070015717 1.249256063 1.199263988 1.202198525 1.274218917 1.111050839 0.992314425 0.893797544 0.874657347 0.984356877 0.859576778 0.85215346  0.90864418  0.897944807 0.880539323 1.019086724 1.04218667  1.114823731 1.192867199 1.203566572 1.272973995 1.328513576 1.254992403 1.333819445 1.103186123 1.22470307  1.220643442 1.236736319 1.390726415 0.980765111 0.646684069 0.785660623 0.701627592 0.910420112 0.960157646 0.914258713 0.953980568 0.927429956 0.851007759 0.825482359 0.807942823 0.736552002 0.69043204  0.60580295  0.615510624 0.554785663 0.50370135  0.480051762 0.468722817 0.455364059 0.484386541 0.447344681 0.420164498 0.44238033  0.426529091 0.428183875 0.39132953  0.380409129 0.385339967 0.327924574 0.334697711 0.307330012 0.262864834 0.270663183 0.235872165 0.208725495 0.212001549 0.178456772 0.164260316 0.149842833 0.138734916 0.109899949 0.097358277 0.0765762   0.0638135   0.055794123 0.049396016 0.0382881   0.033544777 0.023870616 0.070211606];
N0=N'/10;                    %第0年(2001年)的女性各个年龄段的人口数(千万)
N00=N0/10                    %把单位化成亿(人)
A=eye(90);
b=[0.974906966  0.999321231 0.99772433  0.999247616 0.999567418 0.999180663 0.999887948 0.999387596 0.999618586 0.999985672 0.999389434 0.999724354 0.999801796 0.999627626 0.999704795 0.999639686 0.999728462 0.999974533 0.999173327 0.998954118 0.999441067 0.999357392 0.999290675 0.998999176 0.999881604 0.998896347 0.998355939 0.999135339 0.999074527 0.998872652 0.999180794 0.998918159 0.999046112 0.999042354 0.999396027 0.998624972 0.998252716 0.999597855 0.998710945 0.999003274 0.999443444 0.999141415 0.998772101 0.998940505 0.997905005 0.998374562 0.997783774 0.997596666 0.997344906 0.996954499 0.996669784 0.996030759 0.995006639 0.996157488 0.994647744 0.995779435 0.995652313 0.99577713  0.992477806 0.994969564 0.988130537 0.989284868 0.988703961 0.988302563 0.98420824  0.984495416 0.985298735 0.980062089 0.978928307 0.977358446 0.971126989 0.969303899 0.969979818 0.96405059  0.961740312 0.96729706  0.948302346 0.946571559 0.949641387 0.935949391 0.912489482 0.9261805   0.923757863 0.928757906 0.918230333 0.887761389 0.885306858 0.875178086 0.882495752 0.824428701];
for i=1:90
    A(i,:)=A(i,:)*b(1,i);
end
A;         
c=[0    0   0   0   0   0   0   0   0   0   0   0   0   0   0   4.478E-05   0.000322169 0.000358246 0.001004604 0.004683367 0.011011165 0.033616492 0.057875394 0.074871727 0.069182006 0.076039141 0.06724895  0.052429406 0.043732464 0.034350502 0.024632733 0.023252532 0.018343847 0.014701275 0.011039961 0.007117557 0.005094843 0.00359291  0.002514858 0.002484781 0.001764709 0.001471644 0.000676953 0.000265476 0.000401474 0.000408779 0.000110447 0.000192401 0.000389421 0.000224069 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0];        %由2001年原始数据得到的生育率
c1=1.295274487*c;            %修正后的生育率
M=sum(c1');                  %总合生育率
d=zeros(91,1);
B=[c1;A];
L=[B,d];                    %构造的lestie矩阵
for i=0:1:50
X=L^i*N0;                   %第i年后女性各个年龄段的人口数(千万)
Z=X./p;                     %第i年在各个年龄段的人口总数预测
K(i+1,1)=sum(Z);
S1=sum(Z([1:15],:));        %第i年0-14岁的总人数
D(1,i+1)=S1;
S2=sum(Z([16:65],:));       %第i年15-64岁的总人数
S3=sum(Z([61:91],:));       %第i年60-90岁人数
G(1,i+1)=S3;
E(1,i+1)=S2;
S4=sum(Z([66:91],:));       %第i年65-90岁人数
F(1,i+1)=S4;
end
K                           %2001-2051的人口总数
D                           %年龄在0-14岁总人数(包括男女)
E                           %年龄在15-64岁总人数(包括男女)
F                           %年龄在65岁及65岁以上总人数(包括男女)
G                           %年龄在60岁及60岁以上总人数(包括男女)
%我国全国总人口与劳动年龄人口
x=2001:2051;
y1=K;
y2=E';
figure(1)
plot(x,y1,'*',x,y2,'-or')
title('我国全国总人口与劳动年龄人口变化趋势');
xlabel('时间');
ylabel('人口变化趋势')
%我国60岁以上与65岁以上的老龄人口数
x=2001:2051;
y1=G';
y2=F';
figure(2)
plot(x,y1,'*',x,y2,'-or')
title('我国60岁以上与65岁以上的老龄人口数');
xlabel('时间');
ylabel('老龄人口数')
%我国老龄人口占总人口预测比例
x=2001:2051;
y1=G'/K;
y2=F'/K;
figure(3)
plot(x,y1(:,23),'*',x,y2(:,23),'-or')
title('我国老龄人口占总人口预测比例');
xlabel('时间');
ylabel('老龄人口比重')


 问题三

        在不同的总生育率k下预测全国老龄化变化趋势。

function W=compare(x) 
p=0.464429182;      %女性占总人口的比例
N=[0.680891272  0.58459172  0.584558207 0.692220217 0.72411021  0.775536041 0.847368918 0.834418703 0.917922042 0.951466819 1.070015717 1.249256063 1.199263988 1.202198525 1.274218917 1.111050839 0.992314425 0.893797544 0.874657347 0.984356877 0.859576778 0.85215346  0.90864418  0.897944807 0.880539323 1.019086724 1.04218667  1.114823731 1.192867199 1.203566572 1.272973995 1.328513576 1.254992403 1.333819445 1.103186123 1.22470307  1.220643442 1.236736319 1.390726415 0.980765111 0.646684069 0.785660623 0.701627592 0.910420112 0.960157646 0.914258713 0.953980568 0.927429956 0.851007759 0.825482359 0.807942823 0.736552002 0.69043204  0.60580295  0.615510624 0.554785663 0.50370135  0.480051762 0.468722817 0.455364059 0.484386541 0.447344681 0.420164498 0.44238033  0.426529091 0.428183875 0.39132953  0.380409129 0.385339967 0.327924574 0.334697711 0.307330012 0.262864834 0.270663183 0.235872165 0.208725495 0.212001549 0.178456772 0.164260316 0.149842833 0.138734916 0.109899949 0.097358277 0.0765762   0.0638135   0.055794123 0.049396016 0.0382881   0.033544777 0.023870616 0.070211606];
N0=N';
A=eye(90);
b=[0.974906966  0.999321231 0.99772433  0.999247616 0.999567418 0.999180663 0.999887948 0.999387596 0.999618586 0.999985672 0.999389434 0.999724354 0.999801796 0.999627626 0.999704795 0.999639686 0.999728462 0.999974533 0.999173327 0.998954118 0.999441067 0.999357392 0.999290675 0.998999176 0.999881604 0.998896347 0.998355939 0.999135339 0.999074527 0.998872652 0.999180794 0.998918159 0.999046112 0.999042354 0.999396027 0.998624972 0.998252716 0.999597855 0.998710945 0.999003274 0.999443444 0.999141415 0.998772101 0.998940505 0.997905005 0.998374562 0.997783774 0.997596666 0.997344906 0.996954499 0.996669784 0.996030759 0.995006639 0.996157488 0.994647744 0.995779435 0.995652313 0.99577713  0.992477806 0.994969564 0.988130537 0.989284868 0.988703961 0.988302563 0.98420824  0.984495416 0.985298735 0.980062089 0.978928307 0.977358446 0.971126989 0.969303899 0.969979818 0.96405059  0.961740312 0.96729706  0.948302346 0.946571559 0.949641387 0.935949391 0.912489482 0.9261805   0.923757863 0.928757906 0.918230333 0.887761389 0.885306858 0.875178086 0.882495752 0.824428701];
b1=[0.974906966 0.999321231 0.99772433  0.999247616 0.999567418 0.999180663 0.999887948 0.999387596 0.999618586 0.999985672 0.999389434 0.999724354 0.999801796 0.999627626 0.999704795 0.999639686 0.999728462 0.999974533 0.999173327 0.998954118 0.999441067 0.999357392 0.999290675 0.998999176 0.999881604 0.998896347 0.998355939 0.999135339 0.999074527 0.998872652 0.999180794 0.998918159 0.999046112 0.999042354 0.999396027 0.998624972 0.998252716 0.999597855 0.998710945 0.999003274 0.999443444 0.999141415 0.998772101 0.998940505 0.997905005 0.998374562 0.997783774 0.997596666 0.997344906 0.996954499 0.996669784 0.996030759 0.995006639 0.996157488 0.994647744 0.995779435 0.995652313 0.99577713  0.992477806 0.994969564 0.988130537 0.989284868 0.988703961 0.988302563 0.98420824  0.984495416 0.985298735 0.980062089 0.978928307 0.977358446 0.971126989 0.969303899 0.969979818 0.96405059  0.961740312 0.96729706  0.948302346 0.946571559 0.949641387 0.935949391 0.912489482 0.9261805   0.923757863 0.928757906 0.918230333 0.887761389 0.885306858 0.875178086 0.882495752 0.824428701 0.7717624];
for i=1:90
    A(i,:)=A(i,:)*b(1,i);
end
A;         
c1=[0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   4.478E-05   0.000322169 0.000358246 0.001004604 0.004683367 0.011011165 0.033616492 0.057875394 0.074871727 0.069182006 0.076039141 0.06724895  0.052429406 0.043732464 0.034350502 0.024632733 0.023252532 0.018343847 0.014701275 0.011039961 0.007117557 0.005094843 0.00359291  0.002514858 0.002484781 0.001764709 0.001471644 0.000676953 0.000265476 0.000401474 0.000408779 0.000110447 0.000192401 0.000389421 0.000224069 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0];        %由2001年原始数据得到的生育率
t=sum(c1);
c=((x*p-t)/t+1)*c1                                %修正后的生育率
M=sum(c');                                        %总合生育率
d=zeros(91,1);
B=[c;A];
L=[B,d];                                          %构造的lestie矩阵
[V,d]=eig(L);                                     %求特征根与特征向量
p=d(42,42);                                       %特征根
Q=-V(:,42);                                       %对应的正特征向量
for i=0:49
    D=L^i*N0;                                     %第i年女性人口分布
    E(i+1,1)=sum(D)/p                             %第i年总人口(2001为第0年)
    for j=0:90                                    %大于90岁的按90岁算
        F(j+1,1)=j*D(j+1,1)/p;
        T(j+1,1)=exp(-b1(1,j+1));                 
    end
    Y(i+1)=sum(F)/E(i+1,1);                       %平均年龄
end
Y                                                 %输出01-50年平均年龄矩阵
T=0;
s=0;
 for i=0:90                                      %大于90岁的按90岁算
        
     T=T+exp(b1(1,j+1)-1);                        %求平均寿命,不随年份而变化
 end
 T
 W=Y/T;                                           %社会老龄化指数
% x=2001:2050;
% W1=compare(1.6);
% W2=compare(1.8);
% W3=compare(2.0);
% W4=compare(2.2);
% plot(x,W1,'-r')
% hold on
% plot(x,W2,'-G')
% plot(x,W3,'-B')
% plot(x,W4,'-Y')
% title('2001年到2050年全国老龄化变化趋势')
% xlabel('时间')
% ylabel('全国总人口')

        对函数进行调用:

x=2001:2050;
W1=compare(1.5); 
W2=compare(2.0);
W3=compare(2.5);
W4=compare(3.0);
plot(x,W1,'-r');
hold on
plot(x,W2,'-G');
plot(x,W3,'-B');
plot(x,W4,'-Y');
title('2001年到2050年全国老龄化变化趋势');
xlabel('时间');
ylabel('老龄化指数');

  • 6
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
人口预测是**利用历史数据和统计模型来估计未来人口数量的过程**。Python作为一种流行的编程语言,在数据分析和机器学习领域有着广泛的应用,因此也被用于进行人口预测。 以下是使用Python进行人口预测的一般步骤: 1. **环境搭建**:需要准备Python环境,通常选择适合的Python版本并安装必要的库,如Jupyter Notebook、PyTorch等。 2. **数据收集**:收集历史人口数据,这些数据可能包括过去的人口总数、出生率、死亡率、迁移率等。 3. **数据处理**:对收集到的数据进行清洗和预处理,以便于后续分析。这可能包括处理缺失值、异常值、数据标准化等。 4. **模型选择**:选择合适的统计模型或机器学习模型来进行预测。常见的模型有ARIMA、线性回归、神经网络等。 5. **模型训练**:使用历史数据训练选定的模型,调整模型参数以获得最佳拟合效果。 6. **模型评估**:通过测试数据集评估模型的预测性能,确保模型具有良好的泛化能力。 7. **预测未来**:使用训练好的模型对未来的人口进行预测,并分析预测结果。 8. **结果展示**:将预测结果以图表或报告的形式展示出来,以便他人理解和使用。 在实际应用中,可能会根据具体情况调整上述步骤。例如,如果数据量较大或者需要进行复杂的时间序列分析,可能需要使用更高级的技术,如深度学习模型。此外,为了提高预测的准确性,可能需要结合多种不同的模型和技术。 总的来说,在进行人口预测时,还需要考虑诸如政策变化、经济发展、自然灾害等因素,这些都可能对人口增长产生影响。因此,预测结果应当作为一个参考,而不是绝对准确的预测

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值