我一直在使用EViews statconn DCOM接口从FRED通过ns的预测包中的nsdiffs(test = c(“ch”))函数循环大量系列,以检查它们需要季节性的百分比差异。然而,经过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 i中没有宏观经济系列需要在CH测试下进行季节性差异。我还尝试了一个类似的例程,其中包含原始CH论文中的一些数据(http://www.ssc.wisc.edu/~bhansen/progs/jbes_95.html),但仍然无法找到神圣的输出= 1。
答案 0 :(得分:0)
参考参考文献中所示的应用中使用的系列“工资”,基于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。由于在计算协方差矩阵时滞后截断参数的不同选择可能产生差异。 (下面的示例要求从SeasDummy
包的源文件中复制和粘贴函数SD.test
和forecast
,因为这些函数不会导出。)
SD.test(x, 4)
[1] 1.112811
在使用其他系列时,请记住在零频率下过滤可能的单位根,并对变换后的系列(如果需要)应用Canova和Hansen测试,例如数据的第一个差异。
修改强>
我没有在auto.arima
的文档中找到OP提到的声明,但是看看源代码似乎首先确定了季节性差异的数量,然后选择了常规差异的数量的测试适用。
我不熟悉OCSB测试,这是nsdiffs
中的默认测试。对于该测试,在应用测试时可能在数据中存在频率为零的单位根(如在具有相同原假设的HEGY测试中的情况)。但是,如果使用Canova和Hansen测试,建议将数据转换为零频率下可能的单位根。
您可以通过先运行d
并相应地转换数据来更改选择D
和ndiffs
的顺序。然后,您可以使用选项nsdiffs
在已转换的系列上运行test="ch"
。通过这种方式,您可以将参数d
和D
传递给auto.arima
。