之前是一直在用 Eviews 做 X-12 的季节调整,但是调整选项和 Stata 的相比确实有点少了,影响精度。
另外,做 BigData 的模型动则 几千个 个体不可能一个个在 Eviews 里手动调整,有人提到过用 Eviews 命令行批量执行,但是控制选项又很困难(我也没试过,命令行能不能跑起来也是个问题),总的来说用 Stata 季节调整是最优的。
用 Stata 最大的问题就是不好批量做季节调整,于是踩了一些坑,思考了一套最快的批量调整方案,附代码。
在调整前你需要具备 Stata 季节调整程序,可以在 人大经济论坛 下。findit sax12net install st0255.pkg
java
运行
12 三、解决方案注:假如你只需要调整几个变量,不需要查看本教程,直接输入命令 db sax12 调整即可,可以参考 Lee_iris 这套不错的设定方案。
先把大量数据导进 Stata ,我们这里假设的是 多变量 、 面板数据 ,注意变量名字统一用英文,中文 x12a.exe 不识别,建议使用 var01 或者 var1 这种形式的命名,为后续操作提供便利。
生成时间序列,确定时间区间。在 Stata 执行以下代码:
gen t=tm(2009m1)+_n-1tsset t, monthly
java
运行
12这段代码的作用是先生成时间数据,之后设定,下面介绍修改项:
(1)其中 tm() 函数要根据你的时间形式来选取,如果是 2009m1 也就是只有到月度的数据(最常用的),使用 tm() 函数即可,如果是精确到 日 ,请自行百度找到相应函数替换,有关函数可参考 这篇文章 。
(2)其中 tm() 函数内是数据的起始时间,这里是假定为了 2009m1 开始,可以自行替换自己的起始时间,注意 tsset 之后根据显示的确认一下你的时间区间是否正确。
sax12 var01, satype(single) inpref(z1.spc) outpref(z1) transfunc(none) regpre( const td ) ammaxlag(2 1) ammaxdiff(2 1) ammaxlead(12) x11mode(add) x11seas(x11default)
java
运行
1注:这套调整方案是参考 Lee_iris 的,如果想自己设定调整方案,先用 db sax12 界面化执行一次你的方案,再把自动执行的代码拷贝过来即可作为方案。
Python 拼接方案代码:
import os # 面板数据个体数 + 1 n = 35 text = 'sax12 var' text1 = ', satype(single) inpref(z' text2 = '.spc) outpref(z' text3 = ') transfunc(none) regpre( const td ) ammaxlag(2 1) ammaxdiff(2 1) ammaxlead(12) x11mode(add) x11seas(x11default)' stata = '' for i in range(1,n): stata += text if i<=9: stata += '0' + str(i) else: stata += str(i) stata += text1 + str(i) + text2 + str(i) + text3 + 'nn' with open('BatchSeasonalProcessingStatementGeneration.txt', 'w') as f: f.write(stata)
python
运行
123456789101112131415161718192021222324注:这里变量名假设成了 z01、z09 这种,所以要手动在前十个补 0,你也可以设定成不带 0 前缀的。当然你用 var01 、var1 这种类型也可以,不过后面清扫文件的时候要小心。
(1)有三个需要拼接的地方,第一个是上面 Stata 例子语句里变量 var01 部分,也是你 Stata 里给变量设定的名字,第二个是 .spc 文件,我们这里用 Python 拼接的时候,假定为了 z+序号 形式的,为了给后续操作提供便利,建议使用相同格式,第三个是输出前缀,这里同样使用 z+序号 的前缀格式。
(2)注意要修改 n 为你的面板个体数。(假定有 34 个省,那就是 35)
如果你不熟悉 Python ,可以参考格式自行用熟悉的语言拼接生成。另外如果你只有 几十个个体 ,网盘文件里还提供了生成好的 几十个 命令行,无需进行这一步。
将批量生成的代码在 Stata 里跑完,执行过程会不断有 控制台 窗口弹出,不要点击,否则会导致暂停。另外,还会自动打开 季节调整报告 ,无需理会,最后一并关掉即可。注:如果报错,说明你的 季节调整程序 即 x12a.exe 没有放对位置,或者 sax12 库没有安装,亦或是 空格出错 ,单词中断了,自行检查,可以先跑一条试试看。
跑完之后打开你的 Stata 安装根目录,下面会有一大堆 z+序号 格式的文件,全部复制备份起来,如果你想了解每一个文件的内容并做 X-12 季节调整 分析和预测,请打开以 .out 为结尾的文件查看 季节调整报告。import os # n 为面板数据个体数 + 1 n = 35 # t 为时间期数 t = 11 * 12 data = {} for i in range(1,n): data[str(i)] = [] with open('z' + str(i) + '.d11', 'r') as f: lines = f.readlines() for line in lines: lineList = line.strip().split('t') if lineList[0] != 'date' and lineList[0] != '------': data[str(i)].append(lineList[1]) with open('SeasonalAdjustmentDataExtraction.csv', 'w') as f: for i in range(t): lineData = '' for j in range(1,n): lineData += data[str(j)][i] + ',' lineData = lineData[:-1] lineData += 'n' f.write(lineData) # 清扫 file_dir = r'./' files = os.listdir(file_dir) for i in range(len(files)): if files[i].find('z') != -1: os.remove(files[i]) for i in range(1,n): fileName = 'var' if i<=9: fileName += '0' + str(i) else: fileName += str(i) fileName += '.dat' os.remove(fileName)
python
运行
1234567891011121314151617181920212223242526272829303132333435363738394041注:需要修改的只有 n 和 t ,按自己情况来。
执行完毕之后,自动清扫了冗余的 z+序号 文件,同时生成了·SeasonalAdjustmentDataExtraction.csv 汇总表格,点开即为 季节调整 后的 面板数据 结果,横向为时间期数,纵向为按 var01 即 Stata 命名顺序排列的个体。注:清扫的时候是把所有 z 开头的文件都清扫了,如果要自定义清扫,可以手动删除或者写别的规则,之所以用 z 开头的变量是因为 Stata 根目录没有带 z 字母的文件。
后记虽然流程有点小复杂,但是都有相应的机械化方案,还是比较快的,Eviews 即使有最新的 X-13 解决方案, 自动化 还是问题,另外没有国内相适配的假期设定。
相关知识
【Stata】数据批量季节调整教程
Stata基础绘图教程
Stata绘图与统计分析结合:数据洞察力提升的关键
【小花经济学术】如何用Stata进行地图数据可视化
Stata绘图高级技巧:掌握创建复杂统计与交互式图表的专家秘籍
ChatGPT助力Stata:学术研究的新革命性工具
宏观数据季节调整与运用
Eviews 的时间序列批量处理之季节调整
探索中国地理信息的宝库:中国省市县ArcGIS地图数据及县级数据资源
数据分析遇到PDF文本,怎么用Python批量提取内容
网址: 【Stata】数据批量季节调整教程 https://m.huajiangbk.com/newsview2009797.html
上一篇: 95后帅气小伙在杭州开棒冰批发店 |
下一篇: 梁山十大马战高手,林冲仅第三,有 |