经常看到网上讨论中国什么时候能赶超美国的争论。且不说这个问题有多无聊,讨论这个问题的人也很无聊。看了半天,也没看出个所以然。还不如针对这个问题收集数据,做做分析。
本文主要收集GDP相关数据。这个指标现在争议很大,不能够反映国民经济的很多方面。但就统计数据的质量来说,GDP比较全面,而且容易获得。这里选取世界银行的统计数据,中国和美国2005年到2014年十年间的GDP数据如下:
年份 | 美国 | 中国 |
2005 | 13.09 | 2.257 |
2006 | 13.86 | 2.713 |
2007 | 14.48 | 3.494 |
2008 | 14.72 | 4.522 |
2009 | 14.42 | 4.99 |
2010 | 14.96 | 5.931 |
2011 | 15.52 | 7.322 |
2012 | 16.16 | 8.229 |
2013 | 16.77 | 9.24 |
2014 | 17.42 | 10.36 |
美国的GDP线图如下:
中国的GDP线图如下:
两张图基本上都趋近直线,中间会有一些拐点,所以先用一次线性回归来拟合:
china_z1=np.polyfit(china_years, china_gdps, 1)
china_p1=np.poly1d(china_z1)
>>> print china_p1
0.919 x + 0.8514
us_z1=np.polyfit(china_years, us_gdps, 1)
us_p1=np.poly1d(us_z1)
>>> print us_p1
0.4284 x + 12.78
解方程得到
>>> (12.78-0.8514)/(0.919-0.4284)
24.31430900937627
计算年限:
>>> 2005-1+25
2029
所以按照中国目前的增速,至少要到2029年GDP才会超过美国。考虑到中国现在GDP增速下滑等等不确定因素,这个过程还可能要晚一些。
定义误差函数:
>>> def error(f, x, y):
… return scipy.sum((f(x) – y)**2)
…
计算一次限行误差如何:
>>> china_f1=scipy.poly1d(china_z1)
>>> china_f1(25)
23.825945454545447
>>> us_f1=scipy.poly1d(us_z1)
>>> us_f1(25)
23.493090909090906
>>> print error(china_f1, china_years, china_gdps)
0.764862072727
>>> print error(us_f1, china_years, us_gdps)
0.905429090909
>>>
这个误差还是比较小的。但实际上上面两幅图都不是完美的直线,二是有向上的曲度,所以可以考虑使用二次方程建模。具体参见这里