技术文章和通讯

拟合和外推美国人口普查数据

克里夫·莫尔,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年,情节就会缩小。

120年的人口普查数据。让我们再推测七年。

120年的人口普查数据。让我们再推断七年。

这款应用的下拉菜单提供了七种模式:

人口普查数据
多项式
pchip
样条
指数
物流
龚珀兹

四十年前,我们只有多项式。

目标值

美国人口普查局网站提供了一个动态的持续运行的人口时钟。这是美国东部时间2017年4月1日人口普查日中午拍摄的快照。这是捕获该年普查值的指定时间。

2017年4月1日的人口时钟。

2017年4月1日的人口时钟。

因此,推断2017年人口普查数据的目标值为3247.9万。

使用多项式

多项式喜欢摆动。受限于匹配特定区间内的数据,它们在这个区间之外就会变得疯狂。在这个实验中,有12个数据点。的censusapp让多项式的次数在0到11之间变化。次数小于11的多项式以最小二乘的方式近似数据。11次多项式可以精确地插值数据。随着程度的增加,数据的近似值变得更加准确,但2010年以后(或1900年以前)的行为变得更加暴力。这是2度和7 9 11度,叠加在一个图上。

次数大于2的多项式不适合外推。

次数大于2的多项式不适合外推。

二次拟合表现最好。在2017年的评估中,它比目标少了750万,但它没有预测到人口普查局观察到的增长速度下降。(当然,我们没有理由相信美国人口会像二次多项式那样随时间增长。)

11次的插值多项式甚至在2010年之前就试图逃避,在2014年底变成负的。

用样条进行外推

MATLAB有两个分段三次插值多项式:样条而且pchip.经典的样条光滑是因为它有两个连续的导数。它的竞争对手,pchip,牺牲了连续二阶导数,以保持形状和避免超调。这两个多项式都不是用来推断的,但我们还是要用它们。

它们在间隔之后的行为是由它们的最终条件决定的。经典的样条使用所谓的not-a-knot条件。它实际上是最后两个子区间中的一个立方。该立方也用于端点以外的外推。pchip仅使用最后三个数据点来创建一个不同的形状保持立方,以便在最后一个子区间及之后使用。

让我们放大样条而且pchip

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年的推算结果。

指数模型的外推超过200年。

指数模型的外推超过200年。

到那时,纯指数模式的人口将达到50亿,而且增长速度越来越快。我认为这是不合理的。

在Gompertz拟合中\(\alpha\)的值被证明是4309.6,因此人口将被限制在43亿。但从现在起200年后,它才达到15亿。再一次,不太可能。

逻辑拟合结果显示\(\alpha\)的值为756.4,因此预测的美国人口将在未来200年里翻一番多一点。尽管人口普查局(Census Bureau)观察到我们的增长速度已经放缓,但我们甚至还没有达到最终人口上限的一半。

我让你来判断这个预测。

发布于2017 - 93130v00

查看相关功能的文章

Baidu
map