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


  原文鏈接:http://tecdat.cn/?p=5399

 

 

介紹

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

names(gdp) <- c("Time","GDP") # Rename variables

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

 

 

為了直觀地了解提取時間序列的周期性成分意味着什么,請查看下圖中隨時間變化的對數實際GDP的發展情況。

library(reshape2)

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

 

 

 

00_gdp

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

時間趨於衰退

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

# 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="")

 

 

  

 

 

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

差分

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

# 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")
 

  

Hodrick Prescott過濾器

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

# 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")

 

 

  

 

Baxter過濾器

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

# 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")

 

 

  

小波濾波器

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

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

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

# 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")

 

 

  

  

 

經驗模式分解(EMD)

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

 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")

 

 

 

 

 

有問題歡迎聯系我們!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM