使用statsmodels分析经济数据中的趋势与周期成分

使用statsmodels分析经济数据中的趋势与周期成分

statsmodels Statsmodels: statistical modeling and econometrics in Python statsmodels 项目地址: https://gitcode.com/gh_mirrors/st/statsmodels

引言

在经济时间序列分析中,将数据分解为趋势成分和周期成分是一项基础而重要的工作。statsmodels库提供了多种方法来实现这种分解,本文将详细介绍三种常用方法:Hodrick-Prescott(HP)滤波法、带有ARIMA模型的未观测成分模型(UC-ARIMA)以及带有随机周期的未观测成分模型(UC)。

数据准备

我们以美国失业率(UNRATE)数据为例,该数据从1954年1月开始记录。首先需要导入必要的库并加载数据:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import statsmodels.api as sm

from pandas_datareader.data import DataReader

endog = DataReader("UNRATE", "fred", start="1954-01-01")
endog.index.freq = endog.index.inferred_freq

方法一:Hodrick-Prescott(HP)滤波

HP滤波是最常用的趋势-周期分解方法之一,其核心思想是通过优化问题将时间序列分解为趋势成分和周期成分。

对于月度数据,通常设定平滑参数λ=129600:

hp_cycle, hp_trend = sm.tsa.filters.hpfilter(endog, lamb=129600)

HP滤波的优势在于实现简单,计算效率高,适合快速分析。但它的缺点是需要预先设定λ值,且缺乏统计理论基础。

方法二:UC-ARIMA模型

未观测成分模型(UC)将时间序列视为多个不可直接观测成分的组合。UC-ARIMA模型将趋势建模为随机游走过程,而周期成分则用ARIMA模型描述。

模型形式化表示为:

y_t = μ_t + η_t
μ_{t+1} = μ_t + ε_{t+1}
φ(L)η_t = ν_t

其中φ(L)是AR(4)滞后多项式,ε_t和ν_t是白噪声。

实现代码:

mod_ucarima = sm.tsa.UnobservedComponents(endog, "rwalk", autoregressive=4)
res_ucarima = mod_ucarima.fit(method="powell", disp=False)

方法三:带有随机周期的UC模型

这种方法同样基于未观测成分框架,但显式地建模了周期成分。周期被表示为具有随机振幅和相位的正弦波。

模型方程:

y_t = μ_t + η_t
μ_{t+1} = μ_t + ε_{t+1}
η_{t+1} = η_t cosλη + η_t* sinλη + ω̃_t
η_{t+1}* = -η_t sinλη + η_t* cosλη + ω̃_t*

实现代码:

mod_uc = sm.tsa.UnobservedComponents(
    endog,
    "rwalk",
    cycle=True,
    stochastic_cycle=True,
    damped_cycle=True,
)
res_uc = mod_uc.fit(method="powell", disp=False)

结果比较与可视化

将三种方法的结果进行可视化对比:

fig, axes = plt.subplots(2, figsize=(13, 5))
axes[0].set(title="趋势成分")
axes[0].plot(endog.index, res_uc.level.smoothed, label="UC")
axes[0].plot(endog.index, res_ucarima.level.smoothed, label="UC-ARIMA(2,0)")
axes[0].plot(hp_trend, label="HP滤波")
axes[0].legend(loc="upper left")
axes[0].grid()

axes[1].set(title="周期成分")
axes[1].plot(endog.index, res_uc.cycle.smoothed, label="UC")
axes[1].plot(endog.index, res_ucarima.autoregressive.smoothed, label="UC-ARIMA(2,0)")
axes[1].plot(hp_cycle, label="HP滤波")
axes[1].legend(loc="upper left")
axes[1].grid()

方法对比与选择建议

  1. HP滤波

    • 优点:实现简单,计算速度快
    • 缺点:需要主观选择λ值,缺乏统计基础
    • 适用场景:快速分析,对统计性质要求不高的场景
  2. UC-ARIMA模型

    • 优点:有统计理论基础,可以检验模型假设
    • 缺点:需要选择AR阶数,计算复杂度较高
    • 适用场景:需要统计推断的严谨分析
  3. 随机周期UC模型

    • 优点:直接建模周期行为,物理意义明确
    • 缺点:模型更复杂,可能需要更多数据
    • 适用场景:周期行为明显且需要详细分析的情况

实际应用建议

对于经济数据分析,特别是失业率这样的宏观经济指标:

  1. 初步分析可以使用HP滤波快速了解数据特征
  2. 正式研究建议使用UC类模型,因其具有更好的统计性质
  3. 当关注经济周期特性时,随机周期UC模型能提供更丰富的周期信息
  4. 结果解释时应注意不同方法可能带来的差异

总结

statsmodels提供了多种强大的时间序列分解工具,能够满足不同层次的分析需求。理解这些方法的原理和适用场景,有助于在实际研究中选择合适的工具,获得可靠的分析结果。对于失业率这样的经济指标,三种方法得出的趋势和周期成分基本一致,但UC类模型提供了更丰富的统计信息和更灵活的分析框架。

statsmodels Statsmodels: statistical modeling and econometrics in Python statsmodels 项目地址: https://gitcode.com/gh_mirrors/st/statsmodels

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娄朋虎Imogene

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值