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

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

经济时间序列的分析通常需要提取其周期性成分。这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分。它基于《宏观经济学手册》中Stock和Watson(1999)关于商业周期的章节,但也介绍了一些较新的方法,例如汉密尔顿(2018)替代HP滤波器,小波滤波和经验模态分解。

数据

我使用从1970Q1到2016Q4的美国对数实际GDP的季度数据来说明不同的方法。时间序列是通过  Quandl  及其相应的R包获得的。


#加载用于数据下载和转换的软件包
library(dplyr)
library(Quandl)
library(tidyr)
#下载数据
data <- Quandl("FRED/GDPC1", order = "asc",
start_date = "1970-01-01", end_date = "2016-10-01")  %>%
rename(date = Date,
gdp = Value) %>%
mutate(lgdp = log(gdp)) # 获取对数

library(ggplot2)
ggplot(data, aes(x = date, y = lgdp)) +
geom_line() +
theme_classic()

数据有明显的增长趋势,到现在似乎逐渐变小。此外,似乎或多或少有规律地围绕这一趋势波动。与趋势之间存在相对较长的持久偏差,可以将其视为周期性波动。  

 

与线性趋势的偏差

从系列中提取趋势的第一种方法是在常数和趋势项上回归目标变量并获得拟合值。在下图中绘制。

 

# 添加趋势

data <- data %>%

mutate(trend = 1:n())
# 用常数和趋势估算模型

time_detrend <- fitted(lm(lgdp ~ trend, data = data))

names(time_detrend) <- NULL

# 将系列添加到主数据框

data <- data %>%

mutate(lin_trend = time_detrend)
# 为图创建数据框

temp <- data %>%

select(date, lgdp, lin_trend) %>%
gather(key = "Variable", value = "value", -date)
# 画图

ggplot(temp, aes(x = date, y = value, colour = Variable)) +

此方法相对有争议,因为它假定存在恒定的线性时间趋势。正如我们在上面看到的,鉴于趋势的增长率随着时间的推移持续下降,这不太可能。但是,仍然可以采用时间趋势的其他函数形式(例如二次项)来说明趋势的特殊性。该方法的另一个缺点是,它仅排除趋势,而不排除噪声,即序列中很小的波动。

Hodrick-Prescott过滤器

Hodrick和Prescott(1981)开发了一个过滤器,将时间序列分为趋势和周期性分量。与线性趋势相反,所谓的  HP过滤器可  估算趋势,该趋势会随时间变化。研究人员手动确定允许这种趋势改变的程度,即平滑参数λλ。

文献表明季度数据的值为1600。但是,也可以选择更高的值。下图绘制了由HP过滤器获得的实际GDP周期性成分的值,并将其与线性趋势下的序列的值进行比较。

 

 

尽管HP过滤器在经济学中得到了广泛的应用,但它们的某些功能也受到了广泛的批评。

基于回归的HP过滤器

汉密尔顿(2018)还提出了另一种HP过滤器的方法。它可以归结为一个简单的回归模型,其中 时间序列的 h 前导根据时间序列的最新p值进行回归。

 

Baxter King过滤器

Baxter和King(1994,1999)提出了一种过滤器,其产生的结果与HP过滤器非常相似。另外,它从时间序列中去除了噪声,因此可以对周期分量进行平滑估计。该方法的一个相对严重的缺点是,平滑因子导致序列开始和结束时观测值的损失。当样本量较小且当前经济状况令人关注时,这可能是一个问题。

 

小波滤波器

Yogo(2008)提出使用小波滤波器从时间序列数据中提取业务周期。该方法的优点是该函数不仅允许提取序列的趋势,周期和噪声,而且还可以更明确地了解周期发生的时间段。

R中的方法实现也很简洁,但是在使用之前需要进行一些其他的数据转换。



# 计算对数GDP的一阶差分

data <- data %>%

mutate(dlgdp = lgdp - lag(lgdp, 1))


#获取数据

y <- na.omit(data$dlgdp)



#运行过滤器

wave_gdp <- mra(y, J = 5)


# 创建用于绘制的数据框

temp <- wave_gdp %>%
gather(key = "imf",


# 绘制mra输出

ggplot(temp, aes(x = date, y = value)) +
geom_line() +

 


data <- data %>%
select(date, bk, wave) %>%
gather(key = "Variabl


ggplot(temp, aes(x = date, y = value, colour = Variable)) +

  geom_hlin

经验模态分解(EMD)

Kozic和Sever(2014)提出了经验模态分解作为商业周期提取的另一种方法,正如Huang等人(2014年)提出的那样。(1998)。 emd 函数可以在EMD  包中找到,  并且需要一个不同的时间序列,一个边界条件和一个指定的规则,在该点上迭代算法可以停止。滤波方法的结果与HP,BK和小波滤波相对不同。

 

 

 

Chan(2017)

初始值


# X_gamma

x_gamma <- cbind(2:(tt +




# H_2

h2 <- diag(1, tt)
diag(h2[-1,
t)]) <- 1

h2h2 <- crossprod(h2)


# H_phi

h_phi <- diag(1, tt)
phi <- matrix(




# sigma tau的逆

s_tau_i <- 1 / .001



#  sigma c的逆

s_c_i <- 1 / .5



# gamma

gamma <- t(rep(y[1], 2)) # 应该接近该序列的第一个值

Gibbs 采样

 

 


相关文章
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
14天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
38 3
|
2月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
3月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
3月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
3月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
67 3
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
6月前
|
数据采集 数据可视化
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)