1) Con respecto a su primera pregunta, algunas estadísticas de pruebas se han desarrollado y discutido en la literatura para probar el nulo de estacionariedad y el nulo de una raíz unitaria. Algunos de los muchos documentos que se escribieron sobre este tema son los siguientes:
Relacionado con la tendencia:
- Dickey, D. y Fuller, W. (1979a), Distribución de los estimadores para series de tiempo autorregresivas con una raíz unitaria, Journal of the American Statistical Association 74, 427-31.
- Dickey, D. y Fuller, W. (1981), Estadísticas de razón de probabilidad para series de tiempo autorregresivas con una raíz unitaria, Econometrica 49, 1057-1071.
- Kwiatkowski, D., Phillips, P., Schmidt, P. y Shin, Y. (1992), Prueba de la hipótesis nula de estacionariedad frente a la alternativa de una raíz unitaria: ¿Qué tan seguros estamos de que las series de tiempo económicas tienen una raíz unitaria? , Journal of Econometrics 54, 159-178.
- Phillips, P. y Perron, P. (1988), Prueba de una raíz unitaria en regresión de series de tiempo, Biometrika 75, 335-46.
- Durlauf, S. y Phillips, P. (1988), Tendencias versus caminatas aleatorias en análisis de series de tiempo, Econometrica 56, 1333-54.
Relacionado con el componente estacional:
- Hylleberg, S., Engle, R., Granger, C. y Yoo, B. (1990), Integración estacional y cointegración, Journal of Econometrics 44, 215-38.
- Canova, F. y Hansen, BE (1995), ¿Son constantes los patrones estacionales en el tiempo? una prueba de estabilidad estacional, Journal of Business and Economic Statistics 13, 237-252.
- Franses, P. (1990), Pruebas de raíces unitarias estacionales en datos mensuales, Informe técnico 9032, Econometric Institute.
- Ghysels, E., Lee, H. y Noh, J. (1994), Pruebas de raíces unitarias en series temporales estacionales. algunas extensiones teóricas y una investigación de Monte Carlo, Journal of Econometrics 62, 415-442.
El libro de texto Banerjee, A., Dolado, J., Galbraith, J. y Hendry, D. (1993), Cointegración, Corrección de errores y el análisis econométrico de datos no estacionarios, Textos avanzados en econometría. Oxford University Press también es una buena referencia.
2) Su segunda preocupación está justificada por la literatura. Si hay una prueba de raíz unitaria, la estadística t tradicional que aplicaría en una tendencia lineal no sigue la distribución estándar. Véase, por ejemplo, Phillips, P. (1987), Regresión de series de tiempo con raíz unitaria, Econometrica 55 (2), 277-301.
Si existe una raíz unitaria y se ignora, entonces la probabilidad de rechazar el valor nulo de que el coeficiente de una tendencia lineal es cero se reduce. Es decir, terminaríamos modelando una tendencia lineal determinista con demasiada frecuencia para un nivel de significación dado. En presencia de una raíz unitaria, debemos transformar los datos tomando diferencias regulares a los datos.
3) Por ejemplo, si usa R puede hacer el siguiente análisis con sus datos.
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")
Primero, puede aplicar la prueba Dickey-Fuller para el nulo de una raíz unitaria:
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
y la prueba KPSS para la hipótesis nula inversa, estacionariedad frente a la alternativa de estacionariedad en torno a una tendencia lineal:
kpss.test(x, null = "Trend", lshort = TRUE)
# KPSS Test for Trend Stationarity
# KPSS Trend = 0.2691, Truncation lag parameter = 1, p-value = 0.01
Resultados: prueba ADF, al nivel de significancia del 5% no se rechaza una raíz unitaria; Prueba KPSS, el nulo de estacionariedad se rechaza a favor de un modelo con una tendencia lineal.
Nota aparte: el uso lshort=FALSE
de la prueba nula KPSS no se rechaza al nivel del 5%, sin embargo, selecciona 5 rezagos; una inspección adicional que no se muestra aquí sugiere que elegir 1-3 rezagos es apropiado para los datos y lleva a rechazar la hipótesis nula.
En principio, deberíamos guiarnos por la prueba para la cual pudimos rechazar la hipótesis nula (en lugar de por la prueba para la cual no rechazamos (aceptamos) la nula). Sin embargo, una regresión de la serie original en una tendencia lineal resulta no ser confiable. Por un lado, el cuadrado R es alto (más del 90%), lo que se señala en la literatura como un indicador de regresión espuria.
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
Por otro lado, los residuos están autocorrelacionados:
acf(residuals(fit)) # not displayed to save space
Además, el nulo de una raíz unitaria en los residuos no puede ser rechazado.
adf.test(residuals(fit))
# Augmented Dickey-Fuller Test
#Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.547
#alternative hypothesis: stationary
En este punto, puede elegir un modelo que se utilizará para obtener pronósticos. Por ejemplo, los pronósticos basados en un modelo de serie temporal estructural y en un modelo ARIMA se pueden obtener de la siguiente manera.
# 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
Una trama de los pronósticos:
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)
Las previsiones son similares en ambos casos y parecen razonables. Observe que los pronósticos siguen un patrón relativamente determinista similar a una tendencia lineal, pero no modelamos explícitamente una tendencia lineal. La razón es la siguiente: i) en el modelo de tendencia local, la varianza del componente de la pendiente se estima como cero. Esto convierte el componente de tendencia en una deriva que tiene el efecto de una tendencia lineal. ii) ARIMA (0,1,1), un modelo con una deriva se selecciona en un modelo para la serie diferenciada. El efecto del término constante en una serie diferenciada es una tendencia lineal. Esto se discute en esta publicación .
Puede verificar que si se elige un modelo local o un ARIMA (0,1,0) sin deriva, los pronósticos son una línea horizontal recta y, por lo tanto, no tendrían semejanza con la dinámica observada de los datos. Bueno, esto es parte del rompecabezas de las pruebas de raíz unitaria y los componentes deterministas.
Edición 1 (inspección de residuos):
la autocorrelación y el ACF parcial no sugieren una estructura en los residuos.
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")
Como IrishStat sugirió, también es aconsejable verificar la presencia de valores atípicos. Se detectan dos valores atípicos aditivos utilizando el paquete 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
Mirando el ACF, podemos decir que, al nivel de significancia del 5%, los residuos también son aleatorios en este modelo.
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")
En este caso, la presencia de posibles valores atípicos no parece distorsionar el rendimiento de los modelos. Esto está respaldado por la prueba de Jarque-Bera para la normalidad; el nulo de normalidad en los residuos de los modelos iniciales ( fit1
, fit2
) no se rechaza al nivel de significancia del 5%.
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
Edición 2 (gráfico de residuos y sus valores)
Así es como se ven los residuos:
Y estos son sus valores en formato 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