R语言提取时间序列的周期性成分应用EMD,小波滤波器,Baxter过滤器等

对商业周期的分析需要提取时间序列的周期性成分,该时间序列通常也受到诸如潜在趋势或噪声等其他因素的影响。

由Kaizong Ye,Sherry Deng撰写

本文介绍了一些在最近的文献中用于从给定系列中提取商业周期的方法

它基于Stock and Watson(1999)在“宏观经济学手册”中关于商业周期的章节。我还介绍了相对较新的方法,如小波滤波器或经验模式分解,这些方法未在手册中介绍。由于这篇文章的重点是在R中实现某些过滤技术,我不会涉及数学。

×

经济发展的历史表明:经济的增长方式从来都不是按部就班、一成不变的。一个国家可以享受好几年令人兴奋的经济夸张和繁荣,以及股市和楼市的快速增长。随时而来的非理性繁荣可能导致非理性的悲观情绪,正如2007~2009年的情况那样,贷款方停滞了以优惠条件继续发放住房抵押贷款和汽车贷款,银行还收紧了其他商业贷款,支出减少。其结果是国民产出下降、失业率上升、利润和实际收入减少。

最后,经济衰退逐渐落至谷底,然后便开始复苏。复苏有可能恢复不到原先的经济状况,也有可能强劲得足以启动下一轮的经济扩张。经济繁荣一方面也许意味着较长时期内需求持续旺盛,就业机会充足,生活水平不断提升;另一方面,繁荣也可能伴随着通货膨胀、价格上扬和投机猖獗,紧接着便是另一轮经济的衰退。

产出、通货膨胀率、利率和就业的波动构成了商业周期,商业周期是所有市场经济的共同特征。

商业周期的特点

商业周期,是国民总产出、总收入、总就业量的波动,持续时间通常为2-10年,它以大多数经济部门的扩张或收缩为标志。

经济学家们一般讲商业周期划分成为两个主要阶段, 即衰退和扩张。“谷”和“峰”代表的是周期的转折点。衰退是总产出、总收入和就业的连续下降期,通常延续,以经济6个月至一年以经济中许多部门广泛的紧缩为标志。萧条指的是规模广泛且持续时间长的衰退。

国家经济研究局是私人性质的研究机构。它长期对国民经济的收缩和扩张做半官方的判定。国家经济研究局对“衰退”的定义是:国民经济活动全面显著放缓,通常要持续几个月甚至更长时间。主要表现在实际GDP、实际收入、就业、工业生产和零售业等各个方面。

另一个常用的定义是:如果实际GDP连续两个季度下降,则应视作“衰退”。

尽管我们把短期波动叫做“周期”,但请注意商业周期的形式是不规则的。没有两个完全相同的商业周期,也没有精确的公式可用来预测商业周期的发生日期和持续时间。相反,就其不规则性而言,商业周期可能更像天气那样变化无常。

尽管没有两个完全相同的商业周期,但它们通常却具有一种家族式的相似性,如果有一个可靠的经济预言家宣称下一次衰退来临之际,则你应当预感哪些典型的现象会随之而来呢?以下是经济衰退的普遍特征:

l 通常,投资在衰退中急剧下降。由于金融危机和美联储提高利率以降低通货膨胀率,房地产价格首先开始下降。消费者购买也会急剧下降。由于厂商会对此作出压缩产量的反应,所以实际GDP会下降。

l 就业通常在衰退初期就会急剧下降。但其恢复有时却要慢于经济,即所谓的“没有就业机会的复苏”。

l 产出下降,导致通货膨胀步伐放缓。对原材料的需求下降,导致其价格跌落。。工资和服务的价格下降的可能性比较小,但在经济衰退期它们的增长趋势会放慢。

l 企业利润在衰退期急剧下滑。由于预期到这种情况,普通股票的价格一般都会下跌,就像是投资者嗅出了经济下滑的气味。

l 通常,当经济形势恶化、就业率下降,美联储就会开始降低短期利率以刺激投资,同时其他利率也会随之下降。

商业周期理论

外因论和内因论

多年来,关于商业周期根源的大量争论给宏观经济学带来了活力。有人认为商业周期源于货,币政策波动,有人认为源于生产冲击,还有人认为源于外部支出的变动。

各种解释显然还不会有一个最终的结论,但是将这些不同的理论划分成两类可能是有益的,即外生的和内生的。外因论是在经济体系之外的某些要素的波动中寻找商业周期的根源,如战争、革命、选举;石油价格、发现金矿、移民;新土地和新资源的发现;科学突破和技术创新;甚至是太阳黑子、气候变化和天气等。

外因论的一个例子是二战的爆发。德国和日本在欧洲大陆、亚洲和美国引爆战争,导致武器军备生产快速扩张和军事开支大幅增加,从而导致总需求增加,最终致使美国经济从大萧条中出来。这里我们看到的是一个外生事件,即战争,导致了美国军费大幅增加,进而出现20世纪美国最大的一次经济扩张。

与外因论不同,内因论则在经济体系内部寻,找商业周期的机制和原因。这种理论认为,任何一次扩张都孕育着新的衰退和收缩,任何一次收缩也都包含着可能的复苏和扩张。美国历史上许多次经济周期都是源于金融体系的内部周期。正因如此,我们才将注意力集中在货币金融学上。

金融危机和商业周期

世界范围内的资本主义的一个共同特点是在19世纪中经常出现的虚假繁荣,曾导致经济大萧条,且在最近20年中美国又出现了几次类似的情况。以下是一些实例。

早期资本主义的恐慌

19世纪目击了美国狂热的投机浪潮,尤其是在运河、土地和铁路等领域。毋庸置疑“动物精神”会取代理性投资而发挥作用。其结果是铁路过度修筑,土地价格畸高,债务负担过重。企业破产导致银行坏账、出现挤兑风潮和银行危机。产出和价格也在经济恐慌中急剧下跌。最后,当最坏的情况统统出现并终于过去之后,经济便会进入新一轮的扩张。

恶性通货膨胀

有些时候,过热的经济会导致严重通货膨胀,甚至是恶性的通货膨胀。当价格月平均增长高达或超过100%时,就会出现恶性通货膨胀。历史最著名的恶性通货膨胀出现在1923年的德国。政府无法通过税收和借款来维持财政开支,于是便开始大量印刷钞票。到1923年底,印刷纸币的面额越来越大,德国流通中的纸币的最大面额竟然高达250亿马克。今天,各国中央银行都时刻警惕着哪怕是最温和的通货膨胀。

新经济泡沫

经典的投机繁荣模式在20世纪90年代末竟然又一次出现。在“新经济”中,增长和创新都异乎寻常,各种软件、互联网和新涌现的COM等,都在新经济的股市中酿成了投机繁荣。企业通过互联网出售服务,寄送免费的电子生日贺卡,发行“FLOOZ.COM”的股票,所卖出的都不过是并不值钱的电子货币。大学生们也纷纷放弃学业,梦想一夜暴富。所有这些都促进了计算机、软件、远程通信等实际投资的增长。从1995年到2000年,信息处理设备的投资增加了70%,占这一时期实际GDP的五分之一。最后,投资者终于开始怀疑这些企业的真实价值,亏损开始累积并逐步达到极致。于是,在股价上涨之前疯狂买空的冲动转而变成了在股价暴跌之前争相卖空的金融恐慌。2003年,一般的“新经济公司”的股票,纷纷从每股100美元下降到几美分。许多这样的公司都陷入倒闭。

房地产泡沫

相隔不到十年,另一场金融危机又席卷而来,同样这也是创新浪潮的结果。但是在这场危机中,“创新”不过是推进金融产品“证券化”。这种创新是将某个金融产品,如住房抵押贷款的债券票据,尽力细分、反复包装,然后再在证券市场上推销出售。虽然证券化本身并不是一个新事物,但是现在打包和再打包的范围已经空前扩大。评级机构已经无法为这些新型证券的风险进行准确的评级,而很多人却认为这些证券具有和黄金一样高的投资价值,从而大量买进。最典型的例子就是“次级抵押贷款”债券,这些用来购买住房的贷款,基本上就没有考虑借款人的收入水平和工作情况。截至2007年年初,这些新型证券的总价值已经高达1万亿美元。

如果房地产价格能够像1995年那样不断攀升,那么所有的一切都将会处于良性的循环中。然而,到2006年房地产泡沫终于破灭,其场景犹如十年前股市泡沫破裂的再度上演许多新型证券都失去了其原有的价值。结果,它们不仅不再是最高评级的3A级证券,而是成了垃圾债券。由于银行和其他金融机构也都遭受到了巨大的损失,因此它们也开始紧缩信贷和大量减少抵押贷款。经济活动的风险溢价因此大幅提高。

美联储紧急采取了一系列的措施以放松银根,降低利率和扩张信贷,但即便如此,也只能是杯水车薪。随着股市经历了一个世纪以来的最严重的下挫,导致许多金融机构频临破产。许多大型投资公司也都在金 融恐慌中消失。于是美联储和财政部开始联手放贷注资,以帮助几大金融机构走出困境。


相反,我将参考各自的文献。对于这些例子,我使用了美国实际GDP的季度数据,这是我直接从FRED获得的。

names(gdp) <- c("Time","GDP") # 重命名
 
gdp[,"GDP"] <- log(gdp[,"GDP"]) # 取对数

为了直观地了解提取时间序列的周期性成分意味着什么,请查看下图中随时间变化的对数实际GDP的发展情况。


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加

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

数据有明显的增长趋势,到目前为止似乎逐渐变小。此外,该系列似乎以一种或多或少的常规方式围绕这一趋势波动。该系列与趋势的偏差非常小,这种偏差经常发生,但也有相当大的偏差,这种偏差可能会持续几个后续时期。后者是与商业周期分析相关的波动。

时间趋于衰退

从一系列中排除趋势的第一种方法是在时间变量上回归感兴趣的变量并获得剩余值。这些在下图中绘制,其中线性趋势被移除。

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

这种方法相对有争议,因为它假设存在一个恒定的线性时间趋势。正如我们上面所看到的,鉴于趋势增长率随时间的稳步下降,这种情况不太可能发生。然而,仍然可以假设时间趋势的不同函数形式,例如添加二次项,以摆脱趋势。这种方法的另一个缺点是它只能排除趋势,而不能排除噪声,即系列中的非常小的波动。

差分

接下来的方法是采用第一个差异,因为它通常被教导以获得固定的时间序列。这假设数据是不稳定的。取得第一个差异的结果显示在下图中,其中它也与时间趋势系列进行比较。差异数据在零线附近波动得更多,但它也包含很多噪声。

#可视化
 
 g <- melt(dat,id.vars="Time",na.rm=TRUE)
 
levels(g[,2]) <- c("Linear Trend","First Difference")
 
 
 
# 定义绘图函数
 
plot.cycles <- function(d,t) {
 
 
 
axis.line=element_line(size=.3,colour="black"), # 设置绘图参数
 
axis.text=element_text(colour="black"), #  
 
panel.grid=element_blank()) # Set grid lines off
 
}
 
 
 
# 绘图
 
plot.cycles(d=g,t="Linearly Detrended vs. First Difference")

R语言从经济时间序列中用HP滤波器,小波滤波和经验模式分解等提取周期性成分分析

阅读文章


Hodrick Prescott过滤器

Hodrick和Prescott(1981)开发了一种滤波器,它将时间序列分为趋势,周期和噪声分量。该hpfilter功能包含在mFilter包中,需要时间序列和平滑参数。文献表明后者的值为1600。但是,也可以选择更高的值。下图显示了Hodrick-Prescott滤波器获得的实际GDP的周期性成分值,并将其与线性去趋势系列的值进行了比较。两个系列的行为看起来非常相似,只是HP系列在零附近波动较大,而线性去趋势系列仍然包含趋势的组成部分。此外,循环HP系列还包括一些类似噪音的组件。

#绘图
 
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滤波器的结果如下图所示。该方法的一个相对系列的缺点是平滑因子导致在系列的开始和结束时观察的丢失。这可能是小样本的问题。


随时关注您喜欢的主题


# 绘图
 
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。

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


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds