分解商業(yè)周期時間序列:線性濾波器、HP濾波器、Baxter濾波器、Beveridge Nelson分解等
原文鏈接:http://tecdat.cn/?p=23000
最近我們被客戶要求撰寫關(guān)于商業(yè)周期分解的研究報告,包括一些圖形和統(tǒng)計輸出。本文包含各種過濾器,可用于分解南非GDP的方法。我們做的第一件事是清除當(dāng)前環(huán)境中的所有變量。這可以通過以下命令進(jìn)行
分解南非GDP數(shù)據(jù)
本文包含各種過濾器,可用于分解南非GDP的方法。我們做的第一件事是清除當(dāng)前環(huán)境中的所有變量。這可以通過以下命令進(jìn)行。
rm(list?=?ls())
graphics.off()
載入數(shù)據(jù)
如前所述,南非的GDP數(shù)據(jù)將其作為時間序列存儲在gdp中,我們執(zhí)行以下命令。
gdp?<-?ts(dat.tmp,?start?=?c(1960,?2),?frequency?=?4)
為了確保這些計算和提取的結(jié)果是正確的,我們檢查一下數(shù)據(jù)的圖表。
plot(gdp)
線性濾波器_去除數(shù)據(jù)線性趨勢_
為了估計一個線性趨勢,我們可以利用一個包括時間趨勢和常數(shù)的線性回歸模型。為了估計這樣一個模型,我們使用lm命令,如下。
lin.mod$fitted.values??#?擬合值與時間趨勢有關(guān)ts(lin.trend,?start?=?c(1960,?1))??#?為趨勢創(chuàng)建一個時間序列變量gdp?-?linear??#?周期是數(shù)據(jù)和線性趨勢之間的差異
回歸的擬合值包含與線性趨勢有關(guān)的信息。這些信息需要從模型對象lin.mod中提取,在上面的塊中,我們將這些值分配給時間序列對象linear。然后從數(shù)據(jù)中剔除趨勢,就得到了周期。
然后我們可以借助下面的命令來繪制這個結(jié)果,其中趨勢和周期被繪制在不同的數(shù)字上。
plot.ts(gdp,?ylab?=?"")??
lines(linear,?col?=?"red")??
legend("topleft",?legend?=?c("data",?"trend")
霍德里克 - 普雷斯科特?(Hodrick-Prescott,HP)?_濾波器_對數(shù)據(jù)進(jìn)行去趨勢處理
要用流行的HP濾波法分解這個數(shù)據(jù)。在這種情況下,我們將lambda的值設(shè)置為1600,這也是對季度數(shù)據(jù)的建議。
hp(gdp,?freq?=?1600)
plot.ts(gdp,?ylab?=?"")??#?繪制時間序列plot.ts(hp.decom$cycle,?ylab?=?"")??#?繪制周期圖
這似乎更準(zhǔn)確地反映了我們對南非經(jīng)濟(jì)表現(xiàn)的理解。
點擊標(biāo)題查閱往期內(nèi)容
R語言從經(jīng)濟(jì)時間序列中用HP濾波器,小波濾波和經(jīng)驗?zāi)B(tài)分解等提取周期性成分分析
左右滑動查看更多
01
02
03
04
用Baxter-King濾波器去趨勢數(shù)據(jù)
為了利用Baxter-King 濾波器。在這種情況下,我們需要指定周期的頻帶,其上限被設(shè)定為32,下限被設(shè)定為6。
bk(gdp,?pl?=?6,?pu?=?32)
plot.ts(gdp,?ylab?=?"")
plot.ts(cycle,?ylab?=?"")
這似乎再次為南非經(jīng)濟(jì)活動的周期性提供了一個相當(dāng)準(zhǔn)確的表述。還要注意的是,周期的表示比以前提供的要平滑得多,因為噪音不包括在周期中。
Christiano-Fitzgerald濾波器去趨勢數(shù)據(jù)
這個濾波器的性質(zhì)與上面提供的非常相似。此外,產(chǎn)生與Baxter-King濾波器高度相似的結(jié)果。
plot.ts(gdp,?ylab?=?"")
plot.ts(cfcycle,?ylab?=?"")
用Beveridge-Nelson分解法 "去趨勢 "數(shù)據(jù)?
為了將數(shù)據(jù)分解為隨機(jī)趨勢和平穩(wěn)周期,我們可以采用Beveridge-Nelson分解法。當(dāng)采用這種技術(shù)時,我們需要指定與平穩(wěn)部分有關(guān)的滯后期的數(shù)量。在我下面的例子中,我假設(shè)有八個滯后期。
plot.ts(gdp,?ylab?=?"")
lines(bn.trend,?col?=?"red")
plot.ts(bn.cycle,?ylab?=?"")
比較周期的不同衡量標(biāo)準(zhǔn)
然后,我們可以將所有這些結(jié)果結(jié)合在一張圖上,考慮各自的相似性和差異。在這個例子中,我創(chuàng)建了一個時間序列ts.union,但是我也可以先繪制一個單一的序列,然后再使用lines命令在上面繪制連續(xù)的圖。
?ts.union(lin.cycle,?hp.decom,?bp.decom,?
????cf.decom,?bn.cycle)
plot.ts(comb,?ylab?=?"")
譜分解
在我們考慮使用譜技術(shù)之前,最好先清除當(dāng)前環(huán)境中的所有變量,并關(guān)閉所有的圖。下一步是確保你可以通過使用library命令來訪問這些包中的程序。
library(tsm)library(TSA)library(mFilter)
使用譜技術(shù)進(jìn)行分解。我們可以為三個時間序列變量生成數(shù)值,然后將它們組合成一個單一的變量。
2?*?cos(2?*?pi?*?t?*?w[1])?+?3?*?sin(2?*?pi?*?t?*?
????w[1])??#?no.obs點上的6個周期的頻率4?*?cos(2?*?pi?*?t?*?w[2])?+?5?*?sin(2?*?pi?*?t?*?
????w[2])??#頻率為10個周期的觀察點6?*?cos(2?*?pi?*?t?*?w[3])?+?7?*?sin(2?*?pi?*?t?*?
????w[3])??#?在沒有觀測點的情況下,頻率為40個周期y?<-?x1?+?x2?+?x3
為了觀察這些變量,我們可以把它們繪制在一個單獨(dú)的軸上。
par(mfrow?=?c(2,?2),?mar?=?c(2.2,?2.2,?2,?1),?cex?=?0.8)
plot(x1,?type?=?"l",?main?=?"x1")
plot(x2,?type?=?"l",?main?=?"x2")
plot(x3,?type?=?"l",?main?=?"x3")
plot(y,?type?=?"l",?main?=?"y")
此后,我們可以使用周期圖來考慮這些時間序列變量的每一個屬性。
gram(y,?main?=?"y",?col?=?"red")
當(dāng)然,我們可以利用一個過濾器,從總體時間序列變量中去除一些不需要的成分。為此,我們可以應(yīng)用上下限相對較窄的Christiano-Fitzgerald濾波器。此后,我們使用應(yīng)用于與周期有關(guān)的信息的周期圖,來調(diào)查它是否成功地剔除了一些頻率成分。
cf(y0)gram(cycle)
這個結(jié)果將表明,濾波器已經(jīng)排除了大部分的高頻率成分。為了看看這個周期與之前的數(shù)據(jù)有什么關(guān)系,我們把通過濾波器的周期性信息繪制在分量上。此外,我們還將這個結(jié)果繪制在綜合周期的變量上。
plot(x1,?type?=?"l",?lty?=?1)
lines(cycle,?lty?=?3,?lwd?=?3)
plot(y,?type?=?"l",?lty?=?1)
lines(cycle,?lty?=?3,?lwd?=?3)
在這兩種情況下,它似乎都對過程中的趨勢做了合理的描述。
南非商業(yè)周期的譜分解法
為了考慮如何在實踐中使用這些頻譜分解,我們現(xiàn)在可以考慮將這些技術(shù)應(yīng)用于南非商業(yè)周期的各種特征中。
下一步將是運(yùn)行所有的過濾器,這些過濾器被應(yīng)用于識別南非商業(yè)周期的不同方法。
現(xiàn)在,讓我們對商業(yè)周期的每一個標(biāo)準(zhǔn)應(yīng)用一個周期圖。
線性濾波器提供了一個很差的結(jié)果,因為趨勢明顯占主導(dǎo)地位(這不是周期應(yīng)該有的)。這與Hodrick-Prescott濾波器的特征形成對比,后者的趨勢信息已經(jīng)被去除。Baxter & King和Christiano & Fitzgerald的帶通濾波器也是這種情況。在這兩種情況下,噪聲也已經(jīng)被去除。最后的結(jié)果與Beveridge-Nelson分解有關(guān),我們注意到周期包括大量的趨勢和大量的噪聲。
小波分解
為了提供一個小波分解的例子,我們將把該方法應(yīng)用于南非通貨膨脹的數(shù)據(jù)。這將允許使用在這個過程中推導(dǎo)出對趨勢的另一種衡量方法,這可以被認(rèn)為是代表核心通貨膨脹。請注意,這種技術(shù)可以應(yīng)用于任何階數(shù)的單整數(shù)據(jù),所以我們不需要首先考慮變量的單整階數(shù)。
然后,我們將利用消費(fèi)者價格指數(shù)的月度數(shù)據(jù),該數(shù)據(jù)包含在SARB的季度公告中。數(shù)據(jù)可以追溯到2002年。為了計算通貨膨脹的同比指標(biāo),我們使用diff和lag命令。
diff/cpi[-1?*?(length?-?11):length]
為了確保所有這些變量的轉(zhuǎn)換都已正確進(jìn)行,我們對數(shù)據(jù)進(jìn)行繪圖。
plot(inf.yoy)
由于我們在這種情況下主要對識別平滑的趨勢感興趣,我們將使用貝希斯函數(shù)。這樣的函數(shù)是Daubechies 4小波,它應(yīng)用修正的離散小波變換方法。此外,我們還將使用三個母小波來處理各自的高頻成分。
wt(yoy,?"d4")
然后我們可以為每個獨(dú)立的頻率成分繪制結(jié)果,如下所示。
plot.ts(yoy)for?(i?in?1:4)?plot.ts(d4[[i]]
如果我們現(xiàn)在想在數(shù)據(jù)上繪制趨勢(父小波)。
plot.ts(inf,?ylab?=?"inf")
lines(ren)
請注意,由于各自的頻段是相加的,我們可以將其中一個母頻段加入到趨勢中,如下所示。
inf.tmp?<-?inf.tren?+?inf.d4$w3inf.tren2?<-?ts(inf.tmp,?start?=?c(2003,?1),?frequency?=?12)plot.ts(inf.yoy,?ylab?=?"inf")
lines(inf.tren2,?col?=?"red")
相關(guān)經(jīng)濟(jì)變量的周期性成分之間的相關(guān)性
為了確定周期的特征是否合適,我們可以考慮宏觀經(jīng)濟(jì)總量的一些不同周期性方法之間的相關(guān)性。例如,我們可以考慮產(chǎn)出和生產(chǎn)(或就業(yè))的周期性在不同的滯后期應(yīng)該是相關(guān)的。如果它們不相關(guān),那么該方法可能無法準(zhǔn)確描述各自變量的周期性成分。
在本文使用的例子中,代碼可能有點難以理解,但我們鼓勵你自己去研究,以提高你對這個編碼環(huán)境的總體理解。?
下一步是讀入數(shù)據(jù)并為數(shù)據(jù)的各種周期性成分創(chuàng)建一些矩陣。
yd?<-?dat[5:n.obs,?]?-?dat[1:(n.obs?-?4),?]??#?存儲輸出yc_li?<-?matrix(rep(0,?n.obs?*?n.var),?ncol?=?n.var)
yc_hp?<-?matrix(rep(0,?n.obs?*?n.var),?ncol?=?n.var)
yc_bp?<-?matrix(rep(0,?n.obs?*?n.var),?ncol?=?n.var)
yc_bn?<-?matrix(rep(0,?n.obs?*?n.var),?ncol?=?n.var)
使用上面包含的方法對數(shù)據(jù)進(jìn)行過濾。
for?(i?in?1:n)?{
????
????#?用線性濾波器對數(shù)據(jù)進(jìn)行去趨勢處理????lin.mod?<-?lm(dat[,?i]?~?time(dat[,?i]))
????
????#?用HP濾波器去趨勢數(shù)據(jù)????yc_hp[,?i]?<-?hp.cycle
????
????#用帶通濾波器去趨勢數(shù)據(jù)????yc_bp[,?i]?<-?bp.cycle
????
????#??Beveridge-Nelson分解????yc_bn[,?i]?<-?bn.[,?2]}
計算不同提前期和滯后期的相關(guān)關(guān)系。
for?(i?in?1:n)?{
????for?(j?in?1:n.var)?{
????????c_li?<-?leadlag(yc_li[,?i],?yc_li[,?j],?maxLeadLag)
????????c_hp?<-?leadlag(yc_hp[,?i],?yc_hp[,?j],?maxLeadLag)
????????c_bp?
????????c_bn
????????c_yd?
????????
????????for?(k?in?1:5)?{
????????????ynamesLong[(cnt?+?k),?1]?<-?paste(ynames.tmp)
????????}
????????cnt?<-?cnt?+?5
繪制結(jié)果。
#?線性趨勢barplot(corrStylizedFact)box()
#?hp濾波器
op?<-?par(mfrow?=?c(1,?3))barplot(corrStyli,?ylim?=?c(-1,?1))box()
#?beveridge?nelson?分解barplot(coracts,?ylim?=?c(-1,?1),?col?=?"red")
box()
本文摘選?《?R語言分解商業(yè)周期時間序列:線性濾波器、HP濾波器、Baxter濾波器、Beveridge Nelson分解等去趨勢法?》?,點擊“閱讀原文”獲取全文完整資料。
點擊標(biāo)題查閱往期內(nèi)容
R語言時間序列分解和異常檢測方法應(yīng)用案例R語言矩陣特征值分解(譜分解)和奇異值分解(SVD)特征向量分析有價證券數(shù)據(jù)R語言從經(jīng)濟(jì)時間序列中用HP濾波器,小波濾波和經(jīng)驗?zāi)B(tài)分解等提取周期性成分分析
R語言狀態(tài)空間模型和卡爾曼濾波預(yù)測酒精死亡人數(shù)時間序列matlab實現(xiàn)擴(kuò)展卡爾曼濾波(EKF)進(jìn)行故障檢測
卡爾曼濾波器:用R語言中的KFAS建模時間序列
狀態(tài)空間模型:卡爾曼濾波器KFAS建模時間序列
R語言用LOESS(局部加權(quán)回歸)季節(jié)趨勢分解(STL)進(jìn)行時間序列異常檢測
使用R語言隨機(jī)波動模型SV處理時間序列中的隨機(jī)波動率
PYTHON用時變馬爾可夫區(qū)制轉(zhuǎn)換(MRS)自回歸模型分析經(jīng)濟(jì)時間序列
R語言有限混合模型(FMM,finite mixture model)EM算法聚類分析間歇泉噴發(fā)時間
長短期記憶網(wǎng)絡(luò)LSTM在時間序列預(yù)測和文本分類中的應(yīng)用
Python隨機(jī)波動率(SV)模型對標(biāo)普500指數(shù)時間序列波動性預(yù)測
R語言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于預(yù)測時間序列數(shù)據(jù)
R語言使用ARIMAX預(yù)測失業(yè)率經(jīng)濟(jì)時間序列數(shù)據(jù)
R語言用ARIMA模型,ARIMAX模型預(yù)測冰淇淋消費(fèi)時間序列數(shù)據(jù)
R語言經(jīng)濟(jì)學(xué):動態(tài)模型平均(DMA)、動態(tài)模型選擇(DMS)預(yù)測原油時間序列價格