卡爾曼濾波器:用R語言中的KFAS建模時間序列
原文鏈接:http://tecdat.cn/?p=6762
?
時間序列預(yù)測,ARIMA等傳統(tǒng)模型通常是一種流行的選擇。雖然這些模型可以證明具有高度的準(zhǔn)確性,但它們有一個主要缺點(diǎn) - 它們通常不會解釋“沖擊”或時間序列的突然變化。讓我們看看我們?nèi)绾问褂梅Q為卡爾曼濾波器的模型來潛在地緩解這個問題。
?
時間序列?
我們以貨幣市場為例。貨幣對可能會有整體上升趨勢,然后在拋售期間大幅下跌。傳統(tǒng)的時間序列模型不一定能夠立即解決這個問題,并且在考慮到趨勢的突然變化之前可能需要幾個時期。
因此,我們希望使用一個確實(shí)能夠解釋這種沖擊的時間序列模型。讓我們來看一個稱為卡爾曼濾波器的模型。
卡爾曼濾波器是一種狀態(tài)空間模型,可以更快地調(diào)整沖擊到時間序列。讓我們看一下如何使用一個例子。
2015年1月,當(dāng)瑞士國家銀行決定從瑞士法郎取消瑞士法郎時,貨幣市場遭受了歷史上最大的沖擊之一。結(jié)果,瑞士法郎飆升,而其他主要貨幣則暴跌。
讓我們看看卡爾曼濾波器如何調(diào)整這種沖擊。
?
卡爾曼濾波器:USD / CHF
首先,讓我們下載2015年1月的USD / CHF數(shù)據(jù)。
> currency = Quandl("FRED/DEXSZUS", start_date="2010-01-01",end_date="2018-09-29",type="xts")
> currency=data.frame(currency)
> currency=(log(currency$currency))
現(xiàn)在,我們將嘗試使用KFAS庫使用卡爾曼濾波器對此時間序列進(jìn)行建模。
?
繪制時間序列:
> ts.plot(ts(exp(currency[1232:1274]), exp(out$a[1232:1274]), exp(out$att[1232:1274]), exp(out$alpha[1232:1274])

?
為了進(jìn)行比較,我們還將計(jì)算10天移動平均值,以比較平滑性能與卡爾曼濾波器的平滑性能。
data.frame(SMA(exp(currency),n=10))
?現(xiàn)在讓我們將上面的內(nèi)容與我們的原始系列結(jié)合起來,看看我們提出了什么:
?這是生成的數(shù)據(jù)框:

在某些情況下,高頻數(shù)據(jù) - 或過濾從噪聲信號中提取信息并預(yù)測未來狀態(tài),是卡爾曼濾波器最合適的用途。另一方面,平滑更依賴于過去的數(shù)據(jù),因?yàn)樵谀承┣闆r下,平均最近的測量可能比使用最近的測量更準(zhǔn)確。
這在直覺上是有道理的,因?yàn)樨泿旁谝粋€月之前的交易價格為0.9658。在這方面,平滑估計(jì)器允許比使用濾波估計(jì)a更好地預(yù)測信號,濾波估計(jì)a直到時間段33才調(diào)整沖擊。
例子:英鎊/美元
因此,我們已經(jīng)看到卡爾曼濾波器如何適應(yīng)美元/瑞士法郎的突然變動。讓我們再舉一個貨幣沖擊的例子。當(dāng)英國在2016年6月投票支持“英國退歐”時,我們看到英鎊/美元隨后暴跌。
如在USD / CHF的例子中,我們從Quandl下載我們的GBP / USD數(shù)據(jù)并運(yùn)行卡爾曼濾波器:
這是我們的數(shù)據(jù)圖。同樣,我們看到alpha在t = 22時的震蕩前一天向下調(diào)整到1.438的水平:

以下是a,att和alpha統(tǒng)計(jì)信息:

同樣,我們看到10天SMA需要將近10天才能完全調(diào)整震蕩,再次表明平滑參數(shù)α在調(diào)整貨幣水平的巨大變化方面仍然證明是優(yōu)越的。
結(jié)論
?
調(diào)整時間序列沖擊的重要性
如何在R中使用KFAS實(shí)現(xiàn)卡爾曼濾波器
如何解釋卡爾曼濾波器的輸出
為什么卡爾曼濾波器是用于建模時間序列沖擊的合適模型

最受歡迎的見解
1.在python中使用lstm和pytorch進(jìn)行時間序列預(yù)測
2.python中利用長短期記憶模型lstm進(jìn)行時間序列預(yù)測分析
3.使用r語言進(jìn)行時間序列(arima,指數(shù)平滑)分析
4.r語言多元copula-garch-模型時間序列預(yù)測
5.r語言copulas和金融時間序列案例
6.使用r語言隨機(jī)波動模型sv處理時間序列中的隨機(jī)波動
7.r語言時間序列tar閾值自回歸模型
8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類
9.python3用arima模型進(jìn)行時間序列預(yù)測
?