预测方法
预测类算法就是一种通过学习历史数据来预测未来事件或趋势的方法。它会根据过去的经验和规律,根据已知的数据来做出预测,帮助我们预测未来可能会发生的事情。这里记录几种在数学建模里较为常见且泛用性较高的算法。
先列出一些常见数据的类型:
横截面数据(Cross-Sectional Data):是在某一特定时间点上收集的数据。它包括不同个体或单位在同一时间点上的观察结果。例如,在一项调查中,收集了不同家庭在2019年的收入数据,这些数据就构成了横截面数据。通常用于描述群体特征、进行比较分析等。可以采用多元回归分析。
时间序列数据(Time Series Data):是按照时间顺序记录的数据。它包括同一变量在不同时间点上的观察结果,可以用来分析随时间变化的趋势和模式。例如,某公司每个季度的销售额数据就构成了时间序列数据。可以采用时间序列分析。
面板数据(Panel Data):结合了横截面数据和时间序列数据的特点,包括了多个个体(横截面)在多个时间点上的观察结果。面板数据可用于研究个体差异以及随时间的变化。例如,对不同地区居民的收入情况进行跟踪调查,即包含了不同个体在不同时间点上的数据。很少见,遇到了再说。
回归分析方法
回归分析是一种用来预测或解释变量之间关系的统计方法。它的主要思想是通过观察已知的数据来建立一个数学模型,然后利用这个模型来预测未来的结果或者解释变量之间的关系,根据现有的数据来预测未来的结果。对于决策和规划都非常有帮助。
回归分析应该识别重要变量,判断相关性的方向,并且估计权重(回归系数)。
首先是简单线性回归。假设我们有两个变量,一个是用来帮助预测的变量X(称为自变量),另一个是我们想要预测的变量Y(称为因变量)。比如,我们想要预测一个人的体重,可能会用身高作为帮助预测的变量。简单线性回归就是要找到一个直线方程,通过自变量(比如身高)来预测因变量(比如体重)。这个直线方程可以告诉我们,随着自变量的变化,因变量会怎么变化。
简单线性回归虽然可以用来描述变量之间的相关性,但却不能证明因果性。两个变量之间的相关性并不一定意味着它们之间存在因果关系,也就是说,一个变量的变化是否会导致另一个变量的变化,需要更进一步的研究来确定。举例来说,假设我们发现一个城市的人均收入和房价呈现正相关,即人均收入越高,该城市的房价也越高。这种相关性看起来很有道理,但我们不能因此就断定高收入导致了高房价,或者是高房价影响了人们的收入水平。实际上还可能存在其他因素,比如地理位置、人口密度等,也可能影响了这两个变量之间的关系。
让我们来举一个更极端的例子。假设我们观察到某地区消防队员人数与火灾数量之间存在正相关关系,也就是说,我们得出的结论是随着消防队员人数的增加,火灾的数量也在增加。因此我们应该减少消防人员的数量,这样火灾就会越来越少了!很显然,这个结论存在相关性,但没有因果性,我们不能因此得出消防队员人数的增加导致了火灾数量的增加的结论。实际上,更可能的解释是,这种相关性是由于第三个隐藏变量引起的,比如人口密度、城市规模等因素。另外,也可能是由于数据的选择或者测量方法等问题造成了这种看似荒谬的相关性。
因此,我们更应该进行多元回归分析,在简单线性回归的基础上考虑了更多的自变量。比如,我们想预测一个人的收入,不仅仅会考虑教育水平,还会考虑工作经验、所在地区等因素。多元回归可以帮助我们建立一个更复杂的模型,来解释所有这些自变量对因变量的影响。
多元回归分析中,存在内生性的问题。具体来说,当解释变量与误差项之间存在内生性时,解释变量不再是外生的,即它们不再是独立于误差项的。这意味着解释变量的变化可能是由于未观测到的因素或其他内部因素引起的,而不仅仅是外部因素的结果。内生性问题可能导致统计模型中的参数估计不一致,使得我们无法准确地推断解释变量对因变量的真实影响。它还可能模糊或混淆解释变量与因变量之间的因果关系,使得我们难以确定哪个是因果变量,哪个是结果变量。
核心解释变量通常是研究中我们最感兴趣的变量,也是对因果关系进行推断的变量。在一个统计模型中,核心解释变量通常是被认为对因变量有直接影响的变量。控制变量则是指在研究中被引入并控制在统计模型中的其他变量。它们被用来减少内生性问题的影响,以确保核心解释变量与因变量之间的关系是被准确估计的。通过引入控制变量,可以尽可能地排除其他可能对因变量产生影响的变量,从而更准确地衡量核心解释变量的影响。应保证核心解释变量不存在内生性。
进行回归分析,代码如下:
1 | % 读取 Excel 文件数据 |
或者使用stata软件,导入后使用:
1 | clear |
时间序列分析
时间序列分析是一种用来研究随着时间推移而变化的数据的方法。这种数据可能是按照时间顺序记录下来的,比如每天、每月或每年的数据。时间序列分析的目标是揭示数据中存在的模式、趋势和周期性,并且利用这些信息做出预测或者推断。时间序列分析根据时间和数值性质的不同,可以分为时期序列和时点序列。时期序列反映现象在一定时期内发展的结果,而时点序列反映现象在一定时点上的瞬间水平。时期序列可加,时点序列不可加。通常情况下,时间序列分析可以帮助我们回答以下问题:
趋势:数据是否存在逐渐增加或减少的趋势?这种趋势是线性的还是非线性的?
季节性:数据是否存在重复出现的季节性模式?比如一年中特定月份或季度的销售数据是否有规律性的波动?
周期性:数据是否存在长期的循环或者周期性变化?比如经济周期、商业周期等。
随机性:数据中是否存在随机的、不规律的波动?
为了回答这些问题,时间序列分析会使用各种统计方法和模型,最常用的是季节分解,指数平滑方法和ARIMA模型。
季节分解(Seasonal Decomposition):季节分解是指将时间序列数据分解为趋势、季节性和残差三个部分的过程。趋势表示长期变化趋势,季节性表示周期性变化,残差则是除去趋势和季节性之后的随机波动部分。这种分解有助于我们更好地理解数据的结构和规律,以便进行预测和分析。
指数平滑方法(Exponential Smoothing Method):指数平滑方法是一种常用的预测方法,适用于没有明显趋势和季节性的时间序列数据。该方法通过对历史数据赋予不同权重,来进行未来数值的预测。简单指数平滑、双指数平滑和三指数平滑是常见的指数平滑方法,它们在对历史数据赋予权重时有不同的考虑因素,适用于不同类型的数据。
ARIMA模型(Autoregressive Integrated Moving Average Model):ARIMA模型是一种经典的时间序列分析和预测模型,适用于具有趋势和季节性的时间序列数据。ARIMA模型包括自回归(AR)、差分(I)和移动平均(MA)三个部分,分别代表了数据的自相关、趋势和残差成分。通过对这三个部分的组合,ARIMA模型可以对未来的数值进行预测。
对于时间序列分析,我们将使用季节ARIMA模型(SARIMA),这是表述最全面的时间序列预测模型之一,其他的模型都可以由它简化变型后得到。其建模思想是,将预测对象随时间推移而形成的数据序列看作一个随机序列,时间序列是一组依赖时间*的随机变量,构成该时间序列的单个序列值虽然具有不确定性,但整个序列的变化却是有一定的规律性,可以用数学模型近似描述。这组随机变量所具有的依存关系或自相关性表征了预测对象发展的延续性,而一旦这种自相关性被相应的数学模型描述出来,就可以从时间序列的过去值预测其未来值,通过SARIMA模型可以消除趋势性和季节性,转化为平稳时间序列进行建模。
受限于水平,具体过程完全依赖于spss进行处理,请移步帮助文档。
此处内嵌网页,便于查阅。
这个方法在预测中短期的变化时效果较好,长期的预测可能会遇到外界环境变化的问题。
灰色预测模型
存在三种系统,白色、黑色和灰色系统。它们之间的区别主要在于数据是否具有可预测性,以及对系统内部机制的了解程度。
白色系统(White System):白色系统指的是没有相关性的随机过程或时间序列,其各个时刻的观测值彼此独立且方差相等,因此无法通过历史数据来预测未来的数据。白噪声就是一种典型的白色系统,其在时间轴上呈现为完全随机、无法预测的波动。
黑色系统(Black System):黑色系统指的是具有确定性规律的时间序列,其内部机制已经被充分理解,可以通过历史数据来预测未来的数据。黑色系统中的趋势和周期性成分都是明显的,由此可以建立相应的数学模型。例如,股票市场中的价格波动就属于一种黑色系统。
灰色系统(Grey System):灰色系统指的是既不是白色系统也不是黑色系统的时间序列,其内部机制尚未被完全理解,但对其进行预测和分析仍然有一定的可行性。灰色系统中的趋势和周期性成分相对不太明显,其模型参数通常需要通过数据拟合来确定。
而灰色预测模型是一种对含有不确定因素的系统进行预测的方法。灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。在处理较少的特征值数据时,不需要数据的样本空间足够大,就可以解决历史数据少,序列完整性低,可靠性低的问题,可以生成得到规律较强的生成序列。
我们根据数据量的不同,选择使用传统的GM(1,1)模型、新信息GM(1,1)模型还是新陈代谢GM(1,1)模型进行预测,然后比较三种模型对试验数据的预测结果。
主函数
仅作为例子,代码如下:
1 | clear;clc |
相关模型的代码实现
最后给出传统的GM(1,1)模型、新信息GM(1,1)模型还是新陈代谢GM(1,1)模型的代码。
- 传统的GM(1,1)模型:
- x0:要预测的原始数据
- predict_num: 向后预测的期数
- result:预测值
- x0_hat:对原始数据的拟合值
- relative_residuals: 对模型进行评价时计算得到的相对残差
- eta: 对模型进行评价时计算得到的级比偏差
注意,实际调用时该函数时不一定输出全部结果,就像corrcoef函数一样~,可以只输出相关系数矩阵,也可以附带输出p值矩阵
代码如下:
1 | function [result, x0_hat, relative_residuals, eta] = gm11(x0, predict_num) |
- 新信息GM(1,1)模型,代码如下:
1 | function [result] = new_gm11(x0, predict_num) |
- 新陈代谢GM(1,1)模型
1 | function [result] = metabolism_gm11(x0, predict_num) |
以上。