1)关于您的第一个问题,文献中已经开发并讨论了一些测试统计数据,以测试平稳性和单位根的无效性。以下是有关此问题的许多论文中的一些:
相关趋势:
- Dickey,D. y Fuller,W.(1979a),带有单位根的自回归时间序列的估计量分布,《美国统计协会杂志》 74,427-31。
- Dickey,D.y Fuller,W.(1981年),《具有单位根的自回归时间序列的似然比统计》,Econometrica 49,1057-1071。
- Kwiatkowski,D.,Phillips,P.,Schmidt,P.y Shin,Y.(1992),针对单位根的替代性检验平稳性的零假设:我们如何确定经济时间序列具有单位根? ,《计量经济学杂志》 54,159-178。
- Phillips,P.y Perron,P.(1988),时间序列回归中的单位根检验,Biometrika 75,335-46。
- Durlauf,S。y Phillips,P。(1988),《时间序列分析中的趋势与随机游走》,《计量经济学》 56,1333-54。
与季节性因素有关:
- Hylleberg,S.,Engle,R.,Granger,C.y Yoo,B.(1990年),《季节性整合与协整》,《计量经济学杂志》 44,215-38。
- 卡诺瓦(Canova,F. y Hansen,BE)(1995年),季节性模式是否随时间变化恒定?季节性稳定性测试,《商业与经济统计杂志》 13,237-252。
- Franses,P.(1990),每月数据中季节性单位根的检验,计量经济学研究所的9032技术报告。
- Ghysels,E.,Lee,H.y Noh,J.(1994),测试季节性时间序列中的单位根。一些理论上的扩展和蒙特卡洛研究,《计量经济学杂志》 62,415-442。
教科书Banerjee,A.,Dolado,J.,Galbraith,J.y Hendry,D.(1993年),《协整,误差校正和非平稳数据的计量经济学分析》,《计量经济学高级文本》。牛津大学出版社也是一个很好的参考。
2)您的第二个顾虑是有据可查的。如果存在单位根检验,则应用于线性趋势的传统t统计量将不遵循标准分布。参见,例如,Phillips,P。(1987),具有单位根的时间序列回归,Econometrica 55(2),277-301。
如果存在单位根并被忽略,则降低了拒绝线性趋势系数为零的零值的可能性。也就是说,对于给定的显着性水平,我们最终会过于频繁地对确定性线性趋势进行建模。在存在单位根的情况下,我们应该改为通过对数据进行常规差异来转换数据。
3)作为说明,如果使用R,则可以对数据进行以下分析。
x <- structure(c(7657, 5451, 10883, 9554, 9519, 10047, 10663, 10864,
11447, 12710, 15169, 16205, 14507, 15400, 16800, 19000, 20198,
18573, 19375, 21032, 23250, 25219, 28549, 29759, 28262, 28506,
33885, 34776, 35347, 34628, 33043, 30214, 31013, 31496, 34115,
33433, 34198, 35863, 37789, 34561, 36434, 34371, 33307, 33295,
36514, 36593, 38311, 42773, 45000, 46000, 42000, 47000, 47500,
48000, 48500, 47000, 48900), .Tsp = c(1, 57, 1), class = "ts")
首先,您可以对单元根的null进行Dickey-Fuller测试:
require(tseries)
adf.test(x, alternative = "explosive")
# Augmented Dickey-Fuller Test
# Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.453
# alternative hypothesis: explosive
以及针对反向零假设,平稳性相对于线性趋势周围平稳性的替代的KPSS检验:
kpss.test(x, null = "Trend", lshort = TRUE)
# KPSS Test for Trend Stationarity
# KPSS Trend = 0.2691, Truncation lag parameter = 1, p-value = 0.01
结果:ADF测试,在5%显着性水平下,单位根不被拒绝;在KPSS测试中,平稳性为零的情况被拒绝,而倾向于具有线性趋势的模型。
顺便提lshort=FALSE
一句:在5%的水平上不会拒绝使用KPSS测试的空值,但是,它选择了5个延迟;此处未显示的进一步检查表明,选择1-3滞后适用于数据,并导致拒绝原假设。
原则上,我们应该通过能够拒绝零假设的检验来指导自己(而不是通过我们不拒绝(接受)零假设的检验来指导自己)。但是,原始系列在线性趋势上的回归结果并不可靠。一方面,R平方很高(超过90%),这在文献中指出是伪回归的指标。
fit <- lm(x ~ 1 + poly(c(time(x))))
summary(fit)
#Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 28499.3 381.6 74.69 <2e-16 ***
#poly(c(time(x))) 91387.5 2880.9 31.72 <2e-16 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 2881 on 55 degrees of freedom
#Multiple R-squared: 0.9482, Adjusted R-squared: 0.9472
#F-statistic: 1006 on 1 and 55 DF, p-value: < 2.2e-16
另一方面,残差是自相关的:
acf(residuals(fit)) # not displayed to save space
而且,不能拒绝残差中的单位根的零点。
adf.test(residuals(fit))
# Augmented Dickey-Fuller Test
#Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.547
#alternative hypothesis: stationary
此时,您可以选择用于获取预测的模型。例如,可以如下获得基于结构时间序列模型和ARIMA模型的预测。
# StructTS
fit1 <- StructTS(x, type = "trend")
fit1
#Variances:
# level slope epsilon
#2982955 0 487180
#
# forecasts
p1 <- predict(fit1, 10, main = "Local trend model")
p1$pred
# [1] 49466.53 50150.56 50834.59 51518.62 52202.65 52886.68 53570.70 54254.73
# [9] 54938.76 55622.79
# ARIMA
require(forecast)
fit2 <- auto.arima(x, ic="bic", allowdrift = TRUE)
fit2
#ARIMA(0,1,0) with drift
#Coefficients:
# drift
# 736.4821
#s.e. 267.0055
#sigma^2 estimated as 3992341: log likelihood=-495.54
#AIC=995.09 AICc=995.31 BIC=999.14
#
# forecasts
p2 <- forecast(fit2, 10, main = "ARIMA model")
p2$mean
# [1] 49636.48 50372.96 51109.45 51845.93 52582.41 53318.89 54055.37 54791.86
# [9] 55528.34 56264.82
预测图:
par(mfrow = c(2, 1), mar = c(2.5,2.2,2,2))
plot((cbind(x, p1$pred)), plot.type = "single", type = "n",
ylim = range(c(x, p1$pred + 1.96 * p1$se)), main = "Local trend model")
grid()
lines(x)
lines(p1$pred, col = "blue")
lines(p1$pred + 1.96 * p1$se, col = "red", lty = 2)
lines(p1$pred - 1.96 * p1$se, col = "red", lty = 2)
legend("topleft", legend = c("forecasts", "95% confidence interval"),
lty = c(1,2), col = c("blue", "red"), bty = "n")
plot((cbind(x, p2$mean)), plot.type = "single", type = "n",
ylim = range(c(x, p2$upper)), main = "ARIMA (0,1,0) with drift")
grid()
lines(x)
lines(p2$mean, col = "blue")
lines(ts(p2$lower[,2], start = end(x)[1] + 1), col = "red", lty = 2)
lines(ts(p2$upper[,2], start = end(x)[1] + 1), col = "red", lty = 2)
两种情况下的预测都是相似的,看起来很合理。请注意,预测遵循类似于线性趋势的相对确定性模式,但是我们没有明确地对线性趋势建模。原因如下:i)在局部趋势模型中,斜率分量的方差估计为零。这会将趋势分量转换为具有线性趋势影响的漂移。ii)ARIMA(0,1,1),在差分序列模型中选择了具有漂移的模型,常数项对差分序列的影响是线性趋势。这是在讨论这个职位。
您可以检查是否选择了局部模型或无漂移的ARIMA(0,1,0),那么预测是一条水平的直线,因此与观察到的数据动态没有相似之处。好吧,这是单元根测试和确定性组件之谜的一部分。
编辑1(残差检查):
自相关和部分ACF并未建议残差中的结构。
resid1 <- residuals(fit1)
resid2 <- residuals(fit2)
par(mfrow = c(2, 2))
acf(resid1, lag.max = 20, main = "ACF residuals. Local trend model")
pacf(resid1, lag.max = 20, main = "PACF residuals. Local trend model")
acf(resid2, lag.max = 20, main = "ACF residuals. ARIMA(0,1,0) with drift")
pacf(resid2, lag.max = 20, main = "PACF residuals. ARIMA(0,1,0) with drift")
正如IrishStat所建议的那样,建议检查异常值是否存在。使用该程序包检测到两个附加的异常值tsoutliers
。
require(tsoutliers)
resol <- tsoutliers(x, types = c("AO", "LS", "TC"),
remove.method = "bottom-up",
args.tsmethod = list(ic="bic", allowdrift=TRUE))
resol
#ARIMA(0,1,0) with drift
#Coefficients:
# drift AO2 AO51
# 736.4821 -3819.000 -4500.000
#s.e. 220.6171 1167.396 1167.397
#sigma^2 estimated as 2725622: log likelihood=-485.05
#AIC=978.09 AICc=978.88 BIC=986.2
#Outliers:
# type ind time coefhat tstat
#1 AO 2 2 -3819 -3.271
#2 AO 51 51 -4500 -3.855
从ACF来看,可以说,在显着性水平为5%的情况下,该模型中的残差也是随机的。
par(mfrow = c(2, 1))
acf(residuals(resol$fit), lag.max = 20, main = "ACF residuals. ARIMA with additive outliers")
pacf(residuals(resol$fit), lag.max = 20, main = "PACF residuals. ARIMA with additive outliers")
在这种情况下,潜在异常值的出现似乎不会扭曲模型的性能。Jarque-Bera测试支持正态性;在5%的显着性水平上fit1
,初始模型(,fit2
)的残差的正态性无效。
jarque.bera.test(resid1)[[1]]
# X-squared = 0.3221, df = 2, p-value = 0.8513
jarque.bera.test(resid2)[[1]]
#X-squared = 0.426, df = 2, p-value = 0.8082
编辑2(残差及其值图)
这是残差的样子:
这些是csv格式的值:
0;6.9205
-0.9571;-2942.4821
2.6108;4695.5179
-0.5453;-2065.4821
-0.2026;-771.4821
0.1242;-208.4821
0.1909;-120.4821
-0.0179;-535.4821
0.1449;-153.4821
0.484;526.5179
1.0748;1722.5179
0.3818;299.5179
-1.061;-2434.4821
0.0996;156.5179
0.4805;663.5179
0.8969;1463.5179
0.4111;461.5179
-1.0595;-2361.4821
0.0098;65.5179
0.5605;920.5179
0.8835;1481.5179
0.7669;1232.5179
1.4024;2593.5179
0.3785;473.5179
-1.1032;-2233.4821
-0.3813;-492.4821
2.2745;4642.5179
0.2935;154.5179
-0.1138;-165.4821
-0.8035;-1455.4821
-1.2982;-2321.4821
-1.9463;-3565.4821
-0.1648;62.5179
-0.1022;-253.4821
0.9755;1882.5179
-0.5662;-1418.4821
-0.0176;28.5179
0.5;928.5179
0.6831;1189.5179
-1.8889;-3964.4821
0.3896;1136.5179
-1.3113;-2799.4821
-0.9934;-1800.4821
-0.4085;-748.4821
1.2902;2482.5179
-0.0996;-657.4821
0.5539;981.5179
2.0007;3725.5179
1.0227;1490.5179
0.27;263.5179
-2.336;-4736.4821
1.8994;4263.5179
0.1301;-236.4821
-0.0892;-236.4821
-0.1148;-236.4821
-1.1207;-2236.4821
0.4801;1163.5179