拟合和外推美国人口普查数据
克里夫·莫尔,MathWorks
“美国人口增长速度降至1937年以来的最低水平。”这纽约时报标题促使我重新审视一个老问题:拟合和推断人口普查数据。在这个过程中,我添加了两个非线性拟合,即logistic曲线和双指数Gompertz模型。
该实验比MATLAB更古老®.一开始只是一个练习数学计算的计算机方法“,这本书由福赛斯、马尔科姆和莫勒合著,出版于40年前。那时候我们用的是Fortran。自本书出版以来,数据集每十年更新一次。如今,MATLAB图形使得改变参数和查看结果变得更加容易,但基本的数学原理仍然没有改变:
*通过外推数据来预测未来,使用哪怕是中等程度的多项式也是一件有风险的事情。
著名的纽约洋基队接球手和崭露头角的计算科学家约吉·贝拉曾经说过:“很难做出预测,尤其是对未来的预测。”我们将使用多项式,样条函数,指数函数,以及克利夫实验室的人口普查应用来实现这一点。
的数据
我们实验的数据来自1900年到2010年美国每十年一次的人口普查(数字以百万为单位):
1900 75.995 1910 91.972 1920 105.711 1930 123.203 1940 131.669 1950 150.697 1960 179.323 1970 203.212 1980 226.505 1990 249.633 2000 281.422 2010 308.746
任务是推断出2010年以后的人口规模。使用censusapp
在美国,让我们看看仅从2010年到2017年这7年的外推与人口普查局(Census Bureau)的模型是否相符。在你继续读下去之前,暂停一下,自己猜一猜。
人口普查应用
这是开场画面censusapp
.加号和减号按钮更改标题中的外推年份。如果你越过2030年,情节就会缩小。
这款应用的下拉菜单提供了七种模式:
人口普查数据
多项式
pchip
样条
指数
物流
龚珀兹
四十年前,我们只有多项式。
目标值
美国人口普查局网站提供了一个动态的持续运行的人口时钟。这是美国东部时间2017年4月1日人口普查日中午拍摄的快照。这是捕获该年普查值的指定时间。
因此,推断2017年人口普查数据的目标值为3247.9万。
使用多项式
多项式喜欢摆动。受限于匹配特定区间内的数据,它们在这个区间之外就会变得疯狂。在这个实验中,有12个数据点。的censusapp
让多项式的次数在0到11之间变化。次数小于11的多项式以最小二乘的方式近似数据。11次多项式可以精确地插值数据。随着程度的增加,数据的近似值变得更加准确,但2010年以后(或1900年以前)的行为变得更加暴力。这是2度和7 9 11度,叠加在一个图上。
二次拟合表现最好。在2017年的评估中,它比目标少了750万,但它没有预测到人口普查局观察到的增长速度下降。(当然,我们没有理由相信美国人口会像二次多项式那样随时间增长。)
11次的插值多项式甚至在2010年之前就试图逃避,在2014年底变成负的。
用样条进行外推
MATLAB有两个分段三次插值多项式:样条
而且pchip
.经典的样条
光滑是因为它有两个连续的导数。它的竞争对手,pchip
,牺牲了连续二阶导数,以保持形状和避免超调。这两个多项式都不是用来推断的,但我们还是要用它们。
它们在间隔之后的行为是由它们的最终条件决定的。经典的样条
使用所谓的not-a-knot条件。它实际上是最后两个子区间中的一个立方。该立方也用于端点以外的外推。pchip
仅使用最后三个数据点来创建一个不同的形状保持立方,以便在最后一个子区间及之后使用。
让我们放大样条
而且pchip
.
与美国人口普查局(Census Bureau)一样,两家机构都预测2010年以后的增长率将会下降。但样条
描绘了一幅阴郁的画面。2017年的3.146亿比人口时钟值低1000万,接近最大值。另一方面,pchip
幸运的是,它2017年的价值为3.251亿,与人口时钟值相差不到30万。展望未来,pchip
在2047年达到3.602亿的最大值。这是一个值得深思的预测。
三个指数
正如我所说,没有充分的理由用多项式来模拟人口增长,无论是否是分段的。但因为我们可以预期增长率与人口规模成正比,所以有很好的理由使用指数。
\[p(t) \approx \alpha\:\text{e}^{bt}\]
许多作者提出了修改该模型的方法,以避免其无限增长。我把其中两个加到censusapp
.一个是逻辑模型。
\[p(t) \approx \alpha/(1+b\:\text{e}^{-ct})\]
另一种是冈珀兹双指数模型,以19岁的本杰明·冈珀兹命名th上世纪自学成才的英国数学家和天文学家。
\ [p (t) \大约\α\:文本\ {e} ^ {- b \: \文本{e} ^ {- ct}} \]
在这两个模型中,增长都是有限的,因为当\(t\)趋于无穷大时,近似项趋于\(\alpha\)。
在所有三个指数模型中,参数\(\alpha\), \(b\),可能还有\(c\),都是非线性的。原则上,我可以用lsqcurvefit
在二维或三维空间中寻找与人口普查数据相匹配的最小二乘。但我还有另一种选择:取一个或两个对数,得到a可分离最小二乘模型中,最多有一个参数,\(\alpha\),非线性出现。
对于指数模型,取一个对数。
\[\text{log}\:p \approx \text{log}\:\alpha + bt\]
用一条直线拟合数据的对数,然后对结果取指数。不需要搜索。
对于逻辑模型,取一个对数。
\[{日志}\ \文本:文本α/ p - 1)(\ \大约\{日志}\:b-ct \]
对于\(\alpha\)的任何值,参数log \(b\)和\(c\)线性显示,不需要搜索就可以找到。因此,使用一维最小化器来搜索\(\alpha\)。我可以用fminbnd
或者说是教科书版本,fmintx
,从基于MATLAB的数值方法.
对于Gompertz模型,取两个对数。
\[{日志}\ \文本:文本{日志}\ \:\α/ p{日志}\ \大约\文本:b-ct \]
同样,对最小值\(\alpha\)进行一维搜索,每一步求解log \(b\)和\(c\)。
我应该指出,取对数改变了拟合准则。我要对对数数据进行最小二乘拟合,而不是对实际数据。
结果
以下是三种结果,从200多年到2250年的推算结果。
到那时,纯指数模式的人口将达到50亿,而且增长速度越来越快。我认为这是不合理的。
在Gompertz拟合中\(\alpha\)的值被证明是4309.6,因此人口将被限制在43亿。但从现在起200年后,它才达到15亿。再一次,不太可能。
逻辑拟合结果显示\(\alpha\)的值为756.4,因此预测的美国人口将在未来200年里翻一番多一点。尽管人口普查局(Census Bureau)观察到我们的增长速度已经放缓,但我们甚至还没有达到最终人口上限的一半。
我让你来判断这个预测。
发布于2017 - 93130v00