首页 > 其他分享 >卡尔曼滤波器:用R语言中的KFAS建模时间序列|附代码数据

卡尔曼滤波器:用R语言中的KFAS建模时间序列|附代码数据

时间:2023-07-07 23:14:36浏览次数:47  
标签:语言 卡尔曼滤波 KFAS 建模 currency 时间 序列 模型

原文链接:http://tecdat.cn/?p=6762

最近我们被客户要求撰写关于卡尔曼滤波器的研究报告,包括一些图形和统计输出。

时间序列预测,ARIMA等传统模型通常是一种流行的选择

虽然这些模型可以证明具有高度的准确性,但它们有一个主要缺点 - 它们通常不会解释“冲击”或时间序列的突然变化。让我们看看我们如何使用称为卡尔曼滤波器的模型来解决这个问题。

 

时间序列

我们以货币市场为例。货币对可能会有整体上升趋势,然后在抛售期间大幅下跌。传统的时间序列模型不一定能够立即解决这个问题,并且在考虑到趋势的突然变化之前可能需要几个时期。

因此,我们希望使用一个确实能够解释这种冲击的时间序列模型。让我们来看一个称为卡尔曼滤波器的模型。

卡尔曼滤波器是一种状态空间模型,可以更快地调整冲击到时间序列。让我们看一下例子。

2015年1月,当瑞士国家银行决定取消瑞士法郎时,货币市场遭受了历史上最大的冲击之一。结果,瑞士法郎飙升,而其他主要货币则暴跌。

让我们看看卡尔曼滤波器如何调整这种冲击。

 

卡尔曼滤波器:USD / CHF

首先,让我们下载2015年1月的USD / CHF数据。

 

> currency = Quandl("FRED/DEXSZUS", start_date="2010-01-01",end_date="2018-09-29",type="xts")
> currency=data.frame(currency)
> currency=(log(currency$currency))

现在,我们将尝试使用KFAS库使用卡尔曼滤波器对此时间序列进行建模。

 

绘制时间序列:

 
> ts.plot(ts(exp(currency[1232:1274]), exp(out$a[1232:1274]), exp(out$att[1232:1274]), exp(out$alpha[1232:1274])

图片


点击标题查阅往期内容

图片

分解商业周期时间序列:线性滤波器、HP滤波器、Baxter滤波器、Beveridge Nelson分解等去趋势法

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

 

为了进行比较,我们还将计算10天移动平均值,以比较平滑性能与卡尔曼滤波器的平滑性能。

 
data.frame(SMA(exp(currency),n=10))

 现在让我们将上面的内容与我们的原始序列结合起来,看看我们得到了什么:
这是生成的数据框:
图片

在某些情况下,高频数据 - 或过滤从噪声信号中提取信息并预测未来状态,是卡尔曼滤波器最合适的用途。另一方面,平滑更依赖于过去的数据,因为在某些情况下,平均最近的预测可能比使用最近的预测更准确。

这在直觉上是有道理的,因为货币在一个月之前的交易价格为0.9658。在这方面,平滑估计器允许比使用滤波估计更好地预测信号,滤波估计a直到时间段33才调整冲击。

例子:英镑/美元

因此,我们已经看到卡尔曼滤波器如何拟合美元/瑞士法郎的突然变动。我们再举一个货币冲击的例子。当英国在2016年6月投票支持“英国退欧”时,我们看到英镑/美元随后暴跌。

如在USD / CHF的例子中,我们从Quandl下载我们的GBP / USD数据并运行卡尔曼滤波器:

这是我们的数据图。同样,我们看到alpha在t = 22时的震荡前一天向下调整到1.438的水平:

图片

以下是a,att和alpha统计信息:

图片

同样,我们看到10天SMA需要将近10天才能完全调整震荡,再次表明平滑参数α在调整货币水平的巨大变化时是不错的。

结论

 

  • 调整时间序列冲击的重要性

  • 如何在R中使用KFAS实现卡尔曼滤波器

  • 如何解释卡尔曼滤波器的输出

  • 为什么卡尔曼滤波器是用于建模时间序列冲击的合适模型


图片

点击文末 “阅读原文”

获取全文完整代码数据资料。

本文选自《卡尔曼滤波器:用R语言中的KFAS建模时间序列》。

图片

图片

点击标题查阅往期内容

R语言时间序列分解和异常检测方法应用案例R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据R语言从经济时间序列中用HP滤波器,小波滤波和经验模态分解等提取周期性成分分析
R语言状态空间模型和卡尔曼滤波预测酒精死亡人数时间序列matlab实现扩展卡尔曼滤波(EKF)进行故障检测
卡尔曼滤波器:用R语言中的KFAS建模时间序列
状态空间模型:卡尔曼滤波器KFAS建模时间序列
R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
使用R语言随机波动模型SV处理时间序列中的随机波动率
PYTHON用时变马尔可夫区制转换(MRS)自回归模型分析经济时间序列
R语言有限混合模型(FMM,finite mixture model)EM算法聚类分析间歇泉喷发时间
长短期记忆网络LSTM在时间序列预测和文本分类中的应用
Python随机波动率(SV)模型对标普500指数时间序列波动性预测
R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
R语言使用ARIMAX预测失业率经济时间序列数据
R语言用ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据
R语言经济学:动态模型平均(DMA)、动态模型选择(DMS)预测原油时间序列价格

标签:语言,卡尔曼滤波,KFAS,建模,currency,时间,序列,模型
From: https://www.cnblogs.com/tecdat/p/17536346.html

相关文章

  • chatgpt 与传统3D建模对比分析
    推荐:将NSDT场景编辑器加入你的3D工具链  随着人工智能技术的发展,越来越多的领域正逐渐被AI模型所取代。ChatGPT作为一种自然语言处理技术,越来越为人们所熟悉。最近,一些3D建模领域的专家想知道ChatGPT是否可以取代传统的手动3D建模。本文的目的是分析用ChatGPT取代传统手动3D建......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
        在培养农村高中生利用二次函数模型构建来对数学问题进行分析及求解意识的基础上,为了进一步锻炼学生的模型建构能力,帮助他们可以突破实际问题求解中的具体含义及意义,快速找到求解实际问题中的关键突破口,以及二次函数模型建构的视角与思维,这时候还要在数学教学中有计划......
  • 组合电路的行为级建模
    主要使用关键词initial或always定义的两种结构类型的描述语句,initial主要用于面向仿真的过程语句,不能用来描述硬件逻辑电路的功能。1.always结构型说明语句用法:always@(事件控制表达式) begin:块名 块内局部变量的定义; 一条或者多条过程赋值语句; end不停的循环执行其......
  • 数据建模来拯救:弄清楚什麽功能优先级真正重要
     作为一个产品经理经常会遇到非常多的产品需求,开发同学忙的不可开交,用户又似乎什么都想要。开发产品资源有限,怎么才能捞出真正的用户需求?给真正重要的需求高优先级?产品经理决定引进「KANO模型」,进行系统的需求梳理,对需求进行分析和提炼,提高效率。对客户需求进行分类并将其......
  • yaml创建模型结构,代码阅读
    *前言.最近读到类似Detectron2结构的训练代码,实在是太痛苦了。因此,做笔记记录一下。1.整体结构:Trainingkit;      |----configs:存储各种网络的yaml配置文件;      |----docs        |----imxcv:运行代码的核心组件;......
  • Verilog HDL数据流建模与运算符
    数据流建模使用的连续赋值语句由关键词assign开始,一般用法如下:wire[位宽说明]变量名1,变量名2,...,变量名n;assign变量名=表达式;只要等号右边的值发生变化,则立即更新等号左边的值。注意,连续赋值语句只能对wire型变量进行赋值,所以等号左边必须是wire型。把2线-4线译......
  • 卡尔曼滤波器
    B站华南小虎队笔记基础使用范围:线性高斯系统(高斯系统是指只会受高斯噪声影响的系统)从低通滤波看卡尔曼滤波 ......
  • Verilog HDL门级建模
    VerilogHDL内部定义了12个基本门级元件可以直接用,用这些门级原件直接对逻辑图进行描述,称为门级建模。每个门输入可能是逻辑0,逻辑1,不确定态x和高阻态z四个值之一。多输入门主要有与门(and),与非门(nand),或门(or),或非门(nor),异或门(xor),同或门(xnor)。符号都知道,为了省事我选择直接拍照。......
  • R语言之文本分析:主题建模LDA|附代码数据
    原文链接:http://tecdat.cn/?p=3897最近我们被客户要求撰写关于主题建模LDA的研究报告,包括一些图形和统计输出。文本分析:主题建模 library(tidyverse)theme_set( theme_bw())目标定义主题建模解释LatentDirichlet以及此过程的工作原理演示如何使用LDA从一组已知主题......
  • 交直流混合微网程序matlab 采用拉丁超立方抽样和多场景缩减,考虑风光等随机性建模
    交直流混合微网程序matlab采用拉丁超立方抽样和多场景缩减,考虑风光等随机性建模,利用粒子群算法,计算得到三个微网的优化程序,程序运行稳定,有详细资料。这段代码是一个多目标优化算法的实现,主要用于解决多目标优化问题。下面我将对代码进行详细解释和分析。原创文章,转载请说明出处,......