拟合和推断美国人口普查数据
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年,情节就会缩小。
这款应用的下拉菜单提供了七种模式:
人口普查数据
多项式
pchip
样条
指数
物流
龚珀兹
40年前,我们只有多项式。
目标值
美国人口普查局网站提供了一个持续运行的动态人口时钟。这是美国东部时间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
.
和人口普查局的预测一样,这两家机构都预测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年的推断得出的三种结果。
到那时,纯指数模型将达到50亿,并且增长速度越来越快。我认为这是不合理的。
\(\alpha\)在Gompertz拟合中的值为4309.6,因此人口将被限制在43亿。但从现在开始的200年里,它只达到了15亿。再一次,不太可能。
逻辑拟合中的\(\alpha\)值为756.4,因此预测的美国人口将在未来200年内翻一番多一点。尽管人口普查局观察到我们的增长速度已经放缓,但我们甚至还没有达到最终人口极限的一半。
我让你来判断这个预言。
发布于2017年- 93130v00