跳到正文
cccskills
免费在 GitHub 公开

timeseries-detrending

Tools and techniques for detrending time series data in macroeconomic analysis. Use when working with economic time series that need to be decomposed into trend and cyclical components. Covers HP filter, log transformations for growth series, and correlation analysis of business cycles.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md4.5 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Time Series Detrending for Macroeconomic Analysis

This skill provides guidance on decomposing economic time series into trend and cyclical components, a fundamental technique in business cycle analysis.

Overview

Economic time series like GDP, consumption, and investment contain both long-term trends and short-term fluctuations (business cycles). Separating these components is essential for:

  • Analyzing business cycle correlations
  • Comparing volatility across variables
  • Identifying leading/lagging indicators

The Hodrick-Prescott (HP) Filter

The HP filter is the most widely used method for detrending macroeconomic data. It decomposes a time series into a trend component and a cyclical component.

Mathematical Foundation

Given a time series $y_t$, the HP filter finds the trend $\tau_t$ that minimizes:

$$\sum_{t=1}^{T}(y_t - \tau_t)^2 + \lambda \sum_{t=2}^{T-1}[(\tau_{t+1} - \tau_t) - (\tau_t - \tau_{t-1})]^2$$

Where:

  • First term: Minimizes deviation of data from trend
  • Second term: Penalizes changes in the trend's growth rate
  • $\lambda$: Smoothing parameter controlling the trade-off

Choosing Lambda (λ)

Critical: The choice of λ depends on data frequency:

Data FrequencyRecommended λRationale
Annual100Standard for yearly data
Quarterly1600Hodrick-Prescott (1997) recommendation
Monthly14400Ravn-Uhlig (2002) adjustment

Common mistake: Using λ=1600 (quarterly default) for annual data produces an overly smooth trend that misses important cyclical dynamics.

Python Implementation

from statsmodels.tsa.filters.hp_filter import hpfilter
import numpy as np

# Apply HP filter
# Returns: (cyclical_component, trend_component)
cycle, trend = hpfilter(data, lamb=100)  # For annual data

# For quarterly data
cycle_q, trend_q = hpfilter(quarterly_data, lamb=1600)

Important: The function parameter is lamb (not lambda, which is a Python keyword).

Log Transformation for Growth Series

Why Use Logs?

For most macroeconomic aggregates (GDP, consumption, investment), you should apply the natural logarithm before filtering:

  1. Multiplicative to Additive: Converts percentage changes to log differences
  2. Stabilizes Variance: Growth rates become comparable across time
  3. Economic Interpretation: Cyclical component represents percentage deviations from trend
  4. Standard Practice: Required for business cycle statistics that compare volatilities
import numpy as np

# Apply log transformation BEFORE HP filtering
log_series = np.log(real_series)
cycle, trend = hpfilter(log_series, lamb=100)

# The cycle now represents percentage deviations from trend
# e.g., cycle = 0.02 means 2% above trend

When NOT to Use Logs

  • Series that can be negative (net exports, current account)
  • Series already expressed as rates or percentages
  • Series with zeros

Complete Workflow for Detrending

Step-by-Step Process

  1. Load and clean data: Handle missing values, ensure proper time ordering
  2. Convert to real terms: Deflate nominal values using appropriate price index
  3. Apply log transformation: For positive level variables
  4. Apply HP filter: Use appropriate λ for data frequency
  5. Analyze cyclical component: Compute correlations, volatilities, etc.

Example: Business Cycle Correlation

import pandas as pd
import numpy as np
from statsmodels.tsa.filters.hp_filter import hpfilter

# Load real (inflation-adjusted) data
real_consumption = pd.Series(...)  # Real consumption expenditure
real_investment = pd.Series(...)   # Real fixed investment

# Log transformation
ln_consumption = np.log(real_consumption)
ln_investment = np.log(real_investment)

# HP filter with λ=100 for annual data
cycle_c, trend_c = hpfilter(ln_consumption, lamb=100)
cycle_i, trend_i = hpfilter(ln_investment, lamb=100)

# Compute correlation of cyclical components
correlation = np.corrcoef(cycle_c, cycle_i)[0, 1]
print(f"Business cycle correlation: {correlation:.4f}")

Dependencies

Ensure these packages are installed:

pip install statsmodels pandas numpy

The HP filter is in statsmodels.tsa.filters.hp_filter.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Perform various data analysis on SEC 13-F and obtain some insights of fund activities such as number of holdings, AUM, and change of holdings between two quarters.

中文简介正在准备中。当前显示原文说明。

benchflow-ai/skillsbench18652026年10月13日 更新

AC branch pi-model power flow equations (P/Q and |S|) with transformer tap ratio and phase shift, matching `acopf-math-model.md` and MATPOWER branch fields. Use when computing branch flows in either direction, aggregating bus injections for nodal balance, checking MVA (rateA) limits, computing branch loading %, or debugging sign/units issues in AC power flow.

中文简介正在准备中。当前显示原文说明。

benchflow-ai/skillsbench18652026年10月13日 更新

Redact text from PDF documents for blind review anonymization

中文简介正在准备中。当前显示原文说明。

benchflow-ai/skillsbench18652026年10月13日 更新

Use when checking simplified ADA-derived plan-view bathroom accessibility constraints such as turning space, door clear width, toilet centerline, grab bars, and lavatory knee/toe clearance.

中文简介正在准备中。当前显示原文说明。

benchflow-ai/skillsbench18652026年10月13日 更新

Analyze failed GitHub Action jobs for a pull request.

中文简介正在准备中。当前显示原文说明。

benchflow-ai/skillsbench18652026年10月13日 更新

Use when extracting plan-view architectural geometry from DXF files with semantic CAD layers, especially when outputs must normalize rooms, doors, fixtures, clearances, and grab bars into machine-checkable JSON.

中文简介正在准备中。当前显示原文说明。

benchflow-ai/skillsbench18652026年10月13日 更新

查看 benchflow-ai 的全部技能

报告此技能的问题