1. 程式人生 > >R語言提取時間序列的週期性成分應用EMD,小波濾波器,Baxter過濾器等

R語言提取時間序列的週期性成分應用EMD,小波濾波器,Baxter過濾器等

介紹

對商業週期的分析需要提取時間序列的週期性成分,該時間序列通常也受到諸如潛在趨勢或噪聲等其他因素的影響。本文介紹了一些在最近的文獻中用於從給定系列中提取商業週期的方法。它基於Stock and Watson(1999)在“巨集觀經濟學手冊”中關於商業週期的章節。我還介紹了相對較新的方法,如小波濾波器或經驗模式分解,這些方法未在手冊中介紹。由於這篇文章的重點是在R中實現某些過濾技術,我不會涉及數學。相反,我將參考各自的文獻。對於這些例子,我使用了美國實際GDP的季度資料,這是我直接從FRED獲得的。

1

names(gdp) <- c("Time"

,"GDP") # Rename variables

gdp[,"GDP"] <- log(gdp[,"GDP"]) # Take logs

為了直觀地瞭解提取時間序列的週期性成分意味著什麼,請檢視下圖中隨時間變化的對數實際GDP的發展情況。

1

2

3

library(reshape2)

ggplot(gdp,aes(x=Time,y=GDP)) + geom_line(size=.5) + theme_classic() + labs(title="Log Real US GDP")

00_gdp

資料有明顯的增長趨勢,到目前為止似乎逐漸變小。此外,該系列似乎以一種或多或少的常規方式圍繞這一趨勢波動。該系列與趨勢的偏差非常小,這種偏差經常發生,但也有相當大的偏差,這種偏差可能會持續幾個後續時期。後者是與商業週期分析相關的波動。

時間趨於衰退

從一系列中排除趨勢的第一種方法是在時間變數上回歸感興趣的變數並獲得剩餘值。這些在下圖中繪製,其中線性趨勢被移除。

1

2

3

4

# Plot

dat <- data.frame("Time"=gdp[,"Time"],"Linearly.Detrended"=time.detrend)

ggplot(dat,aes(x=Time,y=Linearly.Detrended)) + geom_hline(yintercept=0,colour="grey80") + geom_line

(size=.5) + theme_classic() + labs(title="Linearly Detrended",y="")

01_linear_trend

這種方法相對有爭議,因為它假設存在一個恆定的線性時間趨勢。正如我們上面所看到的,鑑於趨勢增長率隨時間的穩步下降,這種情況不太可能發生。然而,仍然可以假設時間趨勢的不同函式形式,例如新增二次項,以擺脫趨勢。這種方法的另一個缺點是它只能排除趨勢,而不能排除噪聲,即系列中的非常小的波動。

差分

接下來的方法是採用第一個差異,因為它通常被教導以獲得固定的時間序列。這假設資料是不穩定的。取得第一個差異的結果顯示在下圖中,其中它也與時間趨勢系列進行比較。差異資料在零線附近波動得更多,但它也包含很多噪聲。

1

2

3

4

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# Plot

 g <- melt(dat,id.vars="Time",na.rm=TRUE)

levels(g[,2]) <- c("Linear Trend","First Difference")

# Define plot function

plot.cycles <- function(d,t) {

axis.line=element_line(size=.3,colour="black"), # Set the size and colour of the axes

axis.text=element_text(colour="black"), # Set the colour of the axes text

panel.grid=element_blank()) # Set grid lines off

}

# Plot

plot.cycles(d=g,t="Linearly Detrended vs. First Difference")

02_first_difference

Hodrick Prescott過濾器

Hodrick和Prescott(1981)開發了一種濾波器,它將時間序列分為趨勢,週期和噪聲分量。該hpfilter功能包含在mFilter包中,需要時間序列和平滑引數。文獻表明後者的值為1600。但是,也可以選擇更高的值。下圖顯示了Hodrick-Prescott濾波器獲得的實際GDP的週期性成分值,並將其與線性去趨勢系列的值進行了比較。兩個系列的行為看起來非常相似,只是HP系列在零附近波動較大,而線性去趨勢系列仍然包含趨勢的組成部分。此外,迴圈HP系列還包括一些類似噪音的元件。

1

2

3

4

6

7

8

9

# Plot

dat <- cbind(dat,data.frame("Hodrick.Prescott"=hp))

g <- melt(dat[,c(1,4,3)],id.vars="Time",na.rm=TRUE)

levels(g[,2]) <- c("Hodrick Prescott","Linearly Detrended")

plot.cycles(g,"Hodrick Prescott vs. Linearly Detrended")

03_Hodrick_Prescott

雖然在經濟學中廣泛使用,但惠普過濾器也因某些功能而備受批評。見,例如,在勃魯蓋爾的部落格文章很好地概述  通過熱雷米·科恩,Setton和尤里Yatsynovich和  這裡  由詹姆斯·漢密爾頓最近(位技術)的批評。

Baxter過濾器

Baxter和King(1994,1999)提出了一種濾波器,它可以產生與HP濾波器類似的結果,但它可以消除上面顯示的許多類似噪聲的行為。該功能bkfilter也包含在mFilter包中。它需要系列,週期數量的下限和上限,假定週期發生(plpu),以及平滑因子nfix。文獻(參見NBER,Stock和Watson(1999))表明商業週期持續6至32個月。這些值用於指定迴圈週期的下限和上限。BK濾波器的結果如下圖所示。該方法的一個相對系列的缺點是平滑因子導致在系列的開始和結束時觀察的丟失。這可能是小樣本的問題。

1

2

3

4

6

7

8

# Plot

dat <- cbind(dat,data.frame("Baxter.King"=bk))

g <- melt(dat[,c(1,5,4)],id.vars="Time",na.rm=TRUE)

levels(g[,2]) <- c("Baxter King","Hodrick Prescott")

plot.cycles(g,"Baxter King vs. Hodrick Prescott")

04_Baxter_King

小波濾波器

Yogo(2008)提出使用小波濾波器從時間序列資料中提取商業週期。這種方法的優點是該功能不僅可以提取系列的趨勢,週期和噪聲,而且可以更加具體地說明週期發生的週期。然而,由於該技術只能捕獲2的冪的週期性,即2,4,8,16,32等,所以沒有完全的自由度。

R中的方法實現也很簡潔,但在使用之前需要一些額外的資料轉換。一個有用的功能包含在waveslim包中並被稱為mra(“多解析度分析”)。它需要時間序列的不同版本和分解的深度。

該函式給出了多個系列,必須將它們累積起來cumsum,將它們轉換回反映週期性模式的資料。此外,一些系列可以結合使用rowSums。當應該一起分析持續8到16和16到32個週期的週期時,這很有用,如下圖所示。毫不奇怪,小波濾波器產生與BK濾波器類似的結果,因為迴圈週期的上限在兩者中相等,下限僅相差2。

1

2

3

4

6

7

8

9

10

# Plot

 g <- melt(dat[,c(1,6,5)],id.vars="Time",na.rm=TRUE)

levels(g[,2]) <- c("Wavelet","Baxter King")

plot.cycles(g,"Wavelet vs. Baxter King")

05_wavelet

經驗模式分解(EMD)

基於Huang等人。(1998)Kozic和Sever(2014)提出經驗模式分解作為商業週期提取的另一種方法。該函式emd可以在EMD包中找到,並且需要不同的時間序列,邊界條件和規則,該規則指定迭代過程在哪個點獲得了足夠令人滿意的結果並且可以停止。該濾波器方法的結果與HP,BK和小波濾波器相比有所不同。每項研究的任務都是評估使用這種方法是否合理。

1

2

3

4

6

7

8

 emd <- as.data.frame(emd(xt=diff(gdp[,2]),boundary="wave",stoprule="type2")$imf)

 g <- melt(dat[,c(1,7,4)],id.vars="Time",na.rm=TRUE)

plot.cycles(g,"EMD vs. Hodrick Prescott")

06_EMD

大資料部落——中國專業的第三方資料服務提供商,提供定製化的一站式資料探勘和統計分析諮詢服務

統計分析和資料探勘諮詢服務 :y0.cn/teradat(諮詢服務請聯絡官網客服

點選這裡給我發訊息QQ:3025393450

【服務場景】  

科研專案; 

公司專案外包 ;線上線下一對一培訓 ;資料採集;學術研究;報告撰寫;市場調查。

【大資料部落】提供定製化的一站式資料探勘和統計分析諮詢服務

【大資料部落】大資料部落提供定製化的一站式資料探勘和統計分析諮詢服務

分享最新的大資料資訊,每天學習一點資料分析,讓我們一起做有態度的資料人【大資料部落】大資料部落提供定製化的一站式資料探勘和統計分析諮詢服務

微信客服號:lico_9e

QQ交流群:186388004 大資料部落

【大資料部落】r語言電商網站爬蟲

歡迎關注微信公眾號,瞭解更多資料乾貨資訊!

【大資料部落】大資料部落提供定製化的一站式資料探勘和統計分析諮詢服務