导航菜单
首页 >  考研数学人数  > 灰色预测法及2023考研报考人数预测(附matlab代码)

灰色预测法及2023考研报考人数预测(附matlab代码)

目录

一、灰色预测概念

二、GM(1,1)模型

模型的使用条件

1、建立模型的数据不应该少于4组

2、已知数据的检验处理

三、回归分析

四、灰色预测模型的建立

五、模型的检验

残差检验

级比偏差值检验

六、2023考研人数预测

七、matlab代码

一、灰色预测概念

1、灰色预测法是一种对含有不确定因素且具有少量数据的系统进行预测的方法。

2、灰色系统。白色系统是指,在一个系统中,所有内部特征是全部已知的。而黑色系统与之相反,是指在一个系统中,所有内部特征是全部未知的,只能根据外界的情况进行预测。灰色系统是介于白色系统和黑色系统之间的一种系统。在已知部分内容的条件下进行预测。

3、灰色预测就是对含有已知和未知信息的系统进行预测,寻找数据变动规律,生成有较强规矩性的序列,再建立相应的微分方程模型,来对事物发展进行预测。

二、GM(1,1)模型 模型的使用条件 1、建立模型的数据不应该少于4组

      虽然灰色预测模型是主要面对少量数据的预测,但是也不应该4组,从而确保计算数据的准确性。

2、已知数据的检验处理

设原始数据为:

{x^{(0)}} = ({x^{(0)}}(1),{x^{(0)}}(2), \cdots ,{x^{(0)}}(n)) 

计算数列级比:

\lambda (k) = \frac{​{​{x^{(0)}}(k - 1)}}{​{​{x^{(0)}}(k)}},k = 2,3, \cdots ,n

所有数据应在以下范围内,才可以建立GM(1,1)模型进行灰色预测

X = ({e^{\frac{​{ - 2}}{​{n + 1}}}},{e^{\frac{2}{​{n + 1}}}})

如果数据不在范围内,可用平移法调整数据:

{y^{(0)}}(k) = {x^{(0)}}(k) + c,k = 1,2, \cdots ,n

调整之后使得数据在所规定范围内。

三、回归分析

       回归分析是建立灰色预测模型必要的内容,便于读者理解,这里拿出一个标题,具体说明回归分析在灰色预测模型的应用及其原理。(使用处已经在下文刷黄提醒读者)

{x^{(0)}} = ({x^{(0)}}(1),{x^{(0)}}(2), \cdots ,{x^{(0)}}(n))为原始数列

一次累加生成数列:{x^{(1)}} = ({x^{(1)}}(1),{x^{(1)}}(2), \cdots ,{x^{(1)}}(n))

其中,{x^{(1)}}(x) = \sum\limits_{i = 1}^k {​{x^{(0)}}(i),k = 1,2, \cdots ,n}

定义{x^{(1)}}的灰导数为:

d(x) = {x^{(0)}}(k) = {x^{(1)}}(k) - {x^{(1)}}(k - 1)

{z^{(1)}}为数列{x^{(1)}}的邻值生成数列:

{z^{(1)}}(k) = \alpha {x^{(1)}}(k) + (1 - \alpha ){x^{(1)}}(k - 1)

其中,\alpha一般取0.5,{z^{(1)}}(k)为白化背景值,a为发展系数,b为灰作用量

定义GM(1,1)的灰微分方程为

{x^{(0)}}(k) + a{z^{(1)}}(k) = b

 从而可得;

\left\{ {\begin{array}{*{20}{c}} {​{x^{(0)}}(2) + a{z^{(1)}}(2) = b}\\ \begin{array}{l} {x^{(0)}}(3) + a{z^{(1)}}(3) = b\\ \cdots \cdots \end{array}\\ {​{x^{(0)}}(n) + a{z^{(1)}}(n) = b} \end{array}} \right.

利用矩阵向量表示:

u = \left[ {\begin{array}{*{20}{c}} a\\ b \end{array}} \right]Y = \left[ {\begin{array}{*{20}{c}} {​{x^{(0)}}(2)}\\ \begin{array}{l} {x^{(0)}}(3)\\ \cdots \end{array}\\ {​{x^{(0)}}(n)} \end{array}} \right]B = \left[ {\begin{array}{*{20}{c}} { - {z^{(1)}}(2)}\\ \begin{array}{l} - {z^{(1)}}(3)\\ \cdots \end{array}\\ { - {z^{(1)}}(n)} \end{array}} \right]

由此可得矩阵表达式:Y=Bu

利用最小二乘法求得a,b估计值:

\hat u = \left[ {\begin{array}{*{20}{c}} {\hat a}\\ {\hat b} \end{array}} \right] = {({B^T}B)^{ - 1}}{B^T}Y

       对应GM(1,1)的灰微分方程,如果灰导数{x^{(0)}}(k)连续,可将其视为t的函数,构造白化微分方程:\frac{​{d{x^{(1)}}(t)}}{​{dt}} + a{x^{(1)}}(t) = b

四、灰色预测模型的建立

设满足检验的数据为:

{x^{(0)}} = ({x^{(0)}}(1),{x^{(0)}}(2), \cdots ,{x^{(0)}}(n))

建立GM(1,1)模型:

{x^{(0)}}(k) + a{z^{(1)}}(k) = b,(该式建立已在回归分析中说明)

使用回归分析求得a,b的值得到白化模型:

\frac{​{d{x^{(1)}}(t)}}{​{dt}} + a{x^{(1)}}(t) = b

于是可以得到预测值:{​{\hat x}^{(1)}}(k + 1) = ({x^{(0)}}(1) - \frac{b}{a}){e^{ - ak}} + \frac{b}{a},k = 1,2, \cdots ,n

从而可得:{​{\hat x}^{(0)}}(k) = {​{\hat x}^{(1)}}(k) - {​{\hat x}^{(1)}}(k - 1) = (1 - {e^a})({x^{(0)}}(1) - \frac{b}{a}){e^{ - a(k - 1)}},k = 2,3 \cdots ,n 由此,我们可以通过增加k的值,进行后面数据的预测。

五、模型的检验 残差检验

残差检验公式:

\varepsilon (k) = \frac{​{​{x^{(0)}}(k) - {​{\hat x}^{(0)}}(k)}}{​{​{x^{(0)}}(k)}},k = 1,2, \cdots n

      如果对所有的\left| {\varepsilon (k)} \right| 0.1,则认为达到比较高的要求,若对于\left| {\varepsilon (k)} \right| 0.2,则说明数据达到一般要求。

级比偏差值检验

级比偏差值计算公式:

\rho (k) = 1 - \frac{​{1 - 0.5a}}{​{1 + 0.5a}}\lambda (k)

如果对所有的\left| {\rho (k)} \right| 0.1,则认为达到比较高的要求,若对于\left| {\rho (k)} \right| 0.2,则说明数据达到一般要求。

六、2023考研人数预测

初始数据:

将2015-2022年报考人数数据带入matlab代码可得:

 

  由matlab运行截图可知

a = - 0.15784,b = 136.23

预测值显示出从2015-2023灰色模型预测报考人数结果,从而可以得到2023预测考研报考人数为530.6万

通过残差检验和级比偏差检验可知,\left| {\varepsilon (k)} \right|,\left| {\rho (k)} \right|均小于0.1,说明模型计算结果可靠性较高,模型成立。

将2015-2022年录取人数数据带入matlab代码可得:

 由matlab运行截图可知

a = - 0.10382,b = 53.287

预测值显示出从2015-2023灰色模型预测录取人数结果,从而可以得到2023预测考研录取人数为129.05万人

通过残差检验和级比偏差检验可知,\left| {\varepsilon (k)} \right|,\left| {\rho (k)} \right|中,仅有\left| {\rho (k)} \right|有一个值大于0.1,小于0.2,其他值均小于0.1,说明模型计算结果可靠性较高,模型成立。

从而我们可以计算出预测2023年考研录取率为:P = \frac{​{129.05}}{​{530.6}} \approx 24.3\%

七、matlab代码 cleary=[2015,2016,2017,2018,2019,2020,2021,2022];% x=[164.9,177,201,238,290,341,377,457];%2015-2022年考研报名人数x=[57.06,58.98,72.22,76.25,81.13,99.05,111.04,110.7]; %2015-2022年录取人数[m,n]=size(x);%数据检验for i=2:nPI(i)=x(i-1)/x(i);endJ=length(find(PI>exp(-2/(n+1))&PI

相关推荐: