Cameron Consulting Corporation se especializa en ofrecer portafolios de inversión. Se desea usar la metodología de Box-Jenkins con el ïndice de transportación del Dow Jones. La base de datos contiene 65 promedios diarios al cierre de operaciones del mencionado índice durante los meses de verano. Los datos se encuentran el archivo Tab9-3.dta.
library(foreign)
cameron<-read.dta("C:/datos/Tab9-3.dta")
Definiremos primero la serie como una serie de tiempo:
cameron<-ts(cameron[,1])
El primer paso en la identificación del modelo es determinar si la serie es estacionaria, es decir, si la serie de tiempo parece variar alrededor de un nivel fijo. Es útil observar una gráfica de la serie junto con la función de autocorrelación de la muestra.Examinemos el comportamiento de la serie a través del tiempo mediante un gráfico.
plot.ts(cameron, sub="Figura 01: Promedios diarios al cierre de operaciones
del ïndice de transportación",xlab="Tiempo",ylab="ïndice Promedio")
En la figura 01 aparece el gráfico de la serie original, la cual muestra un comportamiento creciente, indicando con esto la no presencia de estacionariedad. El siguiente paso en la identificación de un modelo tentativo es examinar las autocorrelaciones de muestra de datos.
acf(cameron,30,main="",sub="Figura 01: Función de Autocorrelación Simple")
El correlograma muestra un desvanecimiento lento de la función de autocorrelación indicando también no estacionariedad en la serie original.
pacf(cameron,30,main="",sub="Figura 02: Función de Autocorrelación Parcial")
Confirmaremos lo dicho anteriormente con la prueba de Dickey - Fuller.
Para esto solicitamos el paquete fUnitRoots.
library(fUnitRoots)
## Loading required package: urca
## Loading required package: timeDate
## Loading required package: timeSeries
## Loading required package: fBasics
##
##
## Rmetrics Package fBasics
## Analysing Markets and calculating Basic Statistics
## Copyright (C) 2005-2014 Rmetrics Association Zurich
## Educational Software for Financial Engineering and Computational Science
## Rmetrics is free software and comes with ABSOLUTELY NO WARRANTY.
## https://www.rmetrics.org --- Mail to: info@rmetrics.org
##
## Attaching package: 'fUnitRoots'
##
## The following objects are masked from 'package:urca':
##
## punitroot, qunitroot, unitrootTable
1. Planteamiento de Hipótesis
Ho: La serie es no estacionaria: Tiene raíz unitaria
H1: La serie es estacionaria: No Tiene raíz unitaria
2. Nivel de Significancia: \(\alpha\) = 0.05
3. Estadístico de Prueba
adfTest(cameron,lags=0,type=c("c"))
## Warning in adfTest(cameron, lags = 0, type = c("c")): p-value greater than
## printed p-value
##
## Title:
## Augmented Dickey-Fuller Test
##
## Test Results:
## PARAMETER:
## Lag Order: 0
## STATISTIC:
## Dickey-Fuller: 2.2962
## P VALUE:
## 0.99
##
## Description:
## Thu Mar 03 16:20:52 2016 by user: VICTOR
4. Decisión
El valor del estadístico es 2.2962, con un valor p mayor a 0.05 por lo que la hipótesis nula no se rechaza.
5. Conclusión
La serie original no es estacionaria.
El siguiente paso es tomar la primera diferencia a la serie.
plot.ts(diff(cameron),sub="Figura 03: Serie en primera diferencia", xlab="Tiempo",ylab="Primera diferencia")
Al tomar las primeras diferencias observamos que la serie se estabiliza en torno a un valor medio. (Figura 03)
acf(diff(cameron),30,main="",sub="Figura 04: AFC en Primera Diferencia")
pacf(diff(cameron),30,main="",sub="Figura 05: PAFC en Primera Diferencia")
Así mismo el correlograma confirma un declinamiento rápido en el tiempo de la AFC y PAFC. (Figura 04 y 05)
1. Planteamiento de Hipótesis
Ho: La serie en primera diferencia es no estacionaria: Tiene raíz
unitaria
H1: La serie en primera diferencia es estacionaria: No Tiene raíz
unitaria
2. Nivel de Significancia: \(\alpha\) = 0.05
3. Estadístico de Prueba
adfTest(diff(cameron),lags=0,type=c("c"))
## Warning in adfTest(diff(cameron), lags = 0, type = c("c")): p-value smaller
## than printed p-value
##
## Title:
## Augmented Dickey-Fuller Test
##
## Test Results:
## PARAMETER:
## Lag Order: 0
## STATISTIC:
## Dickey-Fuller: -5.8363
## P VALUE:
## 0.01
##
## Description:
## Thu Mar 03 16:20:53 2016 by user: VICTOR
4. Decisión
El valor del estadístico es -5.8363, con un valor p mayor a 0.05 por lo que la hipótesis nula se rechaza.
5. Conclusión
La serie en primera diferencia es estacionaria.
Una vez que se ha obtenido una serie estacionaria, debemos identificar la forma del modelo que se utilizará. La identificación de la forma del modelo se lleva a cabo comparando las autocorrelaciones y las autocorrelaciones parciales calculadas con los datos de la autocorrelaciones y las autocorrelaciones parciales teóricas de los diferentes modelos ARIMA.
En los correlogramas podemos observar lo siguiente: * En la ACF, la primera autocorrelación es significativa y además parece ser que los valores de la PACF disminuyen en forma oscilatoria. Esto nos lleva a pensar en un primer modelo: \[\ y_{t}= \epsilon_{t}-\theta_{1} \epsilon_{t-1}\]
Una vez que se han seleccionado los modelos tentativos, se deben estimar los parámetros para estos modelos.
Modelo 1
arima1<-arima(diff(cameron),c(1,0,0))
arima1
##
## Call:
## arima(x = diff(cameron), order = c(1, 0, 0))
##
## Coefficients:
## ar1 intercept
## 0.2800 1.0353
## s.e. 0.1195 0.3195
##
## sigma^2 estimated as 3.427: log likelihood = -130.27, aic = 266.53
library("lmtest")
## Loading required package: zoo
##
## Attaching package: 'zoo'
##
## The following object is masked from 'package:timeSeries':
##
## time<-
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
coeftest(arima1)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.28003 0.11946 2.3440 0.019076 *
## intercept 1.03527 0.31947 3.2406 0.001193 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Modelo 2
arima2<-arima(diff(cameron),c(0,0,1))
arima2
##
## Call:
## arima(x = diff(cameron), order = c(0, 0, 1))
##
## Coefficients:
## ma1 intercept
## 0.2867 1.0380
## s.e. 0.1203 0.2968
##
## sigma^2 estimated as 3.428: log likelihood = -130.28, aic = 266.56
library("lmtest")
coeftest(arima2)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 0.28669 0.12029 2.3834 0.0171548 *
## intercept 1.03801 0.29678 3.4976 0.0004694 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Los resultados son similares en cuanto al valor de AIC y \(\sigma^{2}\) por lo que decidimos por el modelo AR(1).
La siguiente figura muestra una posible estacionariedad entre los residuales del modelo. Esto lo confirmaremos con un correlograma.
plot.ts(arima1$residuals,sub="Figura 06: Residuales del modelo AR(1)", xlab="Tiempo",ylab="Residuales")
acf(arima1$residuals,sub="Figura 07: Autocorrelaciones de los Residuales del modelo AR(1)", xlab="Tiempo",ylab="Autocorrelación")
pacf(arima1$residuals,sub="Figura 08: Autocorrelaciones Parciales de los Residuales del modelo AR(1)", xlab="Tiempo",ylab="Autocorrelación")
Los correlogramas muestran que no existe autocorrelación significativa en los residuales.
Los gráficos Q-Q son una herramienta eficaz para evaluar la normalidad. Aquí las aplicamos a los residuos.
qqnorm(arima1$residuals, sub="Figura 09: Gráfico Q para evaluar normalidad");qqline(arima1$residuals)
El diagrama Q-Q de los residuos del modelo AR(1) estimado para la serie se muestra en la Figura 09. Los puntos parecen seguir la línea recta bastante de cerca, aunque parece desviars en el extremo superior. Este gráfico no nos llevaría a rechazar la normalidad de los términos de error en este modelo.
Además, la prueba de normalidad de Shapiro-Wilk aplicada a los residuos produce un estadístico de prueba de W = 0.97148, lo que corresponde a un valor de p de 0.1445, y no rechazaría la normalidad basado en esta prueba.
shapiro.test(arima1$residuals)
##
## Shapiro-Wilk normality test
##
## data: arima1$residuals
## W = 0.97148, p-value = 0.1445