草庐IT

时间序列分析模型详细讲解

Uncle Tan_ 2023-04-03 原文

时间序列分析

时间序列也称动态序列,是指将某种现象的指标数值按照时间顺序排列而成的数值序列。

时间序列分析大致可分成三大部分,分别是描述过去、分析规律和预测未来。

本文主要包含常用的三种模型:

  • 季节分解
  • 指数平滑模型
  • ARIMA模型

季节分解

时间序列的数值变化规律

数值变化规律代表字母特点
长期变动趋势T统计指标在相当长的一段时间内,受到长期趋势影响因素的影响,表现出持续上升或持续下降的趋势。
季节变动趋势S指由于季节的转变使得指标数值发生周期性变动。一般以月、季、周为时间单位,不能以年作单位。
周期变动规律(循环变动)C循环变动通常以若干年为周期,在曲线图上表现为波浪式的周期变动。最典型的周期案例就是市场经济的商业周期和的整个国家的经济周期。
不规则变动(随机扰动项)I由某些随机因素导致的数值变化,不可预知、没有规律(在回归中又被称为扰动项)。

一个时间序列往往是以上四类变化形式的叠加,四种变动与指标数值最终变动的关系可能是叠加关系,也可能是乘积关系。由于变动组合的不确定性,时间序列的数值变化才那么千变万化。

  • 如果四种变动之间是相互独立的关系,那么叠加模型可以表示为:Y = T + S + C + I
  • 如果四种变动之间存在相互影响关系,那么应该使用乘积模型:Y = T × S × C × T

SPSS对数据预处理

顺序方法步骤
1处理时间序列中的缺失值序列的中间位置:转换 —> 替换;缺失值序列两端:直接删除
2定义时间变量数据 —> 定义日期和时间 —> 在“个案是”中选择合适的格式,并设置好起始时间
3绘制时间序列图(时序图)分析 —> 时间序列预测 —> 序列图(“差异”选项即为进行几阶差分)

SPSS季节性分解

  • 季节性分解

  • 结果解读

  • 绘制分解后的时序图

时间序列分析的具体步骤

  1. 作时间序列图 —> SPSS软件解决
  2. 判断时间序列包含的变动成分
  3. 时间序列分解(有周期性且包含长期趋势、季节变动或循环变动)—> SPSS软件解决
    • 数据具有年内的周期性时才能使用时间序列分解,周期大于一年的不能够进行时间序列分解
  4. 建立时间序列分析模型
  5. 预测未来的指数指标

建立时间序列分析模型

SPSS专家模拟器可以帮助我们寻找最佳的拟合模型(指数平滑模型或ARIMA模型)。

也即这部分如何选择,是由SPSS帮我们判断的。

指数平滑模型

名称英文名称使用条件与之类似的ARIMA模型
简单指数平滑法Simple模型不含趋势和季节成分ARIMA(0,0,1)
(霍特)线性趋势模型linear trend线性趋势、不含季节成分ARIMA(0,2,2)
阻尼趋势模型Damped trend线性趋势逐渐减弱且不含季节成分ARIMA(1,1,2)
简单季节性Simple seasonal含有稳定的季节成分、不含趋势SARIMA(0,1,1)×(0,1,1)s
温特加法模型Winters’ additive含有线性趋势和稳定的季节成分SARIMA(0,1,0)×(0,1,1)s
温特乘法模型Winters’ multiplicative含有线性趋势和不稳定的季节成分不存在

ARIMA模型

模型形式说明
ARIMA模型ARIMA(p,d,q)处理非季节性数据,亦称“差分自回归移动平均模型”
SARIMA模型SARIMA(p,d,q) (P,D,Q)m模型形式前半部分为非季节部分,后半部分为季节部分

ARIMA(p,d,q)模型 —— 差分自回归移动平均模型、SARIMA(Seasonal ARIMA)模型 ARIMA(p,d,q) (P,D,Q)m 前半部分为非季节部分,后半部分为季节部分。

注意:

  • 模型选择:AIC和BIC准则(选小原则)

  • 残差自相关函数(ACF)、残差偏自相关函数(PACF),用来确定残差是否是白噪音

  • Q检验的显著性用于判断残差是否为白噪声:如果显著,则残差为白噪声,说明我们选取的模型能完全识别出时间序列数据的规律,即模型可接受。否则,需要对模型进行修订。

时间序列分析解题步骤(论文写作)

论文写作步骤

  1. 由于数据是完整的(或处理后),且为季度数据,因此可以做出其时间序列图。
  2. 分析图中结果:从图中可以看出,销量数据具有向上的趋势,而且销量数据具有很明显的季节性波动。因此可以考虑使用时间序列分解。因为数据是平稳的,所以可以使用加法的时间序列分解,然后解释一波加法的时间序列分解。
  3. 使用SPSS的专家建模器(可以解释一波专家建模器),SPSS的专家建模器为我们选择出最合适的模型是温特加法模型,然后解释一波温特加法模型,SPSS为我们估计出的估计值也可以写在论文中。
  4. 白噪声检验:写入白噪声的输出图像,以及Q检验的结果(Q检验显著性>0.05即可说明残差值就是白噪声)。
  5. 预测结果:我们考虑了95%的预测水平,在95%的预测水平下,写入SPSS输出的预测结果,95%的可能性落到哪与哪之间。加入预测图,可以使用SPSS输出的,也可以自己将数据处理后使用 分析 – 时间序列预测 – 序列图 作图。
  6. 汇报预测结果好坏:将平稳的R2、R2、标准化BIC放在论文中(平稳的R2、R2越大越好,标准化BIC越小越好)。

例:

如果SPSS选择了温特加法模型,在论文中就可以把温特加法模型的这部分数据写上:

写入白噪声的输出图像,以及Q检验的结果,另外再加上右侧的文字。

实际SPSS操作步骤

  1. 处理缺失值,生成时间变量
  2. 数据预处理(对数据进行描述性统计)
  3. 生成序列图分析
  4. 先使用专家模拟试探(先不去异常值),如果给出了温特斯加性之类的模型,说明时间序列分解的四种变动是叠加关系,之后可以进行季节性分解。
  5. 季节性分解:这时候可以将输出的季节因子在论文中展现,主要是分析一波哪个周期是正的,哪个周期是负的,哪个周期的绝对值最大、最小。
  6. 制作季节性分解序列图
  7. 可以对 季节性调整后序列 进行线性拟合,求出 R2 和SSE,然后去掉异常值再拟合一次,说明效果不佳,之后使用SPSS专家建模器。
  8. SPSS专家建模器:将专家检验得到的模型、模型拟合度、模型统计、离群值、残差ACF、PACF图像、预测结果图像等信息体现在论文中;将数据预测结果放在论文中,强调一下置信区间的置信度是95%。

有关时间序列分析模型详细讲解的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  5. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  6. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  7. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  8. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  9. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  10. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

随机推荐