HP / Baxter-King 滤波是什么?
HP / Baxter-King 滤波回答的是一个宏观时间序列中哪些部分可以看作长期趋势,哪些部分是周期波动。它是分解工具,不是因果识别工具。
先用一句话理解
把滤波想成把一条起伏的经济曲线分成慢慢变化的底色和短期上下波动。趋势像潮水方向,周期像浪花;滤波就是试图把两者拆开。
什么时候用
| 判断项 | 教科书式判断 |
|---|---|
| 适合用在 | 宏观序列趋势-周期分解、商业周期描述或去趋势预处理。 |
| 先不要用在 | 想证明政策因果效应,或样本很短、端点很关键。 |
| 最关键的前提 | 平滑参数或带通频率选择要符合数据频率。 |
| 读表顺序 | 先看滤波参数,再看趋势项和周期项是否符合经济直觉。 |
| 论文表述边界 | 滤波结果是构造出来的分解,对参数和端点敏感。 |
把它和相近方法分清楚
| 容易混淆的对象 | 怎么区分 | 初学者记法 |
|---|---|---|
| HP filter | 用平滑惩罚拆趋势和周期。 | 参数 lambda 很关键。 |
| BK filter | 保留特定频率范围的周期。 | 会损失样本端点。 |
| 差分 | 去掉单位根趋势。 | 不直接给平滑趋势。 |
核心直觉和模型公式
HP 滤波目标函数
HP 滤波选择趋势 tau_t 来最小化:
\[\sum_t(y_t-\tau_t)^2+\lambda\sum_t[(\tau_{t+1}-\tau_t)-(\tau_t-\tau_{t-1})]^2\]
第一项要求趋势贴近原序列,第二项要求趋势足够平滑。
公式里的符号怎么读
| 符号 | 含义 | 在本页怎么理解 |
|---|---|---|
| y_t | 原序列 | GDP、投资、价格等宏观变量。 |
| τ_t | 趋势项 | 滤波得到的长期成分。 |
| y_t-τ_t | 周期项 | 围绕趋势的短期波动。 |
| λ | 平滑参数 | 越大趋势越平滑。 |
| endpoint problem | 端点问题 | 样本两端趋势估计不稳定。 |
专业使用口径
专业滤波报告要把参数选择和端点敏感性写清。
| 口径 | 专业写法 |
|---|---|
| 数据频率 | 年度、季度、月度对应不同 lambda 或频带。 |
| 参数透明 | 说明 HP 的 lambda 或 BK 的周期范围。 |
| 端点风险 | 最新几期趋势和周期最不稳定。 |
| 解释边界 | 滤波不是结构模型,不能直接解释因果。 |
一步一步做:从问题到结果的五步
| 步骤 | 这一页具体做什么 | 做到什么程度才算读懂 |
|---|---|---|
| 1. 明确分解目标 | 要趋势还是周期。 | 滤波应服务研究问题。 |
| 2. 选择参数 | 按数据频率设定 lambda 或频带。 | 参数不能随结果调。 |
| 3. 分解序列 | 得到趋势和周期。 | 两者相加回到原序列。 |
| 4. 检查端点 | 样本首尾是否异常敏感。 | 端点不要过度解释。 |
| 5. 做替代分解 | HP、BK、差分或线性趋势对照。 | 滤波结果要稳健。 |
结果怎么读:先读口径,再读数字
本页案例读表时,先记住这个口径:年度聚合观测 = 6;面板案例按 year 聚合。
| 读表顺序 | 本页怎么读 | 不要这样读 |
|---|---|---|
| 先看参数 | lambda 或频带是多少。 | 参数决定分解结果。 |
| 再看趋势 | 长期成分是否平滑合理。 | 过度平滑会掩盖变化。 |
| 然后看周期 | 波动是否围绕零。 | 周期项用于商业周期描述。 |
| 最后看端点 | 最新周期是否可信。 | 端点最容易误判。 |
初学者最容易错在哪里
| 误读 | 为什么错 |
|---|---|
| 把滤波结果当真实趋势 | 错。趋势是方法构造。 |
| 不报告 lambda | 不可复核。 |
| 过度解释端点 | 风险高。端点问题严重。 |
| 用滤波证明政策因果 | 错。滤波只是分解。 |
先看这个案例的结论
- 年度聚合观测 = 6;面板案例按 year 聚合。
- ln Patent 年趋势 = 0.0993;年度均值趋势斜率。
- DFI 年趋势 = 22.3130;数字金融指数年度变化。
- 这些数字来自页面里的结果表;写论文时先解释数值含义,再讨论理论含义。
变量要求和案例口径
| 字段 | 口径 |
|---|---|
| 数据 | CSMAR 风格 A 股企业创新面板 |
| 原始样本 | 196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准 |
| 因变量 | patent_count;回归页通常使用 ln(1 + patent_count) |
| 核心解释变量 | dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index |
| 控制变量 | roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age |
| 输出文件 | hp_filter_results.csv |
| 角色要求 | 因变量、时间变量 |
| 依赖包 | 无额外 Stata 社区包要求 |
实际代码
下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。
import delimited "$DATA_PATH", clear varnames(1) encoding(UTF-8)
gen ln_patent1 = ln(1 + patent_count)
egen firm_id = group(stkcd)
xtset firm_id year
global y ln_patent1
global count_y patent_count
global x dfi_index
global controls roa lev size growth cashflow tobinq top1 dual board indep soe age
gen post = year >= 2018
bysort firm_id: egen pre_dfi = mean(cond(year < 2018, dfi_index, .))
quietly summarize pre_dfi, detail
gen treat = pre_dfi >= r(p50)
gen did = treat * post
gen high_patent = patent_count > 2
gen running_dfi = dfi_index - 260
gen rdd_treat = running_dfi >= 0
collapse (mean) $y, by(year)
tsset year
tsfilter hp y_cycle = $y, smooth(6.25) trend(y_trend)
export delimited using "$JOB_DIR/hp_filter_results.csv", replace
实际输出表
这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。
| 指标 | 数值 | 解释 |
|---|---|---|
| 样本 | 1200 obs / 196 firms / 2015-2020 | 来自共用案例 CSV |
| 因变量 | ln(1 + patent_count) | 企业创新产出 |
| 核心解释变量 | dfi_index | 数字普惠金融指数 |
| 输出文件 | hp_filter_results.csv | empirical-wizard 对应方法产物 |
| 年度聚合观测 | 6 | 面板案例按 year 聚合 |
| ln Patent 年趋势 | 0.0993 | 年度均值趋势斜率 |
| DFI 年趋势 | 22.3130 | 数字金融指数年度变化 |
案例图
这是一张由同一份案例数据生成的页面内诊断图。

论文里怎么写
本文将企业面板按年份聚合后使用HP / Baxter-King 滤波进行时间序列诊断。结果见 hp_filter_results.csv。由于本教学案例年度观测较少,该页重点展示代码和解释框架,正式论文需要更长时间序列。
检查清单
- 先说明数据频率并选择对应 λ,年度、季度和月度不能混用同一参数。
- HP 滤波有端点问题,样本首尾的趋势-周期分解要谨慎读。
- 滤波只是分解趋势和周期,不是识别政策冲击。