- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
【实验】预测美国人口
3.2.1预测美国人口
应用该模型的逻辑:根据Malthus人口模型理论,指数增长的数据满足模型关系:
注意,t-t0只是表示相对时间,取t0=0也是一样的:
通过数据拟合出唯一参数r的最优估计,则得到可适用于数据的具体模型,从而可以用于预测和决策。
以美国人口数据为例,以10年为间隔,可获得图3-3。
3-3美国1790年-1930年人口数据
首先,根据数据给出散点图。MATLAB代码:
【例s3_1】:
%美国1790-1930年人口数据(10年为间隔)
P=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,...
38.6,50.2,62.9,76.0,92.0,106.5,123.2];
year=1790:10:1930;
plot(year,P,bo)
3-4美国1790年-1930年人口散点图
这里所运用的处理技巧是对数据做变换,以简化函数关系。对于指数增长的数据,可以通过取对数法,转化为线性函数关系。
做一次对数变换,看下效果如何,MATLAB代码如下。
【例s3_1】:
figure
plot(year,log(P),bo)
3-5对数变换之后的散点图
可见,取对数后大致是“直线”关系。下面对数据做如下变换:
注:将年份转化为第几年,可避免回归系数过小。
利用MATLAB按式(3.5)对数据做变换,再用自带函数fitlm()拟合线性关系,MATLAB代码如下。
【例s3_1】:
%对数据做变换,拟合线性关系
X=year-1789;
y=log(P);
mdl=fitlm(X,y)
3-6运行结果
发现拟合效果非常好(拟合优度R2=0.988),就得到线性模型:
代换回原来的变量:
lnP=0.025215*(year-1789)+1.4962
再变形得到想要的具体模型:
下面来看预测效果:
【例s3_1】:
%用匿名函数方式来定义预测函数
f=@(t)exp(0.025215*(t-1789)+1.4962);
Pm=f(year);%计算预测值
errs=100*abs(Pm-P)./P;
result=array2table([year;P;Pm;errs],VariableNames,{Year,P,Pm,Error})
3-7运行结果
接下来考察预测结果如何。利用如下代码可以直观看到真实值与预测值的接近程度。
【例s3_1】:
figure
plot(year,P,bo,year,Pm,r*)
legend(真实值,预测值)
3-8运行结果
可见,指数增长模型在早期的预测效果还是挺好的,后期开始展现爆炸式增长趋势。
文档评论(0)