技术文章及通讯

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

Cleve Moler, 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年的外推是如何与人口普查局的模型相匹配的。在你继续读下去之前,停下来自己猜一猜。

人口普查应用程序

这是censusapp.加减按钮改变标题中的推断年份。如果时间超过2030年,情节就会缩小。

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

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

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

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

40年前,我们只有多项式。

目标值

美国人口普查局网站提供了一个持续运行的动态人口时钟。这是美国东部时间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碰巧产生了一个合理的推断;样条没有。

和人口普查局的预测一样,这两家机构都预测2010年以后人口增长率将会下降。但样条描绘了一幅阴郁的画面。2017年的3.146亿比人口时钟值低了1000万,接近最大值。另一方面,pchip幸运的话,其2017年价值3.251亿,与人口时钟值相差不到30万。展望未来,pchip在2047年达到最大的3.602亿。这是一个值得深思的预测。

三个指数

正如我所说,没有理由用多项式来模拟人口增长,分段与否。但是因为我们可以预期增长率与人口规模成正比,所以有很好的理由使用指数。

\[p(t) \约\alpha\:\text{e}^{bt}\]

许多作者提出了修改该模型的方法,以避免其无限制增长。我加了两个这个到censusapp.一个是逻辑模型。

\[p(t) \约\alpha/(1+b\:\text{e}^{-ct})\]

另一种是Gompertz双指数模型,以19岁的Benjamin Gompertz命名th世纪自学成才的英国数学家和天文学家。

\ [p (t) \大约\α\:文本\ {e} ^ {- b \: \文本{e} ^ {- ct}} \]

在这两个模型中,增长都是有限的,因为当\(t\)趋于无穷时,近似项趋于\(\alpha\)。

在这三个指数模型中,参数\(\alpha\), \(b\),可能还有\(c\)都是非线性出现的。原则上,我可以用lsqcurvefit在二维或三维空间中寻找适合人口普查数据的最小二乘。但我有另一种选择:通过取一个或两个对数,我得到a可分离最小二乘模型中,最多只有一个参数\(\alpha\)是非线性出现的。

对于指数模型,取一个对数。

\[\text{log}\:p \约\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亿,并且增长速度越来越快。我认为这是不合理的。

\(\alpha\)在Gompertz拟合中的值为4309.6,因此人口将被限制在43亿。但从现在开始的200年里,它只达到了15亿。再一次,不太可能。

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

我让你来判断这个预言。

发布于2017年- 93130v00

查看相关功能的文章