进行时间序列的数据分析时,季节因素调整与hp滤波是进行数据处理与准备工作的常见必要环节。本文简要梳理季节调整与hp滤波的应用场景,以及在Python中的实现方法。

1. 季节调整方法

季节调整的目的是剔除季节因素的影响,使得数据平滑。进行季节调整的目的其一是使得不同季节的数据具有可比性,其二是使得一般的时间序列模型能够适用于数据,例如我们观察到近期燃油价格上涨,想通过ARMA模型验证其趋势性,但燃油上涨的时间窗口在冬季,所以要通过季节调整方法剔除掉季节作用,余下的价格上涨才有验证的意义。

常用的季节调整方法包括:(1)求同比;(2)census X12/X13季节调整;(3)平滑分离方法。

1.1 求同比

Python中求同比非常简单,例如对于月度时间序列数据M2:

dM2 = M2.pct_change(12)

即可求出同比。

如果是季度数据,将函数参数换为4即可。而对于中国的某些数据,例如社会零售、固定资产投资等,其1月或2月的数据是没有的,按照周期长度相应调整参数即可。

求同比方法最为广泛使用,但不适用于带有零值或负值的数据。

1.2 census X12/X13季节调整

这里的“census”是指美国统计局(United States Census Bureau),所以美国的各种统计数据都是通过这套方法进行季节调整的。这套方法在学术界得到了广泛的使用。

方法的具体计算步骤,可参考官方网站(X-13ARIMA-SEATS Seasonal Adjustment Program),这里只简单给出一个使用案例:

from fredapi import Fred
fred = Fred(api_key='XXXXXX')
import statsmodels.api as sm M2NS = fred.get_series('M2NS')
M2SL = fred.get_series('M2SL')
X13PATH = 'C:\\WinX13\\x13as\\x13as.exe'
bunch = sm.tsa.x13_arima_analysis(M2NS,x12path = X13PATH)
bunch.seasadj

为了使用程序,需先在美国统计局网站上下载二进制程序到电脑,通过指定程序路径的方法在python中调用。在R语言中也要这样麻烦。

案例程序中从FRED网站下载了美国M2的月度数据,其中M2NS是未进行季节调整的数据,M2SL是季节调整后的数据。

但将bunch.seasadj的调整结果和M2SL进行比较,发现略有差异,这或许是其中使用的某些参数不一致所致。

1.3 平滑分离方法

Python的Statsmodels模块中提供了一种应用简单的季节调整方法——seasonal_decompose。

from fredapi import Fred
fred = Fred(api_key='XXXXXX')
import statsmodels.api as sm M2NS = fred.get_series('M2NS')
M2SL = fred.get_series('M2SL')
m2sd = sm.tsa.seasonal_decompose(M2NS,model='addictive', extrapolate_trend='freq')
m2sd.trend
m2sd.seasonal
m2sd.resid

这样,M2NS就被分为了trend、seasonal和resid三个部分。如果模型选择了'multiplicative'的话,三个部分为相乘关系。

使用该函数需要注意的是,'extrapolate_trend'参数如果不指定,分解结果中得不到trend和resid值。

和M2SL比较一下会发现,这一方法得到的结果确实比census X12/X13方法差一些。

2. hp滤波

做宏观经济研究的应该都比较熟悉hp滤波了。该方法由Hodrick and Prescott(1997)提出,因为作者的原因被简称hp滤波。

from fredapi import Fred
fred = Fred(api_key='XXXXXX')
import statsmodels.api as sm M2SL = fred.get_series('M2SL')
cycle, trend = sm.tsa.filters.hpfilter(M2SL, lamb=129600)

其中cycle和trend就分别是hp滤波得到的周期项和趋势项。根据Ravn and Uhlig(2002)的建议,对于年度数据lambda参数取值6.25(1600/44),对于季度数据取值1600,对于月度数据取值129600(1600*34)。

虽然hp滤波得到的趋势项一定程度上也剔除了季节因素,但个人习惯还是不要将hp滤波作为季节调整的方法。该滤波方法的主要应用还是在于提取经济周期(外生冲击)。笔者在处理经济数据时常在季节调整后再用hp滤波计算经济指标“超预期”的部分。

References

[1] Hodrick, R. J., & Prescott, E. C. (1997). Postwar US business cycles: an empirical investigation. Journal of Money, credit, and Banking, 1-16.

[2] Ravn, M. O., & Uhlig, H. (2002). On adjusting the Hodrick-Prescott filter for the frequency of observations. Review of economics and statistics, 84(2), 371-376.

[方法]季节调整与hp滤波方法的更多相关文章

  1. 七中滤波方法测试matlab实现

    http://blog.163.com/xiaheng0804@126/blog/static/1205282120132129471816/ 创建两个混合信号,便于更好测试滤波器效果.同时用七中滤波 ...

  2. 三维重建面试0:*SLAM滤波方法的串联综述

    知乎上的提问,高翔作了回答:能否简单并且易懂地介绍一下多个基于滤波方法的SLAM算法原理? 写的比较通顺,抄之.如有异议,请拜访原文.如有侵权,请联系删除. 我怎么会写得那么长--如果您有兴趣可以和我 ...

  3. HP滤波原理浅学

    今天偶然看到如果使用eviews做HP滤波,一时好奇,于是找了点资料看看~ 由于纯属自学,没有找到教材,大家姑且一看咯,也不知道对不对哈.

  4. 类的继承和多态性-编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,

    编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 ...

  5. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  6. [Effective JavaScript 笔记]第25条:使用bind方法提取具有确定接收者的方法

    js里方法和属性值为函数,就像一个东西两种称呼一个样,比如土豆,也叫马铃薯,一个样.既然一样,那就可以对对象的方法提取出来为函数,然后把提取出来的函数作为回调函数直接传递给高阶函数. 高阶函数是什么 ...

  7. jquery 连写注释;siblings() 方法;jQuery 的3种滑动方法;slideUp()向上滑动;slideDown()向下滑动;slideToggle()来回滑动

    首先我们看两个连写注释 第一个:   /* 点击头像,显示基本资料 */ $(".f-chatTit a.avatar").click(function(){ $(this).hi ...

  8. 深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。

    1:要判断2个字符串变量是否相等,最高效的方法是看它们是否指向相同的内存地址.前面使用RefernceEquals方法来比较.如果2个变量指向的是不同的内存地址,那么就需要逐字符的比较2个字符串的变量 ...

  9. 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法

    using Microsoft.VisualStudio.TestTools.UnitTesting; 如果该DLL应用的是 C:\Program Files\Microsoft Visual Stu ...

随机推荐

  1. Python代码混淆和加密技术

    Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. http: ...

  2. mysql的数据库开放权限

    链接数据库之后运行下面的命令即可 grant all PRIVILEGES on *.* to %username%@'%' identified by '%password%'; 如给root链接数 ...

  3. 6_14 Abbott的复仇(UVa816)<图的最短路BFS>

    1999次世界总决赛的比赛包括一个骰子迷宫问题.在这个问题被写的时候,法官们无法发现骰子迷宫概念的原始来源.不久之后的比赛,但是,罗伯特先生雅培,无数的迷宫和对作者的创造者主题,联系大赛评委,自称是骰 ...

  4. ES+VBA 实现批量添加网络图片

    需求:通过自动读取相对应列的图片网址,自动添加到图片列,从而完成添加图片 案例:需要将备注列的图片网址添加到图片列的内容 关键代码 '引入API Private Declare Function UR ...

  5. opencv:形态学操作-开闭操作

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  6. Java进阶学习(4)之继承与多态(上)

    继承 媒体资料库的设计 代码复制是质量不良的表现 不具有可扩展性和可维护性 继承 子类父类关系 子类继承了什么 先定义初始化,后构造器 子类和父类的关系 子类有变量和父类变量相同时,父类变量隐藏 父类 ...

  7. 使用ltp4j碰到Can't find dependent libraries报错信息的问题解决

    项目中使用了哈工大的自然语言处理模块ltp4j,使用idea工具集成到项目中之后,在本机运行没有问题,一切正常.打成war包,部署到服务器上,使用的时候报错Can't find dependent l ...

  8. 推荐算法之---FM算法;

    一,FM算法: 1,逻辑回归上面进行了交叉特征.算法复杂度优化从O(n^3)->O(k*n^2)->O(k*n). 2,本质:每个特征都有一个k维的向量,代表的是每个特征都有k个不可告人的 ...

  9. 吴裕雄 python 机器学习——模型选择验证曲线validation_curve模型

    import numpy as np import matplotlib.pyplot as plt from sklearn.svm import LinearSVC from sklearn.da ...

  10. ListView 基础列表组件、水平 列表组件、图标组件

    一.Flutter 列表组件概述 列表布局是我们项目开发中最常用的一种布局方式.Flutter 中我们可以通过 ListView 来定义 列表项,支持垂直和水平方向展示.通过一个属性就可以控制列表的显 ...