【问题标题】:Why does NSDIFFS (R forecast package) never show seasonality?为什么 NSDIFFS(R 预测包)从不显示季节性?
【发布时间】:2014-12-19 16:25:26
【问题描述】:

我一直在使用 EViews statconn DCOM 接口通过 R 的预测包中的 nsdiffs(test=c("ch")) 函数从 FRED 循环大量系列,以检查其中有多少百分比需要季节性差异化。然而,经过 26,000+ 系列的试运行,OCSB 测试返回 1,245 个阳性结果(输出 = 1),但 Canova Hansen 测试返回零,这让我怀疑我做错了什么,但不能不知道到底是什么

for !k = 1 to !keriesnumber
    xput(rtype=ts) sertest!k 'pass the series from EViews to R
    xrun library(forecast) 'call necessary forecast library
    xrun sertest!k <- ts(sertest!k, start=c(1990, 1), end=c(2014, 6), frequency=12)  'specify timeseries properties
    xrun kpss_!k<-  ndiffs(sertest!k)   'kpss test
    xrun ch_!k<-nsdiffs(sertest!k,m=frequency(sertest!k),test=c("ch")) 'ch test
    xrun ocsb_!k<-nsdiffs(sertest!k,m=frequency(sertest!k),test=c("ocsb")) 'ocsb test
    xget kpss_!k 'return the three output integers back to eviews
    xget ch_!k
    xget ocsb_!k
    !count=!count+1
    kpss_vector(!count)=kpss_!k 'store the results in a vector
    ch_vector(!count)=ch_!k
    ocsb_vector(!count)=ocsb_!k
next

我是否在 nsdiffs 命令中错误地指定了频率或其他内容?如果是这样,为什么(我认为正确?)毫无问题地进行 OCSB:~1/26 似乎是合理的次数,不拒绝此类数据集上的空值。我希望作为一个非本地 R 用户,我只是忘记调用一个库或一些简单的东西,并且某种灵魂可以识别这个问题:)。否则,我测试的 26000 个宏观经济序列中没有一个需要在 CH 测试下进行季节性差异,这似乎很奇怪。我还使用原始 CH 论文 (http://www.ssc.wisc.edu/~bhansen/progs/jbes_95.html) 中的一些数据尝试了类似的例程,但仍然无法找到神圣的输出 =1。

【问题讨论】:

  • 我已经扩展了我原来的答案。

标签: r time-series forecasting


【解决方案1】:

采用参考论文中显示的应用程序中使用的系列“工资”,根据 Canova 和 Hansen 检验返回值 1(即,不稳定的季节性周期表明需要季节性差异):

require(forecast)
wage <- structure(c(2.32, 2.35, 2.38, 2.4, 2.41, 2.44, 2.47, 2.5, 2.52, 
2.55, 2.58, 2.61, 2.63, 2.66, 2.7, 2.73, 2.78, 2.82, 2.87, 2.92, 
2.96, 3.02, 3.07, 3.12, 3.15, 3.2, 3.26, 3.3, 3.36, 3.43, 3.49, 
3.53, 3.61, 3.66, 3.72, 3.79, 3.83, 3.9, 3.98, 4.05, 4.09, 4.18, 
4.29, 4.39, 4.42, 4.48, 4.57, 4.66, 4.73, 4.8, 4.91, 5.01, 5.1, 
5.19, 5.29, 5.4, 5.5, 5.63, 5.74, 5.89, 6, 6.07, 6.21, 6.34, 
6.46, 6.57, 6.7, 6.9, 7.06, 7.17, 7.31, 7.44, 7.55, 7.62, 7.71, 
7.81, 7.91, 7.96, 8.02, 8.15, 8.25, 8.29, 8.35, 8.43, 8.51, 8.54, 
8.59, 8.68), .Tsp = c(1964, 1985.75, 4), class = "ts")
x <- diff(log(wage))
nsdiffs(x, frequency(x), test = "ch")
# [1] 1

该系列的检验统计量值为 1.11,接近参考论文中报告的 1.14。在计算协方差矩阵时,由于滞后截断参数的选择不同,可能会出现差异。 (下面的例子需要从forecast包的源文件中复制和粘贴函数SeasDummySD.test,因为这些函数没有被导出。)

SD.test(x, 4)
[1] 1.112811

使用其他序列时,请记住在频率为零时过滤可能的单位根,并对变换后的序列(如果需要)应用 Canova 和 Hansen 检验,例如数据的一阶差分。

编辑

我没有在auto.arima 的文档中找到 OP 提到的语句,但查看源代码似乎首先确定了季节性差异的数量,然后应用了选择常规差异数量的测试.

我不熟悉 OCSB 测试,这是nsdiffs 中的默认测试。对于此检验,在应用检验时,数据中可能存在频率为零的单位根(就像 HEGY 检验中的情况一样,具有相同的零假设)。但是,如果使用 Canova 和 Hansen 检验,建议对数据进行变换,去除零频率处可能的单位根。

您可以通过首先运行ndiffs 并相应地转换数据来更改选择dD 的顺序。然后您可以使用选项test="ch" 在转换后的系列上运行nsdiffs。这样,您可以将参数dD 传递给auto.arima

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多