原文链接:http://tecdat.cn/?p=23000

最近咱们被客户要求撰写对于合成商业周期时间序列的钻研报告,包含一些图形和统计输入。

本文蕴含各种过滤器,可用于合成南非GDP的办法。咱们做的第一件事是革除以后环境中的所有变量。这能够通过以下命令进行

合成南非GDP数据

本文蕴含各种过滤器,可用于合成南非GDP的办法。咱们做的第一件事是革除以后环境中的所有变量。这能够通过以下命令进行。

rm(list = ls())graphics.off()

载入数据

如前所述,南非的GDP数据将其作为工夫序列存储在gdp中,咱们执行以下命令。

gdp <- ts(dat.tmp, start = c(1960, 2), frequency = 4)

为了确保这些计算和提取的后果是正确的,咱们检查一下数据的图表。

plot(gdp)

线性滤波器_去除数据线性趋势_

为了预计一个线性趋势,咱们能够利用一个包含工夫趋势和常数的线性回归模型。为了预计这样一个模型,咱们应用lm命令,如下。

lin.mod$fitted.values  # 拟合值与工夫趋势无关ts(lin.trend, start = c(1960, 1))  # 为趋势创立一个工夫序列变量gdp - linear  # 周期是数据和线性趋势之间的差别

回归的拟合值蕴含与线性趋势无关的信息。这些信息须要从模型对象lin.mod中提取,在下面的块中,咱们将这些值调配给工夫序列对象linear。而后从数据中剔除趋势,就失去了周期。

而后咱们能够借助上面的命令来绘制这个后果,其中趋势和周期被绘制在不同的数字上。

plot.ts(gdp, ylab = "")  lines(linear, col = "red")  legend("topleft", legend = c("data", "trend")

霍德里克 - 普雷斯科特 (Hodrick-Prescott,HP) _滤波器_对数据进行去趋势解决

要用风行的HP滤波法合成这个数据。在这种状况下,咱们将lambda的值设置为1600,这也是对季度数据的倡议。

hp(gdp, freq = 1600)plot.ts(gdp, ylab = "")  # 绘制工夫序列plot.ts(hp.decom$cycle, ylab = "")  # 绘制周期图

这仿佛更精确地反映了咱们对南非经济体现的了解。


点击题目查阅往期内容

R语言从经济工夫序列中用HP滤波器,小波滤波和教训模态合成等提取周期性成分剖析

左右滑动查看更多

01

02

03

04

用Baxter-King滤波器去趋势数据

为了利用Baxter-King 滤波器。在这种状况下,咱们须要指定周期的频带,其下限被设定为32,上限被设定为6。

bk(gdp, pl = 6, pu = 32)plot.ts(gdp, ylab = "")plot.ts(cycle, ylab = "")

这仿佛再次为南非经济流动的周期性提供了一个相当精确的表述。还要留神的是,周期的示意比以前提供的要平滑得多,因为乐音不包含在周期中。

Christiano-Fitzgerald滤波器去趋势数据

这个滤波器的性质与下面提供的十分类似。此外,产生与Baxter-King滤波器高度类似的后果。

plot.ts(gdp, ylab = "")plot.ts(cfcycle, ylab = "")

用Beveridge-Nelson合成法 "去趋势 "数据 

为了将数据合成为随机趋势和安稳周期,咱们能够采纳Beveridge-Nelson合成法。当采纳这种技术时,咱们须要指定与安稳局部无关的滞后期的数量。在我上面的例子中,我假如有八个滞后期。

plot.ts(gdp, ylab = "")lines(bn.trend, col = "red")plot.ts(bn.cycle, ylab = "")

比拟周期的不同衡量标准

而后,咱们能够将所有这些后果联合在一张图上,思考各自的相似性和差别。在这个例子中,我创立了一个工夫序列ts.union,然而我也能够先绘制一个繁多的序列,而后再应用lines命令在下面绘制间断的图。

 ts.union(lin.cycle, hp.decom, bp.decom,     cf.decom, bn.cycle)plot.ts(comb, ylab = "")

谱合成

在咱们思考应用谱技术之前,最好先革除以后环境中的所有变量,并敞开所有的图。下一步是确保你能够通过应用library命令来拜访这些包中的程序。

library(tsm)library(TSA)library(mFilter)

应用谱技术进行合成。咱们能够为三个工夫序列变量生成数值,而后将它们组合成一个繁多的变量。

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

为了察看这些变量,咱们能够把它们绘制在一个独自的轴上。

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

当然,咱们能够利用一个过滤器,从总体工夫序列变量中去除一些不须要的成分。为此,咱们能够利用上上限绝对较窄的Christiano-Fitzgerald滤波器。尔后,咱们应用利用于与周期无关的信息的周期图,来考察它是否胜利地剔除了一些频率成分。

cf(y0)gram(cycle)

这个后果将表明,滤波器曾经排除了大部分的高频率成分。为了看看这个周期与之前的数据有什么关系,咱们把通过滤波器的周期性信息绘制在重量上。此外,咱们还将这个后果绘制在综合周期的变量上。

plot(x1, type = "l", lty = 1)lines(cycle, lty = 3, lwd = 3)plot(y, type = "l", lty = 1)lines(cycle, lty = 3, lwd = 3)

在这两种状况下,它仿佛都对过程中的趋势做了正当的形容。

南非商业周期的谱合成法

为了思考如何在实践中应用这些频谱合成,咱们当初能够思考将这些技术利用于南非商业周期的各种特色中。

下一步将是运行所有的过滤器,这些过滤器被利用于辨认南非商业周期的不同办法。

当初,让咱们对商业周期的每一个规范利用一个周期图。

线性滤波器提供了一个很差的后果,因为趋势显著占主导地位(这不是周期应该有的)。这与Hodrick-Prescott滤波器的特色造成比照,后者的趋势信息曾经被去除。Baxter & King和Christiano & Fitzgerald的带通滤波器也是这种状况。在这两种状况下,噪声也曾经被去除。最初的后果与Beveridge-Nelson合成无关,咱们留神到周期包含大量的趋势和大量的噪声。

小波合成

为了提供一个小波合成的例子,咱们将把该办法利用于南非通货膨胀的数据。这将容许应用在这个过程中推导出对趋势的另一种掂量办法,这能够被认为是代表外围通货膨胀。请留神,这种技术能够利用于任何阶数的单整数据,所以咱们不须要首先思考变量的单整阶数。

而后,咱们将利用消费者价格指数的月度数据,该数据蕴含在SARB的季度布告中。数据能够追溯到2002年。为了计算通货膨胀的同比指标,咱们应用diff和lag命令。

diff/cpi[-1 * (length - 11):length]

为了确保所有这些变量的转换都已正确进行,咱们对数据进行绘图。

plot(inf.yoy)

因为咱们在这种状况下次要对辨认平滑的趋势感兴趣,咱们将应用贝希斯函数。这样的函数是Daubechies 4小波,它利用修改的离散小波变换办法。此外,咱们还将应用三个母小波来解决各自的高频成分。

wt(yoy, "d4")

而后咱们能够为每个独立的频率成分绘制后果,如下所示。

plot.ts(yoy)for (i in 1:4) plot.ts(d4[[i]]

如果咱们当初想在数据上绘制趋势(父小波)。

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

相干经济变量的周期性成分之间的相关性

为了确定周期的特色是否适合,咱们能够思考宏观经济总量的一些不同周期性办法之间的相关性。例如,咱们能够思考产出和生产(或待业)的周期性在不同的滞后期应该是相干的。如果它们不相干,那么该办法可能无奈精确形容各自变量的周期性成分。

在本文应用的例子中,代码可能有点难以了解,但咱们激励你本人去钻研,以进步你对这个编码环境的总体了解。 

下一步是读入数据并为数据的各种周期性成分创立一些矩阵。

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)

应用下面蕴含的办法对数据进行过滤。

for (i in 1:n) {        # 用线性滤波器对数据进行去趋势解决    lin.mod <- lm(dat[, i] ~ time(dat[, i]))        # 用HP滤波器去趋势数据    yc_hp[, i] <- hp.cycle        #用带通滤波器去趋势数据    yc_bp[, i] <- bp.cycle        #  Beveridge-Nelson合成    yc_bn[, i] <- bn.[, 2]}

计算不同提前期和滞后期的相干关系。

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

绘制后果。

# 线性趋势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语言合成商业周期时间序列:线性滤波器、HP滤波器、Baxter滤波器、Beveridge Nelson合成等去趋势法 ,点击“浏览原文”获取全文残缺材料。


点击题目查阅往期内容

R语言工夫序列合成和异样检测办法利用案例R语言矩阵特征值合成(谱合成)和奇怪值合成(SVD)特征向量剖析有价证券数据R语言从经济工夫序列中用HP滤波器,小波滤波和教训模态合成等提取周期性成分剖析
R语言状态空间模型和卡尔曼滤波预测酒精死亡人数工夫序列matlab实现扩大卡尔曼滤波(EKF)进行故障检测
卡尔曼滤波器:用R语言中的KFAS建模工夫序列
状态空间模型:卡尔曼滤波器KFAS建模工夫序列
R语言用LOESS(部分加权回归)节令趋势合成(STL)进行工夫序列异样检测
应用R语言随机稳定模型SV解决工夫序列中的随机稳定率
PYTHON用时变马尔可夫区制转换(MRS)自回归模型剖析经济工夫序列
R语言无限混合模型(FMM,finite mixture model)EM算法聚类分析间歇泉喷发工夫
长短期记忆网络LSTM在工夫序列预测和文本分类中的利用
Python随机稳定率(SV)模型对标普500指数工夫序列波动性预测
R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测工夫序列数据
R语言应用ARIMAX预测失业率经济工夫序列数据
R语言用ARIMA模型,ARIMAX模型预测冰淇淋生产工夫序列数据
R语言经济学:动静模型均匀(DMA)、动静模型抉择(DMS)预测原油工夫序列价格