El presente epígrafe pretende ser una breve introducción al estudio de las series temporales, las cuales poseen una gran importancia en el campo de la Economía dada la abundancia de este tipo de observaciones; de hecho, las series temporales constituyen la mayor parte del material estadístico con el que trabajan los economistas.
Pero, ¿qué es una serie temporal? Por definición, una serie temporal es una sucesión de observaciones de una variable realizadas a intervalos regulares de tiempo. Según realicemos la medida de la variable considerada podemos distinguir distintos tipos de series temporales:
Discretas o Continuas, en base al intervalo de tiempo considerado para su medición.
Flujo o Stock. En Economía, se dice que una serie de datos es de tipo flujo si está referida a un período determinado de tiempo (un día, un mes, un año, etc.). Por su parte, se dice que una serie de datos es de tipo stock si está referida a una fecha determinada (por ejemplo, el 31 de Diciembre de cada año). Un ejemplo de datos de tipo flujo serían las ventas de una empresa ya que éstas tendrán un valor distinto si se obtiene el dato al cabo de una semana, un mes ó un año; por su parte, la cotización de cierre de las acciones de esa misma empresa sería una variable de tipo stock, ya que sólo puede ser registrado a una fecha y hora determinadas. Obsérvese que existe relación entre ambos tipos de variables, pues la cotización al cierre de las acciones no es más que el precio de cierre del día anterior más, o menos, el flujo de precios de la sesión considerada.
Dependiendo de la unidad de medida, podemos encontrar series temporales en euros o en diversas magnitudes físicas (kilogramos, litros, millas, etc.)
En base a la periodicidad de los datos, podemos distinguir series temporales de datos diarios, semanales, mensuales, trimestrales, anuales, etc.
Antes de profundizar en el análisis de las series temporales es necesario señalar que, para llevarlo a cabo, hay que tener en cuenta los siguientes supuestos:
Se considera que existe una cierta estabilidad en la estructura del fenómeno estudiado. Para que se cumpla este supuesto será necesario estudiar períodos lo más homogéneos posibles.
Los datos deben ser homogéneos en el tiempo, o lo que es lo mismo, se debe mantener la definición y la medición de la magnitud objeto de estudio. Este supuesto no se da en muchas de las series económicas, ya que es frecuente que las estadísticas se perfeccionen con el paso del tiempo, produciéndose saltos en la serie debidos a un cambio en la medición de la magnitud estudiada. Un caso particularmente frecuente es el cambio de base en los índices de precios, de producción, etc. Tales cambios de base implican cambios en los productos y las ponderaciones que entran en la elaboración del índice que repercuten considerablemente en la comparabilidad de la serie en el tiempo.
El objetivo fundamental del estudio de las series temporales es el conocimiento del comportamiento de una variable a través del tiempo para, a partir de dicho conocimiento, y bajo el supuesto de que no van a producirse cambios estructurales, poder realizar predicciones, es decir, determinar qué valor tomará la variable objeto de estudio en uno o más períodos de tiempo situados en el futuro, mediante la aplicación de un determinado modelo calculado previamente.
Dado que en la mayor parte de los problemas económicos, los agentes se enfrentan a una toma de decisiones bajo un contexto de incertidumbre, la predicción de una variable reviste una importancia notoria pues supone, para el agente que la realiza, una reducción de la incertidumbre y, por ende, una mejora de sus resultados.
Las técnicas de predicción basadas en series temporales se pueden agrupar en dos grandes bloques:
Métodos cualitativos, en los que el pasado no proporciona una información directa sobre el fenómeno considerado, como ocurre con la aparición de nuevos productos en el mercado. Así, por ejemplo, si se pretende efectuar un estudio del comportamiento de una acción en Bolsa, y la sociedad acaba de salir a cotizar al mercado, no se puede acudir a la información del pasado ya que ésta no existe.
Métodos cuantitativos, en los que se extrae toda la información posible contenida en los datos y, en base al patrón de conducta seguida en el pasado, realizar predicciones sobre el futuro.
Indudablemente, la calidad de las previsiones realizadas dependerán, en buena medida, del proceso generador de la serie: así, si la variable observada sigue algún tipo de esquema o patrón de comportamiento más o menos fijo (serie determinista) seguramente obtengamos predicciones más o menos fiables, con un grado de error bajo. Por el contrario, si la serie no sigue ningún patrón de comportamiento específico (serie aleatoria), seguramente nuestras predicciones carecerán de validez por completo.
Generalmente, en el caso de las series económicas no existen variables deterministas o aleatorias puras, sino que contienen ambos tipos de elementos. El propósito de los métodos de previsión cuantitativos es conocer los componentes subyacentes de una serie y su forma de integración, con objeto de realizar predicciones de su evolución futura.
Dentro de los métodos de predicción cuantitativos, se pueden distinguir dos grandes enfoques alternativos:
Por un lado, el análisis univariante de series temporales mediante el cual se intenta realizar previsiones de valores futuros de una variable, utilizando como información la contenida en los valores pasados de la propia serie temporal. Dentro de esta metodología se incluyen los métodos de descomposición y la familia de modelos ARIMA univariantes que veremos más adelante.
El otro gran bloque dentro de los métodos cuantitativos estaría integrado por el análisis multivariante o de tipo causal, denominado así porque en la explicación de la variable o variables objeto de estudio intervienen otras adicionales a ella o ellas mismas.
En el tratamiento de series temporales que vamos a abordar, únicamente se considerará la información presente y pasada de la variable investigada. Si la variable investigada es \(Y\) y se dispone de los valores que toma dicha variable desde el momento 1 hasta \(T\), el conjunto de información disponible vendrá dado por: \(Y_1, Y_2, Y_3, …, Y_{T-1}, Y_T\).
Dada esa información, la predicción de la variable \(Y\) para el período \(T+1\) la podemos expresar como \(\hat Y_{T+1/T}\).
Con esta notación queremos indicar que la predicción para el periodo \(T+1\) se hace condicionada a la información disponible en el momento \(T\). El acento circunflejo sobre la Y nos indica que esa predicción se ha obtenido a partir de un modelo estimado. Conviene también hacer notar que \(T+1\) significa que se está haciendo la predicción para un período hacia delante, es decir, con la información disponible en t hacemos una predicción para el período siguiente.
Análogamente, la predicción para el período \(T+2\) y para el período \(T+m\), con la información disponible en \(T\), vendrá dada, respectivamente, por \(\hat Y_{T+2/T},...,\hat Y_{T+m/T}\), que serán predicciones de 2 y m períodos hacia adelante.
Si, genéricamente, para el período t se efectúa una predicción con la información disponible en t–1, y a la que designamos por \(\hat Y_{t/t-1}\), para el período t podemos hacer una comparación de este valor con el que realmente observemos (\(Y_t\)). La diferencia entre ambos valores será el error de predicción de un período hacia adelante y vendrá dado por:
\[e_{t/t-1}=Y_t-\hat Y_{t/t-1}\]
Cuando un fenómeno es determinista y se conoce la ley que lo determina, las predicciones son exactas, verificándose que \(e_{t/t-1}=0\). Por el contrario, si el fenómeno es poco sistemático o el modelo es inadecuado, entonces los errores de predicción que se vayan obteniendo serán grandes.
Para cuantificar globalmente los errores de predicción se utilizan los siguientes estadísticos: la Raíz del Error Cuadrático Medio (RECM) y el Error Absoluto Medio (EAM).
En el caso de que se disponga de \(T\) observaciones y se hayan hecho predicciones a partir de la observación 2, las fórmulas para la obtención de la RECM y el EAM son las siguientes:
\[RECM=\sqrt{\frac{\sum_{t=2}^T (Y_t-\hat Y_{t/t-1})^2}{T-1}}\]
\[EAM=\frac{\sum_{t=2}^T (Y_t-\hat Y_{t/t-1})^2}{T-1}\]
De forma análoga, se pueden aplicar la RECM y el EAM en predicciones de \(2, 3, …, m\) períodos hacia adelante.
En el análisis de series temporales se aplican, en general, métodos alternativos a unos mismos datos, seleccionando aquel modelo o aquel método que, en la predicción de períodos presentes y pasados, arroje errores de predicción menores, es decir, arroje una RECM o un EAM menor.
En R “ts” es la función genérica para que los datos tengan forma de serie temporal. Su sintaxis es la siguiente:
ts(data = NA, start = 1, end = numeric(), frequency = 1, deltat = 1, ts.eps = getOption(“ts.eps”), class = , names = )
De esta sintaxis hay que tener presentes los siguiente argumentos:
data: Vector, “data frame” o matriz de datos.
start: Referencia de la primera observacion, es un vector con dos valores numéricos, el primero relativo al año y el segundo relativo al trimestre y mes de inicio (1 para el primer trimestre y 1 para enero en series de datos mensuales).
end: Referencia de la ultima observación.
frequency: Número de observaciones por año (4 en series trimestrales, 12 en series mensuales).
Un ejemplo de elaboración de un objeto “ts” es el siguiente:
ts(1:10, frequency = 4, start = c(1959, 2)) # 2º trimestre de 1959
## Qtr1 Qtr2 Qtr3 Qtr4
## 1959 1 2 3
## 1960 4 5 6 7
## 1961 8 9 10
En el análisis de series temporales, el método de medias móviles tiene diversas aplicaciones: así, este método puede sernos útil si queremos calcular la tendencia de una serie temporal sin tener que ajustarnos a una función previa, ofreciendo así una visión suavizada o alisada de una serie, ya que promediando varios valores se elimina parte de los movimientos irregulares de la serie; también puede servirnos para realizar predicciones cuando la tendencia de la serie tiene una media constante.
Veamos qué es una media móvil: se trata, sencillamente de una media aritmética que se caracteriza porque toma un valor para cada momento del tiempo y porque en su cálculo no entran todas las observaciones de la muestra disponible.
Entre los distintos tipos de medias móviles que se pueden construir nos vamos a referir a dos tipos: medias móviles centradas y medias móviles asimétricas. El primer tipo se utiliza para la representación de la tendencia, mientras que el segundo lo aplicaremos para la predicción en modelos con media constante.
Las medias móviles centradas se caracterizan porque el número de observaciones que entran en su cálculo es impar, asignándose cada media móvil a la observación central. Así, una media móvil centrada en \(t\) de longitud \(2n + 1\) viene dada por la siguiente expresión:
\[MM(2n+1)_t=\frac{Y_{t-n}+Y_{t-n+1}+...+Y_t+...+Y_{t+n-1}+Y_{t+n}}{2n+1}\]
Como puede observarse, el subíndice asignado a la media móvil, \(t\), es el mismo que el de la observación central, \(Y_t\). Obsérvese también que, por construcción, no se pueden calcular las medias móviles correspondientes a las \(n\) primeras y a las \(n\) últimas observaciones.
Por su parte, en el caso de las medias móviles asimétricas (no centradas) se asigna cada media móvil al período correspondiente a la observación más adelantada de todas las que intervienen en su cálculo. Así, la media móvil asimétrica de \(n\) puntos asociada a la observación \(t\) tendrá la siguiente expresión:
\[MMA(n)_t=\frac{Y_{t-n+1}+Y_{t-n+2}+...+Y_{t-1}+Y_{t}}{n}\]
La utilización de medias móviles implica la elección arbitraria de su longitud u orden, es decir, del número de observaciones que intervienen en el cálculo de cada media móvil. Cuanto mayor sea la longitud, mejor se eliminarán las irregularidades de la serie, ya que al intervenir más observaciones en su cálculo se compensarán las fluctuaciones de este tipo, pero por el contrario, el coste informativo será mayor. Por el contrario, cuando la longitud es pequeña, la media móvil refleja con mayor rapidez los cambios que puedan producirse en la evolución de la serie. Es conveniente, pues, sopesar estos factores al decidir la longitud de la media móvil.
Con datos trimestrales de la tasa de desempleo de Canada, representamos una tasa movil de cuatro periodos centrada y no centrada. La función R que genera medias móviles es “rollMean”, en “align = c(”center“,”left“,”right“)”, se elige como alinear la media, en su defecto calcula medias móviles centradas.
library(vars)
## Loading required package: MASS
## Loading required package: strucchange
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: sandwich
## Loading required package: urca
## Loading required package: lmtest
data("Canada")
str(Canada)
## Time-Series [1:84, 1:4] from 1980 to 2001: 930 930 930 931 933 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:4] "e" "prod" "rw" "U"
plot(Canada[, "U"], main='Desempleo', xlab='Mes/Año', ylab='Tasa')
lines(rollmean(Canada[, "U"], 4), col="red", lwd=2)
lines(rollmean(Canada[, "U"], 4,align="right"), col="blue", lwd=2)
legend("bottomleft", c("Original", "Media móvil centrada",
"Media móvil no centrada"),
lwd=c(1,2,2), col=c("black", "red", "blue"))
grid()
La función R filter() tambien permite calcular medias móviles.
#Medias Móviles
#Alisado MA centrados
alisado1 = filter(Canada[, "U"], rep(1,4)/4, side=2)
#Alisado MA no centrados
alisado2 = filter(Canada[, "U"], rep(1,4)/4, side=1)
#Hacemos la gráfica para comparar
plot.ts(Canada[, "U"],main="Desempleo",xlab="Tiempo",ylab="Tasa")
lines(alisado1, col="red")
lines(alisado2, col="blue")
legend("bottomleft", c("Original", "Media móvil centrada",
"Media móvil no centrada"),
lwd=c(1,2,2), col=c("black", "red", "blue"))
grid()
El método del alisado exponencial simple consiste, al igual que en el caso de las medias móviles, en una transformación de la variable original. Si una variable \(Y_t\) es sometida a un proceso de alisado exponencial simple se obtiene como resultado la variable alisada \(S_t\). Teóricamente, la variable alisada \(S_t\) se obtendría según la expresión:
\[S_t = (1 – w) Y_t + (1 – w) wY_{t-1}+ (1-w) w^2 Y_{t-2} + (1 – w) w^3 Y_{t-3} +...\ \ \ \ \ \ (1)\]
donde \(w\) es un parámetro que toma valores comprendidos entre 0 y 1, y los puntos suspensivos indican que el número de términos de la variable alisada puede ser infinito. La expresión anterior en realidad no es más que una media aritmética ponderada de infinitos valores de \(Y\).
Se denomina alisada ya que suaviza o alisa las oscilaciones que tiene la serie, al obtenerse como una media ponderada de distintos valores. Por otra parte, el calificativo de exponencial se debe a que la ponderación o peso de las observaciones decrece exponencialmente a medida que nos alejamos del momento actual \(t\). Esto quiere decir que las observaciones que están alejadas tienen muy poca incidencia en el valor que toma \(S_t\). Finalmente, el calificativo de simple se aplica para distinguirla de otros casos en que, como veremos más adelante, una variable se somete a una doble operación de alisado.
Una vez que se han visto estos aspectos conceptuales, vamos a proceder a la obtención operativa de la variable alisada, ya que la expresión no es directamente aplicable por contener infinitos términos. Retardando un período en la expresión anterior se tiene que:
\[S_{t-1} = (1 – w) Y_{t-1} + (1 – w) wY_{t-2} + (1-w) w^2 Y_{t-3} +...\]
Multiplicando ambos miembros por \(w\) se obtiene:
\[wS_{t-1} = (1 – w) wY_{t-1} + (1 – w) w^2 Y_{t-2} + (1 – w) w^3 Y_{t-3} + ...\ \ \ \ \ \ (2)\]
Restando (1) de (2) miembro a miembro y ordenando los términos se tiene que:
\[S_t = (1 - w) Y_t + wS_{t-1}\]
O también:
\[S_t = \alpha Y_t + (1 - \alpha) S_{t-1} \ \ \ \ \ \ \ \ \ \ \ \ \ \ )\]
donde \(\alpha = 1 – w\).
Ahora ya sólo nos falta calcular los valores de \(\alpha\) y \(S_0\), parámetros a partir de los cuales resulta sencillo hallar los valores de la variable alisada de manera recursiva, tal que:
\[S_1 = \alpha Y_1 + (1 - \alpha) S_0\] \[S_2 = \alpha Y_2 + (1 - \alpha) S_1\] \[S_3 = \alpha Y_3 + (1 - \alpha) S_2\] \[...\]
Al asignar un valor a \(\alpha\) hay que tener en cuenta que un valor pequeño de \(\alpha\) significa que estamos dando mucho peso a las observaciones pasadas a través del término \(S_{t-1}\). Por el contrario, cuando \(\alpha\) es grande se da más importancia a la observación actual de la variable \(Y\). En general, parece que un valor de \(\alpha\) igual a \(0.2\) es apropiado en la mayor parte de los casos. Alternativamente, se puede seleccionar aquel valor de \(\alpha\) para el que se obtenga una Raíz del Error Cuadrático Medio menor en la predicción del período muestral.
Respecto a la asignación de valor a \(S_0\), se suelen hacer estos supuestos: cuando la serie tiene muchas oscilaciones se toma \(S_0 = Y_1\); por el contrario, cuando la serie tiene una cierta estabilidad, se hace \(S_0 = \bar Y\).
El método de Holt-Winters es una técnica de suavizado que utiliza un conjunto de estimaciones recursivas a partir de la serie histórica. Estas estimaciones utilizan una constante de nivel, \(\alpha\), una constante de tendencia, \(\beta\), y una constante estacional multiplicativa, \(\gamma\).
Las estimaciones recursivas se basan en las siguientes ecuaciones:
\[\hat Y_t=\alpha(\hat Y_{t-1}-T_{t-1})+(1-\alpha)\frac{Y_t}{F_{t-s}}\ \ \ 0< \alpha <1\]
\[T_t=\beta T_{t-1}+(1-\beta)(\hat Y_{t}-\hat Y_{t-1})\ \ \ 0< \beta <1\]
\[F_t=\gamma F_{t-s}+(1-\gamma)\frac{Y_t}{\hat Y_{t}}\ \ \ 0< \gamma <1\]
donde \(s=4\) en el caso de datos trimestrales y \(s=12\) en el caso de datos mensuales. \(\hat Y_t\) sería el nivel suavizado de la serie, \(T_t\) la tendencia suavizada de la serie y \(F_t\) el ajuste estacional suavizado de la serie.
Utilizando el programa R se va a desarrollar un alisado exponencial doble, para lo cual hay que invocar la función “HoltWinters”, que tiene la siguiente estructura:
HoltWinters(x, alpha = NULL, beta = NULL, gamma = NULL, seasonal = c(“additive”,multiplicative"), start.periods = 2, l.start = NULL, b.start = NULL, s.start = NULL, optim.start = c(alpha = 0.3, beta = 0.1, gamma = 0.1), optim.control = list())
Hay que tener presente que “x” es el conjunto de datos, alpha, beta y gamma, son las constantes \(\alpha\), \(\beta\) y \(\gamma\) del sistema de ecuaciones descrito.
Si se desea, la función elige los coeficientes \(\alpha\), \(\beta\) y \(\gamma\) óptimos, en la opción “optim.start”, hay que indicar los valores de partida y la function intenta encontrar el valor óptimo minimizando el RECM en la opción por defecto. Si no se le indican los valores de partida, los encuetra a través de una simple descomposición temporal de la serie utilizando medias móviles.
Utilizando la base de datos CO2 que se obtiene en R, relativa a concentraciones atomosféricas de CO2 en partes por millón (ppm), realizamos un suavizado por el metodo de Holt-Winters en R:
data("co2")
HoltWinters(co2)
## Holt-Winters exponential smoothing with trend and additive seasonal component.
##
## Call:
## HoltWinters(x = co2)
##
## Smoothing parameters:
## alpha: 0.5126484
## beta : 0.009497669
## gamma: 0.4728868
##
## Coefficients:
## [,1]
## a 364.7616237
## b 0.1247438
## s1 0.2215275
## s2 0.9552801
## s3 1.5984744
## s4 2.8758029
## s5 3.2820088
## s6 2.4406990
## s7 0.8969433
## s8 -1.3796428
## s9 -3.4112376
## s10 -3.2570163
## s11 -1.9134850
## s12 -0.5844250
plot(HoltWinters(co2))
La función HoltWinters, puede ser utilizada para realizar suavizados exponenciales simples, declarando al parámetro beta=FALSE y gamma=FALSE.
HoltWinters(co2,beta=FALSE,gamma=FALSE)
## Holt-Winters exponential smoothing without trend and without seasonal component.
##
## Call:
## HoltWinters(x = co2, beta = FALSE, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 0.9999339
## beta : FALSE
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 364.3399
plot(HoltWinters(co2,beta=FALSE,gamma=FALSE))
Tradicionalmente, en los métodos de descomposición de series temporales, se parte de la idea de que la serie temporal se puede descomponer en todos o algunos de los siguientes componentes:
Tendencia (T), que representa la evolución de la serie en el largo plazo
Fluctuación cíclica (C), que refleja las fluctuaciones de carácter periódico, pero no necesariamente regular, a medio plazo en torno a la tendencia. Este componente es frecuente hallarlo en las series económicas, y se debe a los cambios en la actividad económica.
Para la obtención de la tendencia es necesario disponer de una serie larga y de un número de ciclos completo, para que ésta no se vea influida por la fase del ciclo en que finaliza la serie, por lo que, a veces, resulta difícil separar ambos componentes. En estos casos resulta útil englobar ambos componentes en uno solo, denominado ciclo-tendencia o tendencia generalizada.
Variación Estacional (S): recoge aquellos comportamientos de tipo regular y repetitivo que se dan a lo largo de un período de tiempo, generalmente igual o inferior a un año, y que son producidos por factores tales como las variaciones climatológicas, las vacaciones, las fiestas, etc.
Movimientos Irregulares (I), que pueden ser aleatorios, la cual recoge los pequeños efectos accidentales, o erráticos, como resultado de hechos no previsibles, pero identificables a posteriori (huelgas, catástrofes, etc.)
En este punto, cabe señalar que en una serie concreta no tienen por qué darse los cuatro componentes. Así, por ejemplo, una serie con periodicidad anual carece de estacionalidad.
La asociación de estos cuatro componentes en una serie temporal, \(Y\), puede responder a distintos esquemas; así, puede ser de tipo aditivo:
\[Y_t=T_t+C_t+S_t+e_t\]
También puede tener una forma multiplicativa:
\[Y_t=T_tC_tS_te_t\]
O bien ser una combinación de ambos, por ejemplo:
\[Y_t=T_tC_tS_t+e_t\]
En este capítulo se introducen algunas de las herramientas de R para la implementación de la descomposición \(Y_t=T_t+S_t+e_t\), y para la estimación de la tendencia \(T_t\). Hay que hacer énfasis en que estos métodos no asumen un modelo global para la tendencia, sino local, es decir, no son modelos con parámetros fijos, de la forma, por ejemplo, \(T_t=\beta_0+\beta_1t\), sino que \(\beta_0\) y \(\beta_1\) cambian en el tiempo para permitir mayor flexibilidad.
Las funciones decompose() y stl() realizan una descomposición de la serie \(Y_t\) en las tres componentes.
La librería “timsac” incluye la función decomp(), que realiza una descomposición temporal incluyendo una componente autoregresiva \(TA_t\) y otra para fechas de intervenciones,\(R_t\), \(Y_t=T_t+S_t+R_t+TA_t+e_t\).
La librería “descomponer” incluye la función descomponer(), que realiza una descomposición temporal de \(Y_t\) transformando las series de tiempo en series de frecuencia.
Hay librerías con varios tipos de filtros para suavizar y extraer los componentes de tendencia y estacionales como “mFilter”, que tiene implementado el filtro Hodrick-Prescott, o la libreria “stats”, que incluye la función filter(), con la que se pueden implementar varios tipos de medias móviles y filtros lineales, por ejemplo, fitros tipo Henderson y filtros recursivos.
La función R “decompose”, obtiene las componentes de tendencia, estacionalidad e irregular de una serie temporal a través de medias móviles, y además permite obtener los componentes en base a un esquema aditivo ó multiplicativo. Es una función generica de R, lo que significa que no requiere de la instalación de ninguna librería. Su uso es el siguiente:
decompose(x, type = c(“additive”, “multiplicative”), filter = NULL)
El modelo aditivo que usa la función es:
\[Y_t = T_t + S_t + e_t\]
Y el multiplicativo:
\[Y_t = T_t S_t e_t\]
La función calcula el componente de tendencia utilizando medias móviles, (si filter = NULL, se utilizan medias móviles simétricas), los índices de estacionalidad son promedios de los indices de estacionalidad que se obtienen al desestacionalizar la serie por el modelo elegido, por último, el componente irregular se obtiene eliminando la tendencia y estacionalidad de la serie temporal.
La función requiere que los datos tengan forma de serie temporal.
A continuación se realiza un sencillo ejercicio de utilización de la función “descomponse”:
plot(decompose(co2))
STL es un método para estimar las componentes \(T_t\) y \(S_t\) con base la Regresión Loess (apartado 4.2.3), desarrollado por Cleveland et al. [1990]. STL consiste de una secuencia de dos aplicaciones iteradas de dicha regresión. Para aplicar este método se debe especificar una frecuencia de muestreo relacionada con el periódo de la componente estacional. La forma de especificar esta frecuencia es declarando la variable en donde se encuentran los datos como un objeto “ts”con frecuencia (52, 12, 4, 1), es decir, semanal, mensual, trimestral o anual, respectivamente.
El ejercicio anterior realizado con la función “stl”.
plot(stl(co2,"per"))
La función decomp() de la libreria timsac, al utilizar tecnica ARIMA (ver apartado siguiente) precisa qeu se le indique al estructura del modelo, su síntaxis es:
decomp(y, trend.order=2, ar.order=2, frequency=12,seasonal.order=1, log=FALSE, trade=FALSE, diff=1,year=1980, month=1, miss=0, omax=99999.9, plot=TRUE)
La opción trade, realiza el ajuste de los efectos calendario.
library(timsac)
decomp(co2, trade=TRUE)
## $trend
## [1] 315.5460 315.6103 315.6746 315.7389 315.8033 315.8677 315.9322
## [8] 315.9966 316.0610 316.1251 316.1891 316.2529 316.3166 316.3801
## [15] 316.4435 316.5068 316.5700 316.6330 316.6957 316.7582 316.8204
## [22] 316.8824 316.9442 317.0058 317.0673 317.1286 317.1897 317.2507
## [29] 317.3116 317.3722 317.4327 317.4929 317.5528 317.6125 317.6718
## [36] 317.7309 317.7897 317.8483 317.9068 317.9650 318.0231 318.0811
## [43] 318.1388 318.1964 318.2538 318.3109 318.3679 318.4248 318.4816
## [50] 318.5384 318.5952 318.6521 318.7090 318.7659 318.8229 318.8800
## [57] 318.9372 318.9947 319.0522 319.1101 319.1682 319.2265 319.2851
## [64] 319.3440 319.4034 319.4632 319.5235 319.5843 319.6454 319.7071
## [71] 319.7694 319.8321 319.8956 319.9597 320.0245 320.0901 320.1564
## [78] 320.2236 320.2916 320.3603 320.4297 320.4997 320.5704 320.6417
## [85] 320.7137 320.7864 320.8597 320.9337 321.0082 321.0833 321.1590
## [92] 321.2353 321.3120 321.3893 321.4672 321.5457 321.6246 321.7040
## [99] 321.7839 321.8645 321.9456 322.0273 322.1096 322.1926 322.2762
## [106] 322.3602 322.4448 322.5299 322.6155 322.7016 322.7882 322.8754
## [113] 322.9632 323.0515 323.1402 323.2294 323.3190 323.4089 323.4993
## [120] 323.5900 323.6809 323.7722 323.8637 323.9554 324.0473 324.1395
## [127] 324.2317 324.3241 324.4165 324.5089 324.6013 324.6939 324.7865
## [134] 324.8793 324.9721 325.0650 325.1580 325.2511 325.3444 325.4378
## [141] 325.5314 325.6250 325.7187 325.8126 325.9067 326.0010 326.0956
## [148] 326.1905 326.2859 326.3816 326.4777 326.5741 326.6708 326.7678
## [155] 326.8651 326.9628 327.0608 327.1591 327.2578 327.3568 327.4562
## [162] 327.5559 327.6559 327.7562 327.8566 327.9572 328.0578 328.1584
## [169] 328.2589 328.3594 328.4597 328.5599 328.6600 328.7598 328.8593
## [176] 328.9585 329.0573 329.1557 329.2538 329.3516 329.4493 329.5470
## [183] 329.6445 329.7419 329.8393 329.9368 330.0343 330.1319 330.2296
## [190] 330.3274 330.4254 330.5237 330.6222 330.7212 330.8205 330.9202
## [197] 331.0204 331.1211 331.2222 331.3239 331.4261 331.5289 331.6323
## [204] 331.7362 331.8409 331.9462 332.0522 332.1589 332.2663 332.3745
## [211] 332.4834 332.5932 332.7038 332.8152 332.9274 333.0404 333.1542
## [218] 333.2688 333.3841 333.5000 333.6166 333.7338 333.8515 333.9697
## [225] 334.0885 334.2076 334.3272 334.4472 334.5676 334.6883 334.8094
## [232] 334.9307 335.0523 335.1743 335.2964 335.4188 335.5413 335.6640
## [239] 335.7869 335.9100 336.0333 336.1567 336.2803 336.4040 336.5278
## [246] 336.6517 336.7757 336.8997 337.0237 337.1477 337.2718 337.3958
## [253] 337.5198 337.6437 337.7675 337.8911 338.0146 338.1379 338.2610
## [260] 338.3840 338.5068 338.6294 338.7518 338.8741 338.9963 339.1184
## [267] 339.2402 339.3620 339.4836 339.6051 339.7266 339.8481 339.9697
## [274] 340.0914 340.2132 340.3352 340.4572 340.5793 340.7015 340.8238
## [281] 340.9462 341.0689 341.1918 341.3150 341.4386 341.5625 341.6868
## [288] 341.8115 341.9366 342.0622 342.1881 342.3144 342.4410 342.5679
## [295] 342.6951 342.8225 342.9501 343.0779 343.2061 343.3346 343.4632
## [302] 343.5921 343.7213 343.8508 343.9804 344.1103 344.2404 344.3708
## [309] 344.5016 344.6327 344.7641 344.8959 345.0280 345.1605 345.2933
## [316] 345.4264 345.5597 345.6935 345.8276 345.9621 346.0970 346.2324
## [323] 346.3683 346.5046 346.6413 346.7786 346.9164 347.0547 347.1934
## [330] 347.3326 347.4722 347.6123 347.7528 347.8936 348.0349 348.1765
## [337] 348.3185 348.4607 348.6032 348.7460 348.8889 349.0319 349.1750
## [344] 349.3180 349.4610 349.6038 349.7464 349.8886 350.0305 350.1720
## [351] 350.3128 350.4530 350.5925 350.7313 350.8692 351.0064 351.1426
## [358] 351.2780 351.4124 351.5458 351.6782 351.8095 351.9397 352.0690
## [365] 352.1972 352.3244 352.4505 352.5756 352.6997 352.8228 352.9449
## [372] 353.0661 353.1862 353.3054 353.4235 353.5407 353.6571 353.7725
## [379] 353.8871 354.0009 354.1139 354.2262 354.3378 354.4486 354.5586
## [386] 354.6680 354.7767 354.8847 354.9920 355.0987 355.2047 355.3104
## [393] 355.4158 355.5210 355.6261 355.7310 355.8357 355.9405 356.0453
## [400] 356.1501 356.2551 356.3602 356.4655 356.5713 356.6775 356.7844
## [407] 356.8918 357.0000 357.1089 357.2187 357.3293 357.4408 357.5532
## [414] 357.6665 357.7808 357.8961 358.0126 358.1303 358.2491 358.3689
## [421] 358.4899 358.6117 358.7346 358.8583 358.9830 359.1086 359.2351
## [428] 359.3624 359.4907 359.6198 359.7497 359.8803 360.0114 360.1432
## [435] 360.2755 360.4083 360.5415 360.6751 360.8091 360.9434 361.0780
## [442] 361.2130 361.3483 361.4838 361.6196 361.7554 361.8913 362.0273
## [449] 362.1634 362.2996 362.4359 362.5722 362.7087 362.8453 362.9821
## [456] 363.1190 363.2560 363.3932 363.5305 363.6680 363.8056 363.9434
## [463] 364.0813 364.2195 364.3579 364.4966 364.6354 364.7744
##
## $seasonal
## [1] -0.04509067 0.62853011 1.37016228 2.50599037 2.98546092
## [6] 2.33026948 0.81189092 -1.25254315 -3.06943987 -3.25147520
## [11] -2.06243298 -0.95131404 -0.04507447 0.62847432 1.37019365
## [16] 2.50598812 2.98549318 2.33020883 0.81192146 -1.25249530
## [21] -3.06952468 -3.25141656 -2.06248598 -0.95127370 -0.04505984
## [26] 0.62840386 1.37025279 2.50598586 2.98551378 2.33014922
## [31] 0.81193562 -1.25242316 -3.06962730 -3.25134602 -2.06253619
## [36] -0.95125622 -0.04501747 0.62833025 1.37027131 2.50605960
## [41] 2.98546047 2.33013072 0.81194339 -1.25236613 -3.06968886
## [46] -3.25133162 -2.06256591 -0.95122610 -0.04499214 0.62829263
## [51] 1.37024431 2.50614196 2.98542701 2.33012019 0.81191057
## [56] -1.25224270 -3.06983875 -3.25125760 -2.06261571 -0.95117470
## [61] -0.04500051 0.62826612 1.37024204 2.50621976 2.98537047
## [66] 2.33010221 0.81190390 -1.25211787 -3.06999903 -3.25120173
## [71] -2.06263665 -0.95112294 -0.04502108 0.62824188 1.37021211
## [76] 2.50633776 2.98530978 2.33007067 0.81191263 -1.25202319
## [81] -3.07011379 -3.25119333 -2.06263629 -0.95107989 -0.04500672
## [86] 0.62817192 1.37021662 2.50640275 2.98530167 2.33006419
## [91] 0.81183170 -1.25182873 -3.07031594 -3.25111838 -2.06270272
## [96] -0.95098463 -0.04499414 0.62807936 1.37024177 2.50643429
## [101] 2.98533464 2.33004123 0.81174517 -1.25162362 -3.07055895
## [106] -3.25097723 -2.06281139 -0.95085341 -0.04503472 0.62800015
## [111] 1.37030242 2.50644854 2.98534903 2.33001953 0.81169877
## [116] -1.25146040 -3.07077472 -3.25085214 -2.06290779 -0.95074976
## [121] -0.04505330 0.62792177 1.37035119 2.50646930 2.98537492
## [126] 2.32999759 0.81163052 -1.25128399 -3.07099121 -3.25074246
## [131] -2.06297030 -0.95065521 -0.04511448 0.62790542 1.37035445
## [136] 2.50651217 2.98537782 2.33002690 0.81149974 -1.25104597
## [141] -3.07126617 -3.25061762 -2.06300783 -0.95058611 -0.04515498
## [146] 0.62788303 1.37036382 2.50650739 2.98543137 2.33004782
## [151] 0.81136999 -1.25081052 -3.07154160 -3.25051126 -2.06303076
## [156] -0.95049800 -0.04521867 0.62786016 1.37034535 2.50657123
## [161] 2.98545028 2.33007407 0.81123633 -1.25060461 -3.07176683
## [166] -3.25043013 -2.06304797 -0.95042604 -0.04524601 0.62776388
## [171] 1.37043276 2.50656644 2.98544977 2.33015546 0.81107903
## [176] -1.25039692 -3.07198026 -3.25036544 -2.06307347 -0.95034409
## [181] -0.04525479 0.62763841 1.37052441 2.50658547 2.98543068
## [186] 2.33023304 0.81095481 -1.25022851 -3.07217908 -3.25029879
## [191] -2.06313022 -0.95024659 -0.04520531 0.62745607 1.37062097
## [196] 2.50661487 2.98538076 2.33036485 0.81080814 -1.25008044
## [201] -3.07235616 -3.25024229 -2.06318657 -0.95014991 -0.04513526
## [206] 0.62723928 1.37074059 2.50664164 2.98533706 2.33047087
## [211] 0.81068080 -1.24991679 -3.07256479 -3.25017640 -2.06323522
## [216] -0.95005591 -0.04506729 0.62703494 1.37084230 2.50666088
## [221] 2.98531586 2.33057775 0.81053171 -1.24972519 -3.07280728
## [226] -3.25009122 -2.06327259 -0.94996756 -0.04503440 0.62688210
## [231] 1.37092230 2.50667211 2.98530501 2.33068480 0.81035668
## [236] -1.24947152 -3.07312103 -3.24997331 -2.06330027 -0.94988391
## [241] -0.04503648 0.62679393 1.37095166 2.50667596 2.98534309
## [246] 2.33076002 0.81019196 -1.24922929 -3.07343870 -3.24983154
## [251] -2.06335677 -0.94976343 -0.04508827 0.62676793 1.37091652
## [256] 2.50671437 2.98539310 2.33080444 0.81006531 -1.24903939
## [261] -3.07372547 -3.24968485 -2.06342017 -0.94962299 -0.04520940
## [266] 0.62685524 1.37077133 2.50680421 2.98545840 2.33080912
## [271] 0.80996236 -1.24886002 -3.07398490 -3.24957902 -2.06346494
## [276] -0.94949161 -0.04529380 0.62690972 1.37062865 2.50689478
## [281] 2.98552850 2.33080535 0.80986136 -1.24867579 -3.07423898
## [286] -3.24947100 -2.06352835 -0.94934497 -0.04538592 0.62698792
## [291] 1.37043898 2.50702092 2.98558145 2.33082463 0.80973101
## [296] -1.24847571 -3.07449540 -3.24935856 -2.06358932 -0.94922399
## [301] -0.04543524 0.62701439 1.37030122 2.50712575 2.98562530
## [306] 2.33084796 0.80963497 -1.24835749 -3.07468115 -3.24928188
## [311] -2.06359295 -0.94917407 -0.04545324 0.62702474 1.37021450
## [316] 2.50716997 2.98569492 2.33087313 0.80954167 -1.24828473
## [321] -3.07480061 -3.24922052 -2.06361324 -0.94914540 -0.04543581
## [326] 0.62706058 1.37005868 2.50726112 2.98574550 2.33089503
## [331] 0.80946315 -1.24820433 -3.07495530 -3.24912169 -2.06364440
## [336] -0.94913080 -0.04541733 0.62710080 1.36993270 2.50732134
## [341] 2.98579757 2.33090723 0.80939141 -1.24807130 -3.07520095
## [346] -3.24896523 -2.06368403 -0.94911302 -0.04542917 0.62716874
## [351] 1.36981208 2.50738037 2.98583763 2.33088993 0.80938603
## [356] -1.24797542 -3.07545155 -3.24879715 -2.06374040 -0.94907057
## [361] -0.04542544 0.62717349 1.36974063 2.50742076 2.98589166
## [366] 2.33086211 0.80938132 -1.24788383 -3.07568286 -3.24865276
## [371] -2.06379150 -0.94899194 -0.04548228 0.62719740 1.36971302
## [376] 2.50740543 2.98596787 2.33085219 0.80934089 -1.24777959
## [381] -3.07589588 -3.24852320 -2.06384621 -0.94890601 -0.04552483
## [386] 0.62719586 1.36966996 2.50744961 2.98598718 2.33086631
## [391] 0.80931156 -1.24771559 -3.07606553 -3.24839781 -2.06390547
## [396] -0.94886933 -0.04551013 0.62719525 1.36961216 2.50750511
## [401] 2.98597649 2.33087554 0.80931649 -1.24767262 -3.07621427
## [406] -3.24828080 -2.06396763 -0.94884111 -0.04549277 0.62720820
## [411] 1.36955022 2.50755042 2.98599300 2.33082597 0.80936934
## [416] -1.24765000 -3.07632226 -3.24822352 -2.06400082 -0.94878824
## [421] -0.04553240 0.62728168 1.36943948 2.50763518 2.98599539
## [426] 2.33074034 0.80946042 -1.24763892 -3.07640739 -3.24820105
## [431] -2.06401109 -0.94872040 -0.04562131 0.62739336 1.36932638
## [436] 2.50769991 2.98600587 2.33066638 0.80953599 -1.24762211
## [441] -3.07648796 -3.24817201 -2.06402790 -0.94867245 -0.04567043
## [446] 0.62744859 1.36928889 2.50769536 2.98605292 2.33059012
## [451] 0.80957838 -1.24755528 -3.07661554 -3.24809023 -2.06409892
## [456] -0.94859114 -0.04570630 0.62747915 1.36921701 2.50774907
## [461] 2.98607848 2.33052816 0.80959452 -1.24749003 -3.07671249
## [466] -3.24803777 -2.06413818 -0.94853776
##
## $ar
## [1] -0.074419466 -0.140070851 -0.411392442 -0.576375881 -0.545620693
## [6] -0.348833512 -0.238891245 0.019263911 0.377204735 0.407952259
## [11] 0.379589958 0.194710842 -0.011241511 -0.183202001 -0.250850572
## [16] -0.071195311 0.209309675 0.395644394 0.425971817 0.312455059
## [21] 0.206440288 0.073352443 -0.020009761 -0.104598035 -0.217465041
## [26] -0.223413045 -0.214936159 -0.234473917 -0.048803637 0.014206312
## [31] 0.158762656 0.318339688 0.434545803 0.529258895 0.359396416
## [36] 0.163461131 0.062461962 0.022724928 0.068856988 -0.016079095
## [41] -0.049260371 0.107626885 0.342216373 0.467603597 0.580289003
## [46] 0.369749451 0.215871171 0.090178830 0.011495684 -0.123682045
## [51] -0.131580199 0.053211013 0.208936145 0.164041172 0.037919300
## [56] 0.035545497 0.089652127 0.077204713 0.018445278 0.086826092
## [61] 0.178732999 0.143778749 -0.025603982 -0.251726314 -0.252374909
## [66] -0.124305195 -0.002461752 0.092066608 0.073503804 0.061283371
## [71] -0.132458722 -0.321290659 -0.438927793 -0.449535089 -0.587895590
## [76] -0.727094978 -0.880044661 -0.696130444 -0.341799108 -0.197820174
## [81] 0.041598284 0.018359223 -0.017415216 -0.193164630 -0.174989226
## [86] -0.061420735 -0.005562853 0.038084601 0.027122305 0.143109420
## [91] 0.227317009 0.218400753 0.144623584 0.030996980 0.164735990
## [96] 0.275901475 0.320813917 0.094065058 -0.124171549 -0.161778455
## [101] -0.218305856 -0.351760152 -0.391085700 -0.218640211 -0.074112809
## [106] 0.087798383 0.144491517 0.083893019 -0.130714279 -0.303698169
## [111] -0.413809227 -0.474538702 -0.407839732 -0.220027290 -0.058322347
## [116] -0.041800212 -0.068363313 -0.105910349 -0.114212663 0.018331361
## [121] 0.096648585 0.036939271 0.103310862 0.100483763 0.142309218
## [126] 0.232221050 0.463816311 0.544690928 0.613175393 0.432129392
## [131] 0.244251339 0.200829528 0.200621079 0.284314068 0.326104997
## [136] 0.234037578 -0.013302330 -0.039896411 0.096225102 0.287122699
## [141] 0.413434305 0.402278688 0.253080255 0.134382673 0.051791813
## [146] -0.173406301 -0.490233700 -0.724861497 -0.564501736 -0.329580232
## [151] -0.154015266 -0.130079777 -0.225031660 -0.184336879 -0.178840477
## [156] -0.237275370 -0.369369109 -0.471780263 -0.648746859 -0.538998003
## [161] -0.597066015 -0.723812157 -0.588984371 -0.350331620 -0.067873383
## [166] 0.188360581 0.277112995 0.244701912 0.245965330 0.311688971
## [171] 0.313981295 0.377975439 0.592632631 0.821052619 1.055878025
## [176] 1.291231525 1.268099160 1.054905341 0.679954426 0.222047637
## [181] 0.031045868 0.198871855 0.256594074 0.197083492 0.096947833
## [186] 0.001558653 0.126768558 0.210277781 0.150849792 0.071385868
## [191] -0.048405903 -0.163816795 -0.224855441 -0.217122770 -0.272393941
## [196] -0.251678639 -0.186838052 -0.137749308 -0.170934830 -0.135374414
## [201] -0.062627301 -0.120403936 -0.193473696 -0.208843189 -0.190659419
## [206] -0.165458999 -0.162023764 -0.283997103 -0.444513071 -0.487871632
## [211] -0.486823484 -0.540063728 -0.571925500 -0.670102459 -0.663453076
## [216] -0.550847178 -0.473117051 -0.466955962 -0.292636903 -0.134974141
## [221] -0.046434965 0.025673800 0.061853988 0.063013895 0.173283219
## [226] 0.089774603 0.063771214 0.122812776 0.145023584 0.090926606
## [231] 0.168897292 0.100907013 0.022552693 0.140931355 0.222876770
## [236] 0.235730261 0.139139684 0.018971766 -0.019189910 -0.065063720
## [241] -0.034965066 -0.081681906 -0.028838846 -0.112381531 -0.088737956
## [246] 0.021088436 0.053749287 0.066500048 -0.089606911 -0.141098310
## [251] -0.051190033 0.094862673 0.228906180 0.222826459 0.417387966
## [256] 0.340568052 0.335434848 0.395038278 0.339663246 0.315285598
## [261] 0.319033508 0.356538163 0.253073094 0.184980445 0.229003065
## [266] 0.426475513 0.497940616 0.433435770 0.280312427 0.085675644
## [271] -0.132271950 -0.280530253 -0.289055840 -0.171796768 -0.024079871
## [276] 0.063380172 0.167256314 0.254495091 0.297409909 0.136044295
## [281] -0.003974546 -0.140038639 -0.231943441 -0.394956929 -0.510181931
## [286] -0.561710556 -0.555950260 -0.547370123 -0.571033063 -0.472212654
## [291] -0.389334322 -0.125647594 0.107856348 0.238554794 0.314612699
## [296] 0.319190964 0.052642286 -0.027814389 0.012727383 0.201978327
## [301] 0.168073619 0.129658136 0.155710067 0.315043337 0.279847018
## [306] 0.203652329 0.099511665 -0.066955470 -0.272779046 -0.174549083
## [311] -0.020592600 0.000695529 -0.040244760 0.114849118 0.335016242
## [316] 0.277061268 0.183869570 0.016420505 -0.143308356 -0.192814156
## [321] -0.197364003 -0.270917641 -0.256144025 -0.287691108 -0.419713241
## [326] -0.528132407 -0.485211795 -0.295813282 -0.240055824 -0.322143253
## [331] -0.449705678 -0.449838939 -0.320586806 -0.448750511 -0.490744981
## [336] -0.498465397 -0.545586828 -0.664446526 -0.628439966 -0.466636837
## [341] -0.334524762 -0.349719630 -0.424443090 -0.268917709 -0.162460365
## [346] -0.128634404 -0.076726631 0.019349377 0.261337059 0.484657215
## [351] 0.446224932 0.450688256 0.465707536 0.519412762 0.536676134
## [356] 0.529987235 0.534724714 0.593066302 0.600132901 0.634723871
## [361] 0.697560495 0.539631201 0.432161432 0.481850489 0.407892292
## [366] 0.359846864 0.340050648 0.208967313 0.135364372 0.189230998
## [371] 0.248911340 0.306678345 0.399718787 0.469383970 0.359029124
## [376] 0.186326285 0.169872842 0.050521093 -0.017770906 -0.032030629
## [381] -0.063971826 0.104567920 0.311332600 0.373972708 0.286190047
## [386] 0.460871513 0.784299135 1.004338159 0.990027368 0.634228881
## [391] 0.175696321 -0.090138992 -0.197024567 -0.113011830 0.010501843
## [396] 0.081442305 0.090738473 0.132485855 0.255999640 0.356560872
## [401] 0.349328840 0.226756739 -0.135675451 -0.381069872 -0.509798939
## [406] -0.504193616 -0.624082691 -0.643831736 -0.559708242 -0.571630001
## [411] -0.464780725 -0.447981807 -0.427223569 -0.583374960 -0.924864455
## [416] -1.116178788 -1.131921538 -0.973186200 -0.810499043 -0.553215667
## [421] -0.303473165 -0.255970492 -0.195063522 -0.188649191 -0.308766791
## [426] -0.432712325 -0.497198549 -0.545643296 -0.503125402 -0.344382711
## [431] -0.128785625 0.019147374 0.075657635 0.177999240 0.196978027
## [436] 0.353248205 0.323368448 0.284563238 0.188491902 0.018559119
## [441] 0.007862504 0.018693395 0.189183656 0.300055166 0.514163892
## [446] 0.714865832 0.654599528 0.406452574 0.351477029 0.357601588
## [451] 0.345072543 0.182965632 0.011557227 -0.012431990 -0.005277911
## [456] 0.076940618 0.059607771 -0.004786004 -0.076190397 0.026256630
## [461] -0.095321781 -0.363493824 -0.444683684 -0.539097150 -0.682016749
## [466] -0.406836144 -0.050071597 0.301209146
##
## $trad
## [1] 0.0213755473 0.0042542801 -0.0256298274 0.0002571471 0.0164366011
## [6] -0.0166937482 0.0213755473 0.0314231225 -0.0082281677 -0.0189406747
## [11] 0.0271688424 -0.0525415227 0.0164366011 0.0000000000 0.0278767539
## [16] -0.0231949548 0.0314231225 -0.0082281677 -0.0189406747 -0.0256298274
## [21] 0.0002571471 0.0164366011 -0.0166937482 0.0213755473 0.0314231225
## [26] 0.0000000000 -0.0525415227 0.0253726804 -0.0256298274 0.0002571471
## [31] 0.0164366011 0.0278767539 -0.0231949548 0.0314231225 -0.0082281677
## [36] -0.0189406747 -0.0256298274 0.0000000000 0.0213755473 -0.0046817992
## [41] 0.0278767539 -0.0231949548 0.0314231225 -0.0525415227 0.0253726804
## [46] -0.0256298274 0.0002571471 0.0164366011 0.0278767539 -0.0443133550
## [51] 0.0164366011 -0.0166937482 0.0213755473 -0.0046817992 0.0278767539
## [56] -0.0189406747 0.0271688424 -0.0525415227 0.0253726804 -0.0256298274
## [61] 0.0213755473 0.0000000000 0.0314231225 -0.0082281677 -0.0189406747
## [66] 0.0271688424 -0.0525415227 0.0164366011 -0.0166937482 0.0213755473
## [71] -0.0046817992 0.0278767539 -0.0189406747 0.0000000000 -0.0256298274
## [76] 0.0002571471 0.0164366011 -0.0166937482 0.0213755473 0.0314231225
## [81] -0.0082281677 -0.0189406747 0.0271688424 -0.0525415227 0.0164366011
## [86] 0.0000000000 0.0278767539 -0.0231949548 0.0314231225 -0.0082281677
## [91] -0.0189406747 -0.0256298274 0.0002571471 0.0164366011 -0.0166937482
## [96] 0.0213755473 0.0314231225 -0.0527986698 0.0213755473 -0.0046817992
## [101] 0.0278767539 -0.0231949548 0.0314231225 -0.0525415227 0.0253726804
## [106] -0.0256298274 0.0002571471 0.0164366011 0.0278767539 0.0000000000
## [111] -0.0189406747 0.0271688424 -0.0525415227 0.0253726804 -0.0256298274
## [116] 0.0213755473 -0.0046817992 0.0278767539 -0.0231949548 0.0314231225
## [121] -0.0525415227 0.0000000000 0.0164366011 -0.0166937482 0.0213755473
## [126] -0.0046817992 0.0278767539 -0.0189406747 0.0271688424 -0.0525415227
## [131] 0.0253726804 -0.0256298274 0.0213755473 0.0000000000 0.0314231225
## [136] -0.0082281677 -0.0189406747 0.0271688424 -0.0525415227 0.0164366011
## [141] -0.0166937482 0.0213755473 -0.0046817992 0.0278767539 -0.0189406747
## [146] -0.0089360793 0.0278767539 -0.0231949548 0.0314231225 -0.0082281677
## [151] -0.0189406747 -0.0256298274 0.0002571471 0.0164366011 -0.0166937482
## [156] 0.0213755473 0.0314231225 0.0000000000 -0.0525415227 0.0253726804
## [161] -0.0256298274 0.0002571471 0.0164366011 0.0278767539 -0.0231949548
## [166] 0.0314231225 -0.0082281677 -0.0189406747 -0.0256298274 0.0000000000
## [171] 0.0213755473 -0.0046817992 0.0278767539 -0.0231949548 0.0314231225
## [176] -0.0525415227 0.0253726804 -0.0256298274 0.0002571471 0.0164366011
## [181] 0.0278767539 0.0000000000 -0.0189406747 0.0271688424 -0.0525415227
## [186] 0.0253726804 -0.0256298274 0.0213755473 -0.0046817992 0.0278767539
## [191] -0.0231949548 0.0314231225 -0.0525415227 0.0211184003 0.0314231225
## [196] -0.0082281677 -0.0189406747 0.0271688424 -0.0525415227 0.0164366011
## [201] -0.0166937482 0.0213755473 -0.0046817992 0.0278767539 -0.0189406747
## [206] 0.0000000000 -0.0256298274 0.0002571471 0.0164366011 -0.0166937482
## [211] 0.0213755473 0.0314231225 -0.0082281677 -0.0189406747 0.0271688424
## [216] -0.0525415227 0.0164366011 0.0000000000 0.0278767539 -0.0231949548
## [221] 0.0314231225 -0.0082281677 -0.0189406747 -0.0256298274 0.0002571471
## [226] 0.0164366011 -0.0166937482 0.0213755473 0.0314231225 0.0000000000
## [231] -0.0525415227 0.0253726804 -0.0256298274 0.0002571471 0.0164366011
## [236] 0.0278767539 -0.0231949548 0.0314231225 -0.0082281677 -0.0189406747
## [241] -0.0256298274 0.0445705021 -0.0189406747 0.0271688424 -0.0525415227
## [246] 0.0253726804 -0.0256298274 0.0213755473 -0.0046817992 0.0278767539
## [251] -0.0231949548 0.0314231225 -0.0525415227 0.0000000000 0.0164366011
## [256] -0.0166937482 0.0213755473 -0.0046817992 0.0278767539 -0.0189406747
## [261] 0.0271688424 -0.0525415227 0.0253726804 -0.0256298274 0.0213755473
## [266] 0.0000000000 0.0314231225 -0.0082281677 -0.0189406747 0.0271688424
## [271] -0.0525415227 0.0164366011 -0.0166937482 0.0213755473 -0.0046817992
## [276] 0.0278767539 -0.0189406747 0.0000000000 -0.0256298274 0.0002571471
## [281] 0.0164366011 -0.0166937482 0.0213755473 0.0314231225 -0.0082281677
## [286] -0.0189406747 0.0271688424 -0.0525415227 0.0164366011 0.0361049216
## [291] -0.0525415227 0.0253726804 -0.0256298274 0.0002571471 0.0164366011
## [296] 0.0278767539 -0.0231949548 0.0314231225 -0.0082281677 -0.0189406747
## [301] -0.0256298274 0.0000000000 0.0213755473 -0.0046817992 0.0278767539
## [306] -0.0231949548 0.0314231225 -0.0525415227 0.0253726804 -0.0256298274
## [311] 0.0002571471 0.0164366011 0.0278767539 0.0000000000 -0.0189406747
## [316] 0.0271688424 -0.0525415227 0.0253726804 -0.0256298274 0.0213755473
## [321] -0.0046817992 0.0278767539 -0.0231949548 0.0314231225 -0.0525415227
## [326] 0.0000000000 0.0164366011 -0.0166937482 0.0213755473 -0.0046817992
## [331] 0.0278767539 -0.0189406747 0.0271688424 -0.0525415227 0.0253726804
## [336] -0.0256298274 0.0213755473 0.0042542801 -0.0256298274 0.0002571471
## [341] 0.0164366011 -0.0166937482 0.0213755473 0.0314231225 -0.0082281677
## [346] -0.0189406747 0.0271688424 -0.0525415227 0.0164366011 0.0000000000
## [351] 0.0278767539 -0.0231949548 0.0314231225 -0.0082281677 -0.0189406747
## [356] -0.0256298274 0.0002571471 0.0164366011 -0.0166937482 0.0213755473
## [361] 0.0314231225 0.0000000000 -0.0525415227 0.0253726804 -0.0256298274
## [366] 0.0002571471 0.0164366011 0.0278767539 -0.0231949548 0.0314231225
## [371] -0.0082281677 -0.0189406747 -0.0256298274 0.0000000000 0.0213755473
## [376] -0.0046817992 0.0278767539 -0.0231949548 0.0314231225 -0.0525415227
## [381] 0.0253726804 -0.0256298274 0.0002571471 0.0164366011 0.0278767539
## [386] -0.0443133550 0.0164366011 -0.0166937482 0.0213755473 -0.0046817992
## [391] 0.0278767539 -0.0189406747 0.0271688424 -0.0525415227 0.0253726804
## [396] -0.0256298274 0.0213755473 0.0000000000 0.0314231225 -0.0082281677
## [401] -0.0189406747 0.0271688424 -0.0525415227 0.0164366011 -0.0166937482
## [406] 0.0213755473 -0.0046817992 0.0278767539 -0.0189406747 0.0000000000
## [411] -0.0256298274 0.0002571471 0.0164366011 -0.0166937482 0.0213755473
## [416] 0.0314231225 -0.0082281677 -0.0189406747 0.0271688424 -0.0525415227
## [421] 0.0164366011 0.0000000000 0.0278767539 -0.0231949548 0.0314231225
## [426] -0.0082281677 -0.0189406747 -0.0256298274 0.0002571471 0.0164366011
## [431] -0.0166937482 0.0213755473 0.0314231225 -0.0527986698 0.0213755473
## [436] -0.0046817992 0.0278767539 -0.0231949548 0.0314231225 -0.0525415227
## [441] 0.0253726804 -0.0256298274 0.0002571471 0.0164366011 0.0278767539
## [446] 0.0000000000 -0.0189406747 0.0271688424 -0.0525415227 0.0253726804
## [451] -0.0256298274 0.0213755473 -0.0046817992 0.0278767539 -0.0231949548
## [456] 0.0314231225 -0.0525415227 0.0000000000 0.0164366011 -0.0166937482
## [461] 0.0213755473 -0.0046817992 0.0278767539 -0.0189406747 0.0271688424
## [466] -0.0525415227 0.0253726804 -0.0256298274
##
## $noise
## [1] -2.791231e-02 2.069586e-01 -1.077216e-01 -1.087578e-01 -1.295490e-01
## [6] 1.675347e-01 -1.365404e-01 -1.447424e-01 3.195003e-01 -8.267179e-02
## [11] 1.265418e-01 -1.378955e-02 -6.697445e-03 -1.536207e-02 -1.707197e-01
## [16] -4.842503e-02 7.375692e-02 7.938114e-02 9.533367e-02 -5.249799e-02
## [21] 4.243754e-02 -4.076106e-02 -5.003686e-03 5.868201e-02 -1.061583e-01
## [26] 6.444272e-03 8.750840e-02 -2.375899e-01 1.973595e-01 -1.068186e-01
## [31] 2.114219e-04 4.333866e-02 -6.453709e-02 2.381904e-01 -2.043571e-02
## [36] -7.412732e-02 -1.517149e-03 -9.939516e-02 1.627031e-01 -3.033439e-02
## [41] -1.371899e-01 -4.561959e-02 1.255778e-01 -1.091080e-01 3.202451e-01
## [46] -1.336963e-01 8.547447e-03 -5.015759e-02 1.040326e-01 -7.866655e-02
## [51] -1.502836e-01 2.527945e-02 1.552887e-01 5.462470e-02 -1.205841e-01
## [56] -3.435075e-02 6.577056e-02 6.193816e-02 -1.234497e-01 -2.010131e-02
## [61] 8.673403e-02 7.147705e-02 7.886462e-02 -1.902769e-01 -5.744489e-02
## [66] 3.380815e-02 -1.041158e-02 9.936358e-02 -9.225902e-02 1.713960e-01
## [71] -3.957511e-02 -3.760729e-02 -1.226952e-01 1.415730e-01 -5.122941e-02
## [76] 1.003936e-01 -2.781451e-01 -1.308755e-01 2.668933e-01 -2.318856e-01
## [81] 2.670365e-01 -1.079590e-01 1.824680e-01 -1.949453e-01 -5.018613e-02
## [86] 7.681556e-02 -2.227947e-02 8.502716e-02 -1.420530e-01 4.171397e-02
## [91] 6.075421e-02 2.378898e-02 9.340341e-02 -2.456503e-01 7.743241e-02
## [96] -2.194486e-02 2.381731e-01 -3.333452e-02 -1.713828e-01 4.554133e-02
## [101] 8.948228e-02 -5.240648e-02 -1.817316e-01 9.019040e-02 -5.685651e-02
## [106] 6.856092e-02 3.321935e-02 1.205994e-01 -6.761504e-02 -3.588329e-02
## [111] 4.221343e-03 -7.450440e-02 -8.815366e-02 1.315525e-02 1.120112e-01
## [116] -7.528289e-03 4.837088e-03 9.949277e-03 -1.389473e-01 5.104113e-02
## [121] 1.500038e-01 -1.770429e-01 1.162093e-01 -4.567454e-02 1.359564e-02
## [126] -1.569903e-01 1.849557e-01 -9.852310e-02 2.341938e-01 -1.770329e-02
## [131] -1.179755e-01 3.156786e-02 -7.342911e-02 2.847567e-02 6.998317e-02
## [136] 1.726577e-01 -2.011151e-01 -6.840403e-02 -1.958081e-02 3.965425e-02
## [141] 7.315098e-02 1.019568e-01 -5.413351e-02 -6.431586e-02 1.155628e-01
## [146] 6.341369e-02 6.378888e-03 -3.289833e-01 2.175871e-02 2.613350e-02
## [151] 8.388394e-02 1.024414e-01 -1.744432e-01 5.062091e-02 2.342159e-02
## [156] 5.358752e-02 -7.762969e-02 1.547981e-01 -3.468427e-01 2.102085e-01
## [161] 8.103525e-02 -2.423992e-01 -1.457949e-02 -2.311312e-02 -1.381335e-02
## [166] 1.134144e-01 7.633274e-02 -4.373575e-02 -6.402227e-02 1.011489e-01
## [171] -2.552972e-02 -1.098059e-01 4.404931e-02 1.218136e-02 -5.771540e-02
## [176] 2.031735e-01 7.118068e-02 8.535538e-02 1.190604e-01 -1.597535e-01
## [181] -2.829753e-01 1.765390e-01 6.733569e-02 7.226783e-03 5.081556e-02
## [186] -2.139402e-01 6.361054e-02 1.166856e-01 -3.355537e-02 3.364892e-02
## [191] -6.668737e-04 -3.101907e-02 -6.962957e-02 9.738595e-02 -8.011743e-02
## [196] -2.691371e-02 -3.467784e-06 8.914880e-02 -7.954578e-02 -5.487591e-02
## [201] 1.255535e-01 -9.624354e-03 -5.091336e-02 -1.513167e-02 -6.158265e-03
## [206] -1.798672e-02 9.471499e-02 2.822636e-02 -1.135340e-01 -3.036519e-02
## [211] 6.132845e-02 -6.464741e-02 8.893909e-02 -9.593587e-02 -8.784538e-02
## [216] 3.304698e-02 9.754243e-02 -1.888328e-01 3.986594e-02 5.148270e-02
## [221] -1.692218e-02 1.818076e-02 5.503780e-02 -1.674076e-01 2.307858e-01
## [226] -8.375165e-02 -7.102372e-02 3.855489e-02 1.009889e-01 -1.861185e-01
## [231] 1.733530e-01 2.634167e-02 -1.945566e-01 7.387359e-02 2.391770e-02
## [236] 7.709352e-02 1.587170e-02 -8.444373e-02 5.377875e-02 -9.614769e-02
## [241] 1.223175e-01 -1.564164e-01 1.865181e-01 -1.154506e-01 -7.185726e-02
## [246] 9.107342e-02 -5.397935e-02 1.816875e-01 -1.059343e-01 -8.464223e-02
## [251] -1.402003e-02 -1.234100e-02 1.889063e-01 -3.032981e-01 3.377522e-01
## [256] -1.217110e-01 -6.679761e-02 1.409263e-01 -4.864476e-02 -1.302731e-03
## [261] -5.926453e-02 1.562763e-01 -3.687074e-02 -4.385849e-02 -1.414657e-01
## [266] 1.283189e-01 6.962638e-02 3.602445e-02 9.611082e-03 3.127402e-02
## [271] -3.170631e-02 -7.512685e-02 -6.995991e-02 -1.141862e-02 6.898345e-02
## [276] -3.691683e-02 9.819801e-03 -2.066675e-02 1.861264e-01 -7.695674e-02
## [281] 1.578545e-02 -6.296949e-02 8.888020e-02 -5.282442e-02 -3.593006e-02
## [286] -4.237586e-02 -4.501828e-03 5.773483e-02 -1.366465e-01 9.696159e-02
## [291] -1.866387e-01 4.886500e-02 7.116717e-02 2.432440e-03 -2.586663e-02
## [296] 2.889372e-01 -2.150052e-01 -1.217880e-02 -1.670079e-01 2.516292e-01
## [301] -4.023719e-02 -1.881773e-02 -1.587088e-01 2.117469e-01 -2.376329e-02
## [306] -1.602568e-03 3.899565e-02 1.070092e-01 -2.794779e-01 -3.216949e-03
## [311] 1.197854e-01 7.612166e-02 -1.802000e-01 -8.236462e-02 2.704150e-01
## [316] -6.776383e-02 6.323148e-02 3.874625e-03 -8.815410e-02 -3.234494e-02
## [321] 9.982487e-02 -1.201443e-01 3.469237e-02 8.084305e-02 -1.364825e-02
## [326] -9.753047e-02 -1.376753e-01 1.205503e-01 6.949286e-02 3.331850e-02
## [331] -9.984993e-02 -1.652963e-01 2.955858e-01 -1.532333e-01 -2.588135e-02
## [336] 1.671327e-02 9.117671e-02 -1.375921e-01 -8.907866e-02 1.306209e-02
## [341] 1.033567e-01 7.356301e-02 -2.513076e-01 8.751813e-02 5.487244e-02
## [346] -2.727159e-02 6.865207e-03 -1.263384e-01 -1.289249e-02 2.562039e-01
## [351] -1.066980e-01 2.214936e-02 -3.545642e-02 4.665820e-02 2.363010e-02
## [356] 7.232026e-03 -5.217509e-02 8.130152e-02 -2.207372e-02 -7.280102e-02
## [361] 2.382865e-01 -5.626844e-02 -1.591013e-01 1.763509e-01 -4.536038e-02
## [366] -4.533646e-02 1.336275e-01 -4.455402e-02 -9.617154e-02 3.519542e-02
## [371] 1.817628e-02 -3.481620e-02 -1.483207e-02 1.480301e-01 5.633724e-02
## [376] -1.897949e-01 1.592195e-01 -6.066889e-02 -4.008211e-02 9.145874e-02
## [381] -1.794247e-01 -1.664129e-02 1.044648e-01 1.799098e-01 -2.371712e-01
## [386] -8.176847e-02 8.285964e-02 1.001599e-01 2.305686e-01 6.092994e-02
## [391] -1.576140e-01 -3.362805e-02 -1.199122e-01 2.911133e-03 4.196018e-02
## [396] 5.210213e-02 -2.234314e-02 -7.017565e-02 1.768405e-02 6.403380e-02
## [401] 8.561279e-03 2.250154e-01 -1.466255e-01 -3.896314e-02 -1.348093e-01
## [406] 1.767447e-01 -1.090779e-01 -1.051928e-01 1.451941e-01 -1.742756e-01
## [411] 1.115476e-01 -9.061780e-02 1.016116e-01 1.527515e-01 -1.566510e-01
## [416] -8.373343e-02 -1.261752e-01 6.004209e-02 -1.017499e-01 -3.440425e-02
## [421] 1.827142e-01 -9.303228e-02 1.319343e-02 9.589162e-02 -2.163336e-02
## [426] -5.835864e-02 2.162738e-02 -5.352451e-02 -7.142507e-02 -4.365986e-02
## [431] 4.980316e-02 7.794318e-02 -9.290199e-02 1.341854e-01 -2.031966e-01
## [436] 2.154164e-01 -5.877130e-02 3.284774e-02 1.014733e-01 -1.617708e-01
## [441] 7.521131e-02 -1.579201e-01 1.362634e-01 -1.116644e-01 -2.594070e-02
## [446] 1.922568e-01 1.637147e-01 -2.086152e-01 1.626809e-03 -3.142897e-03
## [451] 1.351165e-01 1.099619e-02 -1.289453e-01 3.733526e-02 -8.950941e-02
## [456] 1.012238e-01 1.259665e-02 4.409586e-02 -2.299854e-01 2.146759e-01
## [461] 1.222524e-01 -2.257129e-01 4.588352e-02 1.560236e-01 -3.863293e-01
## [466] 4.085872e-02 -5.657069e-02 2.385952e-01
##
## $aic
## [1] 208.8332
##
## $lkhd
## [1] -77.41658
##
## $sigma2
## [1] 0.02687679
##
## $tau1
## [1] 0.0004375694
##
## $tau2
## [1] 1.0001
##
## $tau3
## [1] 0.0001000002
##
## $arcoef
## [1] 1.167818 -0.297576
##
## $tdf
## [1] 0.036104922 -0.052798670 0.044570502 -0.044313355 0.021118400
## [6] 0.004254280 -0.008936079
La función descomponer() de la libreria descomponer, descompone la tendencia siguiendo un modelo multiplicativo \(Y_t=T_tS_t+e_t\), tiene la siguiente sintesis:
descomponer(y,frequency,type)
En type se elige un modelo lineal (1) ó cuadrático (2) para la tendencia.
La representación gráfica se realiza con gdescomponer(y,freq,type,year,q).
library(descomponer)
par(mar = c(2, 2, 2.5, 2.5), font = 2)
gdescomponer(co2,12,1,1959,1)
# dev.off()
Las series de tendencia y estacionalidad son por lo general muy similares en todos los métodos.
# Representación gráfica de la tendencia
plot(co2, main="Tendencia")
lines (decompose(co2)$trend,col=2)
lines(stl(co2,"per")$time.series[,2],col=3)
lines(ts(descomponer(co2,12,1)$datos$TD, frequency = 12, start = c(1959, 1)), col=4)
legend("bottomright", c("Original", "decompose", "stl", "descomponer"), lwd=c(1,2,2,2), col=c("black",2,3,4))
grid()
# Representación gráfica de la estacionalidad
plot (decompose(co2)$seasonal, col=2, main="Estacionalidad")
lines(stl(co2,"per")$time.series[,1],col=3)
lines(ts(descomponer(co2,12,1)$datos$ST, frequency = 12, start = c(1959, 1)), col=4)
legend("bottomright", c("decompose", "stl","descomponer"), lwd=c(2,2,2), col=c(2,3,4))
grid()
La publicación de la obra Time Series Analysis: Forecasting and Control por G. E. P. Box y G. M. Jenkins en 1976 estableció un punto de inflexión en las técnicas cuantitativas de predicción en Economía. La metodología propuesta por estos autores, también conocida como metodología ARIMA, trata de realizar previsiones acerca de los valores futuros de una variable utilizando únicamente como información la contenida en los valores pasados de la propia serie temporal. Este enfoque supone una alternativa a la construcción de modelos uniecuacionales o de ecuaciones simultáneas, pues supone admitir que las series temporales poseen un carácter estocástico, lo que implica que deben analizarse sus propiedades probabilísticas para que éstas “hablen por sí mismas”.
El análisis univariante de series temporales presenta como ventaja frente a otros métodos de predicción el no depender de los problemas de información asociados a las variables endógenas o exógenas. Como hemos visto en capítulos anteriores, los modelos económicos que hemos estimado hasta el momento requerían un conjunto de variables exógenas que se utilizaban para explicar el comportamiento de una variable endógena. Sin embargo, en muchas ocasiones no se dispone de observaciones para alguna de las variables exógenas, ya sea porque no es posible medir la variable (por ejemplo, las expectativas de los agentes) o porque la muestra de datos de que disponemos para representar dicha variable presenta errores de medida. Este problema desaparece cuando se trata de modelizar una variable endógena mediante un modelo de tipo univariante como el propuesto por Box y Jenkins, ya que se hace depender a dicha variable tan sólo de su propio pasado y un conjunto de perturbaciones aleatorias, pero no de otras variables, caracterizando así las series económicas en su dimensión temporal.
En el presente apartado vamos a definir y caracterizar una amplia familia de estructuras estocásticas lineales, así como la metodología a seguir para seleccionar aquel modelo univariante que resulte más adecuado para representar la estructura estocástica de la variable económica que estemos analizando.
Podemos definir un proceso estocástico como un conjunto de variables aleatorias asociadas a distintos instantes del tiempo. Así, en cada período o momento temporal se dispone de una variable que tendrá su correspondiente distribución de probabilidad; por ejemplo, si consideramos el proceso \(Y_t\), para \(t = 1\), tendremos una variable aleatoria, \(Y_1\), que tomará diferentes valores con diferentes probabilidades.
La relación existente, por tanto, entre una serie temporal y el proceso estocástico que la genera es análoga a la que existe entre una muestra y la población de la que procede, de tal forma que podemos considerar una serie temporal como una muestra o realización de un proceso estocástico, formada por una sola observación de cada una de las variables que componen el proceso. La tarea del investigador será, por tanto, inferir la forma del proceso estocástico a partir de las series temporales que genera.
Un proceso estocástico, \(Y_t\), se suele describir mediante las siguientes características: esperanza matemática, varianza, autocovarianzas y coeficientes de autocorrelación.
La esperanza matemática de \(Y_t\) se traduce en la sucesión de las esperanzas matemáticas de las variables que componen el proceso a lo largo del tiempo, tal que:
\[E(Y_t)=\mu_t,\ \ t=1,2,3...\]
Por su parte, la varianza de un proceso aleatorio es una sucesión de varianzas, una por cada variable del proceso:
\[Var(Y_t)=E(Y_t–\mu_t)^2,\ \ t=1,2,3...\]
Las autocovarianzas, por su parte, son las covarianzas entre cada par de variables del proceso, tales que:
\[\gamma_k=Cov(Y_t,Y_{t+k})=E[(Y_t–\mu_t)(Y_{t+k}–\mu_{t+k})]=\gamma_{t,t+k},\ \ t=1,2,3...\]
Finalmente, los coeficientes de autocorrelación son los coeficientes de correlación lineal entre cada par de variables que componen el proceso:
\[\rho_{t,t+k}=\frac{\gamma_{t,t+k}}{\sqrt{Var(Y_t)Var(Y_{t+k})}},\ \ t=1,2,3...,\ \ -1 \leq \rho_{t,t+k} \leq 1\]
Por último, a partir de los coeficientes de autocorrelación, vamos a definir dos funciones que nos serán muy útiles a lo largo del presente tema:
Por un lado, la función de autocorrelación simple (fas) o correlograma, la cual es la representación gráfica de los coeficientes de autocorrelación en función de los distintos retardos o desfases entre las variables.
La función de autocorrelación parcial (fap), que mide la correlación existente entre dos variables del proceso en distintos períodos de tiempo, pero una vez eliminados los efectos sobre las mismas de los períodos intermedios. Por ejemplo, puede que exista cierta correlación entre \(Y_t\) e \(Y_{t-2}\), debido a que ambas variables estén correlacionadas con \(Y_{t-1}\).
Dado que en la práctica se dispone de una muestra de un proceso estocástico, \(Y_1, ...Y_T\), se pueden obtener los coeficientes de autocorrelación simple y parcial muestral y utilizarlos como estimadores de los parámetros de la función de autocorrelación simple y parcial teórica.
Así, la función de autocorrelación simple (fas) puede estimarse a partir de las autocovarianzas del proceso tal que:
\[\hat \rho_{k}=\frac{\hat \gamma_k}{\hat \gamma_0}\]
Siendo:
\[\hat \gamma_0=\frac{\sum_{t=1}^{T}(Y_t-\bar Y)^2}{T}\]
\[\hat \gamma_k=\frac{\sum_{t=k+1}^{T}(Y_t-\bar Y)(Y_{t+k}-\bar Y)}{T-k}\]
La estimación de los parámetros de la función de autocorrelación parcial (fap) resulta algo más compleja, por lo que se verá en epígrafes posteriores.
Se dice que un proceso estocástico es estacionario en sentido estricto si todas las variables aleatorias que componen el proceso están idénticamente distribuidas, independientemente del momento del tiempo en que se estudie el proceso.
Es decir, la función de distribución de probabilidad de cualquier conjunto de k variables (siendo k un número finito) del proceso debe mantenerse estable (inalterable) al desplazar las variables s períodos de tiempo tal que, si \(P(Y_{t+1}, Y_{t+2}, …, Y_{t+k} )\) es la función de distribución acumulada de probabilidad, entonces:
\[P(Y_{t+1},Y_{t+2},…,Y_{t+k}) = P(Y_{t+1+s}, Y_{t+2+s},…,Y_{t+k+s}),\ \ \forall t, k, s\]
Sin embargo, la versión estricta de la estacionariedad de un proceso suele ser excesivamente restrictiva para las necesidades prácticas de un economista. Es por ello que generalmente nos conformaremos con un concepto menos exigente, el de estacionariedad en sentido débil o de segundo orden, la cual se da cuando la media del proceso es constante e independiente del tiempo, la varianza es finita y constante, y el valor de la covarianza entre dos periodos depende únicamente de la distancia o desfase entre ellos, sin importar el momento del tiempo en el cual se calculan. Dicho de otro modo, todos los momentos de primer y segundo orden de un proceso estocástico que sea estacionario en sentido débil deben ser invariantes en el tiempo.
La contrastación empírica de algunas de estas condiciones puede realizarse fácilmente mirando el gráfico de la serie temporal. Así, una serie temporal que exhiba una marcada tendencia creciente tendrá una media también creciente en el tiempo, por lo que lo más probable es que el proceso estocástico que ha generado dicha serie temporal no sea estacionario en media; del mismo modo, una serie temporal que muestre fluctuaciones de amplitud desigual en el tiempo seguramente no procederá de un proceso estocástico estacionario en varianza. La diferencia entre ambos tipos de series queda patente en los gráficos siguientes.
Pero, ¿por qué resulta importante para el investigador que el proceso analizado sea estacionario? La razón fundamental es que los modelos de predicción de series temporales que veremos a continuación están diseñados para ser utilizados con procesos de este tipo. Si las características del proceso cambian a lo largo del tiempo, resultará difícil representar la serie para intervalos de tiempo pasados y futuros mediante un modelo lineal sencillo, no pudiéndose por tanto realizar previsiones fiables para la variable en estudio.
Sin embargo, por regla general, las series económicas no son series que procedan de procesos estacionarios, sino que suelen tener una tendencia, ya sea creciente o decreciente, y variabilidad no constante. Dicha limitación en la práctica no es tan importante porque las series no estacionarias se pueden transformar en otras aproximadamente estacionarias después de aplicar diferencias a la serie en una ó más etapas. Por ello, cuando estemos analizando una serie económica que no sea estacionaria en media, deberemos trabajar con la serie en diferencias, especificando y estimando un modelo para la misma. Si además, observamos que la serie presenta no estacionariedad en varianza, deberemos transformarla tomando logaritmos antes de aplicar diferencias en la serie.
Las transformaciones de Box-Cox son una familia de transformaciones potenciales usadas en estadística para corregir sesgos en la distribución de errores, para corregir varianzas desiguales (para diferentes valores de la variable predictora) y principalmente para corregir la no linealidad en la relación (mejorar correlación entre las variables). La transformación de Box-Cox, gira en torno a al parámeto \(\lambda\):
\[\begin{equation}\tilde {y} _t = \left\lbrace\begin{array}{ll} log (y_t) & \lambda = 0 (y_t ^ \lambda - 1)\\ (y_t ^ \lambda - 1)\lambda & \lambda \neq 0 \\ \end{array}\right.\end{equation}\]
En R se realiza la transformación box-cox con la función “boxcox”" de la libreria “EnvStats”. Por defecto selecciona el \(\lambda\) en base al criterio de Probability Plot Correlation Coefficient (PPCC).
library(EnvStats)
##
## Attaching package: 'EnvStats'
## The following object is masked from 'package:MASS':
##
## boxcox
## The following objects are masked from 'package:stats':
##
## predict, predict.lm
## The following object is masked from 'package:base':
##
## print.default
y <- rlnormAlt(30, mean = 10, cv = 2)
boxcox(y, objective.name = "Log-Likelihood")
##
## Results of Box-Cox Transformation
## ---------------------------------
##
## Objective Name: Log-Likelihood
##
## Data: y
##
## Sample Size: 30
##
## lambda Log-Likelihood
## -2.0 -164.01533
## -1.5 -140.80593
## -1.0 -120.59298
## -0.5 -105.27508
## 0.0 -98.44032
## 0.5 -104.14089
## 1.0 -122.02228
## 1.5 -147.57348
## 2.0 -177.03427
Posteriormente, la predicción que realicemos con las series transformadas habrá que traducirla a una predicción para la serie original, en cuyo análisis estaba interesado inicialmente el investigador, deshaciendo las diferencias y aplicando antilogaritmos según convenga.
Por último, antes de continuar avanzando, debemos hacer mención a un tipo de proceso estacionario particular: es el denominado ruido blanco, un proceso estocástico en el que las variables aleatorias que lo forman no están correlacionadas entre sí, siendo su esperanza matemática igual a cero y su varianza constante e igual a \(\sigma^2\).
En particular, supondremos que los errores de los procesos que veremos a continuación son ruidos blancos gaussianos, formados por una sucesión de variables aleatorias con distribución Normal, esperanza cero, varianza constante e incorrelacionadas serialmente entre sí. Es decir, si \(e_t\) es ruido blanco gaussiano, entonces \(e_t \sim N(0,\sigma^2)\) y \(cov(e_t,e_{t+k})=0\).
En la figura siguiente se muestra la representación de un ruido blanco, en la que se puede apreciar claramente la estacionariedad de este proceso:
Antes de seguir avanzando, debemos mencionar dos operadores que utilizaremos frecuentemente a lo largo del capítulo. Por un lado, se define el operador de retardos, que denotaremos por B, como aquel operador que al ser aplicado a la serie la transforma de tal forma que: \(BY_t = Y_{t-1}\)
Es decir, el resultado de aplicar el operador \(B\) corresponde a retardar las observaciones un período.
Aplicada dos veces sobre la variable \(Y_t\) tendremos que: \(B(BY_t) = B^2Y_t = Y_{t-2}\)
y, en general, podemos decir que el operador \(B^k\) aplicado sobre una variable en el periodo t, la retarda k períodos tal que: \(B^kY_t = Y_{t-k}\)
Por su parte, el operador diferencia, el cual denotaremos por \(\Delta\), aplicado a una serie la transformará de tal forma que: \(\Delta Y_t = Y_t – Y_{t-1} = (1 – B) Y_t\)
Si aplicamos el operador diferencia dos veces a la serie tendremos que:
\[\Delta^2 Y_t =\Delta (\Delta Y_t) = \Delta (Y_t – Y_{t-1}) = \Delta Y_t – \Delta Y_{t-1} = Y_t – 2Y_{t-1} +Y{t-2} = (1–B)^2Y_t\]
Y en general, podemos escribir: \(\Delta^kY_t = (1 – B)^kY_t\)
Por lo que resulta evidente que la relación existente entre el operador diferencia y el operador retardo es: \(\Delta^k = (1 – B)^k\)
La representación formal de los procesos aleatorios que generan series reales se puede realizar mediante modelos lineales de series temporales. Considerando que una determinada serie temporal ha sido generada por un proceso estocástico, en este epígrafe pasamos a describir los posibles modelos teóricos que permiten explicar el comportamiento de la misma y, por tanto, el de su proceso generador.
Las estructuras estocásticas estacionarias lineales que se tratarán de asociar a una serie de datos económicos se clasifican en tres tipos: modelos autorregresivos, modelos de medias móviles y modelos mixtos, los cuales pasamos a ver a continuación.
Los procesos autorregresivos son aquellos que representan los valores de una variable durante un instante del tiempo en función de sus valores precedentes. Así, un proceso autorregresivo de orden p, AR(p), tendrá la siguiente forma:
\[Y_t=\delta +\phi_1 Y_{t-1}+\phi_2 Y_{t-2}+...+\phi_p Y_{t-p}+e_t\]
donde \(\delta\), es un término constante y \(e_t\) es un ruido blanco, que representa los errores del ajuste y otorga el carácter aleatorio al proceso.
Haciendo uso del operador de retardos que veíamos anteriormente, el proceso también puede expresarse como:
\[Y_t=\delta + \phi_1 BY_{t}+\phi_2 B^2Y_{t}+...+\phi_p B^pY_{t}+e_t\]
operando:
\[(1-\phi_1B- \phi_2B^2-...-\phi_pB^p)Y_t=\phi_p(L)Y_t=\delta+e_t\]
Veamos a continuación las características particulares de dos procesos autorregresivos elementales, el de orden 1 ó AR(1) y el de orden 2, ó AR(2). Posteriormente, los resultados obtenidos se generalizarán al caso de un proceso autorregresivo de orden p, AR(p).
Un proceso AR(1) se genera a partir de:
\[Y_t=\delta +\phi_1 Y_{t-1}+e_t\]
Si el proceso es estacionario en media y varianza entonces se verificará que \(E(Y_t) = E(Y_{t-1})\) y \(Var (Y_t) = Var(Y_{t-1})\), \(\forall\) \(t\) de tal forma que:
\[E(Y_t) = E(Y_{t-1})=\mu=\delta +\phi_1\mu \rightarrow \mu=\frac{\delta}{1-\phi_1}\]
\[Var(Y_t) = Var(Y_{t-1})=\gamma_0=\phi_1^2\gamma_0 +\sigma_e^2 \rightarrow \gamma_0=\frac{\sigma_e^2}{1-\phi_1^2}\]
La condición a cumplir para que \(\mu\) y \(\gamma_0\) sean positivas y finitas es que \(|\phi_1|<1\). En ese caso, el proceso será estacionario en media y varianza. Del mismo modo, si el proceso es estacionario, también se verificará para las covarianzas que:
\[cov(Y_t,Y_{t-1})=cov(Y_{t-1},Y_t)=E[(Y_t-\mu)(Y_{t-1}-\mu)]=E(y_t y_{t-1})=\gamma_1\]
Dado que:
\[Y_t-\mu=\phi_1(Y_{t-1}-\mu)+e_t=y_t=\phi_1y_{t-1}+e_t\]
Entonces:
\[\gamma_1=E(y_{t-1} y_t)=E[y_{t-1} (\phi_1y_{t-1}+e_t)]=\phi_1 E(Y_{t-1}^2)+E(Y_{t-1}e_t)=\phi_1\gamma_0\]
El resultado anterior puede generalizarse si tomamos esperanzas entre \(y_t\) e \(y_{t-k}\) obteniéndose que, en general: \(\gamma_k=\phi_1^k \gamma_0\)
Resultados que dejan determinados los coeficientes de las funciones de autocorrelación simple (fas) y parcial (fap):
# Simulamos AR(1) con \phi_1=0.9
AR.1<-arima.sim(model=list(ar=c(.9)), n=100)
ts.plot(AR.1)
plot(acf(AR.1, type="correlation", plot=T))
plot(acf(AR.1, type="partial", plot=T))
# Simulamos AR(1) con \phi_1=-0.9
AR.1<-arima.sim(model=list(ar=c(-.9)), n=100)
ts.plot(AR.1)
plot(acf(AR.1, type="correlation", plot=T))
plot(acf(AR.1, type="partial",plot=T))
Un proceso AR(2) se genera a partir de:
\[Y_t=\delta +\phi_1 Y_{t-1} + \phi_2 Y_{t-2}+e_t\]
Si el proceso es estacionario en media y varianza entonces se verificará que \(E(Y_t) = E(Y_{t-1})\) y \(Var (Y_t) = Var(Y_{t-1})\), \(\forall\) \(t\) de tal forma que:
\[E(Y_t) = E(Y_{t-1})=\mu=\delta +\phi_1\mu+\phi_2\mu \rightarrow \mu=\frac{\delta}{1-\phi_1-\phi_2}\]
Debiéndose verificar, para que la media sea finita,que \(\phi_1+\phi_2 \neq 1\).
\[Var(Y_t) = Var(Y_{t-1})=\gamma_0=\phi_1^2\gamma_0 + \phi_2^2\gamma_0+\sigma_e^2 \rightarrow \gamma_0=\frac{\sigma_e^2}{1-\phi_1^2-\phi_2^2}\]
También se verificará para las covarianzas que:
\[cov(Y_t,Y_{t-1})=cov(Y_{t-1},Y_t)=E[(Y_t-\mu)(Y_{t-1}-\mu)]=E(y_t y_{t-1})=\gamma_1\]
\[\gamma_1=E(y_{t-1} y_t)=E[y_{t-1} (\phi_1y_{t-1}+\phi_2y_{t-2}+e_t)]=\phi_1\gamma_0+\phi_2\gamma_1\]
\[\gamma_2=E(y_{t-2} y_t)=E[y_{t-2} (\phi_1y_{t-1}+\phi_2y_{t-2}+e_t)]=\phi_1\gamma_1+\phi_2\gamma_0\]
…
\[\gamma_k=E(y_{t-k} y_t)=E[y_{t-k} (\phi_1y_{t-1}+\phi_2y_{t-2}+e_t)]=\phi_1\gamma_{k-1}+\phi_2\gamma_{k-2}\]
De donde podemos derivar las expresiones para los coeficientes de la fas y la fap.
# Simulamos AR(2) con \phi_1=0.5 y \phi_2=0.2
AR.2<-arima.sim(model=list(ar=c(0.5,.2)),n=100)
ts.plot(AR.2)
plot(acf(AR.2,type="correlation",plot=T))
plot(acf(AR.2,type="partial",plot=T))
# Simulamos AR(2) con \phi_1=0.5 y \phi_2=-0.2
AR.2<-arima.sim(model=list(ar=c(.5,-.2)),n=100)
ts.plot(AR.2)
plot(acf(AR.2,type="correlation",plot=T))
plot(acf(AR.2,type="partial",plot=T))
La condición de estacionariedad utilizando la notación en retardos es que las raíces del polinomio de retardos, al igual que en el caso del proceso AR(1), estén fuera del círculo unidad de tal forma que verifiquen: \((1-\phi_1B-\phi_2B^2)=0\)
A partir de los resultados obtenidos para los procesos AR(1) y AR(2), podemos generalizar las expresiones obtenidas para un proceso de orden p.
Sea el proceso autorregresivo de orden p:
\[Y_t=\delta +\phi_1 Y_{t-1} +\phi_2 Y_{t-2} +...+ \phi_p Y_{t-p}+ e_t\]
Si el proceso es estacionario en media y varianza entonces se verificará que \(E(Y_t) = E(Y_{t-1})\) y \(Var (Y_t) = Var(Y_{t-1})\), \(\forall\) \(t\) de tal forma que:
\[E(Y_t) = E(Y_{t-1}) \rightarrow \mu=\frac{\delta}{1-\phi_1-\phi_2-...-\phi_p}\]
Debiéndose verificar, para que la media sea finita,que \(\phi_1+...+\phi_p \neq 1\).
\[Var(Y_t) = Var(Y_{t-1}) \rightarrow \gamma_0=\frac{\sigma_e^2}{1-\phi_1^2-\phi_2^2...-\phi_p^2}\]
También se verificará para las covarianzas que:
\[\gamma_1=\phi_1\gamma_0+\phi_2\gamma_1+...+\phi_p\gamma_{p-1}\]
\[\gamma_2=\phi_1\gamma_1+\phi_2\gamma_0+...+\phi_p\gamma_{p-2}\]
…
\[\gamma_k=\phi_1\gamma_{k-1}+\phi_2\gamma_{k-2}+...+\phi_p\gamma_{p-k}\]
Dichas ecuaciones también se pueden expresar en términos de los coeficientes de autocorrelación dividiendo por \(\gamma_0\) ambos miembros (ecuaciones de Yule-Walker), tal que:
\[\rho_1=\phi_1\rho_0+\phi_2\rho_1+...+\phi_p\rho_{p-1}\]
\[\rho_2=\phi_1\rho_1+\phi_2\rho_0+...+\phi_p\rho_{p-2}\]
…
\[\rho_k=\phi_1\rho_{k-1}+\phi_2\rho_{k-2}+...+\phi_p\rho_{p-k}\]
Si se resuelve sucesivamente el sistema de ecuaciones de Yule-Walker bajo la hipótesis de que la serie es un AR(1), AR(2), AR), etc., y se toma el último coeficiente de cada uno de los procesos, se obtiene lo que se conoce como función de autocorrelación parcial (fap); dicha función mide el coeficiente de correlación entre observaciones separadas k períodos, eliminando el efecto de los valores intermedios.
Dado que p es el orden del proceso autorregresivo, resulta evidente que los coeficientes de autocorrelación parcial serán distintos de cero para retardos iguales o inferiores a p.
Finalmente, y de forma análoga a los resultados obtenidos en los procesos AR(1) y AR(2), para que un proceso autorregresivo de orden p sea estacionario, las raíces del polinomio de retardos del proceso,\((1-\phi_1B-\phi_2B^2-...-\phi_pB^p)=0\), deberán ser menores a la unidad en valor absoluto.
En los procesos de media móvil de orden q, cada observación \(Y_t\) es generada por una media ponderada de perturbaciones aleatorias con un retardo de q períodos, tal que:
\[Y_t=\delta +e_t - \theta_1 e_{t-1} -\theta_2 e_{t-2} -...- \theta_q e_{t-q}\]
donde \(e_t\) es un ruido blanco.
Pasamos a ver a continuación las características particulares de dos procesos de medias móviles básicos, el de orden 1 ó MA(1), y el de orden 2 ó MA(2). Posteriormente, los resultados obtenidos se generalizarán, como ya hicimos en el caso de los procesos autorregresivos, al caso de un proceso de medias móviles de orden q, MA(q).
Veamos el caso particular de un proceso de media móvil de orden 1 ó MA(1). Formalmente su expresión sería:
\[Y_t=\delta +e_t - \theta_1 e_{t-1}\]
siendo su media \(E(Y_t) =\delta\) y su varianza \(Var (Yt) = Var(e_t) + \theta_1^2 Var(e_{t-1})=\sigma^2_e(1+\theta_1^2)=\gamma_0\)
En el caso de las covarianzas tenemos que:
\[\gamma_1=E[(Y_t-\delta)(Y_{t-1}-\delta)]=E[(e_t-\theta_1 e_{t-1})((e_{t-1}-\theta_1 e_{t-2})]=-\theta_1\sigma^2_e\]
\[\gamma_2=E[(Y_t-\delta)(Y_{t-2}-\delta)]=E[(e_t-\theta_1 e_{t-1})((e_{t-2}-\theta_1 e_{t-3})]=0\]
…
\[\gamma_k=0\]
El resultado obtenido pone de manifiesto que los procesos de media móvil poseen memoria de sólo un período, ya que cualquier valor de \(Y_t\) está correlacionado con \(Y_{t-1}\) e \(Y_{t+1}\) pero con ningún otro valor de la serie.
A partir de las expresiones anteriores, y de modo análogo a como procedíamos en el caso de los modelos AR, podemos obtener los coeficientes de la fas y la fap.
# Simulamos MA(1) con \theta_1=-0.7
MA.1<-arima.sim(model=list(ma=c(-.7)),n=100)
ts.plot(MA.1)
plot(acf(MA.1,type="correlation",plot=T))
plot(acf(MA.1,type="partial",plot=T))
# Simulamos MA(1) con \theta_1=+0.7
MA.1<-arima.sim(model=list(ma=c(.7)),n=100)
ts.plot(MA.1)
plot(acf(MA.1,type="correlation",plot=T))
plot(acf(MA.1,type="partial",plot=T))
De todos estos resultados se desprende que un proceso MA(1) siempre es estacionario con independencia del valor de \(\theta_1\).
La representación gráfica de la función de autocorrelación simple viene determinada por el signo de \(\theta_1\).
Analizamos ahora el caso particular de un proceso de media móvil de orden 2 ó MA(2). Formalmente su expresión sería:
\[Y_t=\delta +e_t - \theta_1 e_{t-1} - \theta_2 e_{t-2}\]
siendo su media \(E(Y_t) =\delta\) y su varianza \(Var (Y_t) = Var(e_t) + \theta_1^2 Var(e_{t-1}) + \theta_2^2 Var(e_{t-2})=\sigma^2_e(1+\theta_1^2+\theta_2^2)=\gamma_0\).
Las covarianzas del proceso son:
\[\gamma_1=E[(Y_t-\delta)(Y_{t-1}-\delta)]=E[(e_t-\theta_1 e_{t-1}-\theta_2 e_{t-2})((e_{t-1}-\theta_1 e_{t-2})-\theta_2 e_{t-3})]=(-\theta_1+\theta_1 \theta_2) \sigma^2_e\]
\[\gamma_2=E[(Y_t-\delta)(Y_{t-2}-\delta)]=E[(e_t-\theta_1 e_{t-1}-\theta_2 e_{t-2})((e_{t-2}-\theta_1 e_{t-3}-\theta_2 e_{t-4})]=-\theta_2 \sigma^2_e\]
…
\[\gamma_k=0\]
Y a partir de las expresiones anteriores, y de modo análogo a como procedíamos en el caso de los modelos AR, podemos obtener los coeficientes de la fas y la fap.
# Simulamos MA(2) con \theta_1=-0.7 y \theta_2=0.1
MA.2<-arima.sim(model=list(ma=c(-.7,.1)),n=100)
ts.plot(MA.2)
plot(acf(MA.2,type="correlation",plot=T))
plot(acf(MA.2,type="partial",plot=T))
# Simulamos MA(2) con \theta_1=+0.7 y \theta_2=0.1
MA.2<-arima.sim(model=list(ma=c(.7,.1)),n=100)
ts.plot(MA.2)
plot(acf(MA.2,type="correlation",plot=T))
plot(acf(MA.2,type="partial",plot=T))
De los resultados obtenidos para el modelo MA(2) también se desprende que siempre es estacionario con independencia del valor de sus parámetros, siendo su memoria en este caso de dos períodos.
Una vez analizados los resultados obtenidos para los procesos de media móvil de orden 1 y 2, ya podemos obtener una generalización de las expresiones anteriores para un proceso de media móvil de orden q cualquiera.
Sea el proceso MA(q):
\[Y_t=\delta +e_t - \theta_1 e_{t-1} - \theta_2 e_{t-2} -...- \theta_q e_{t-q}\]
Con media \(E(Y_t) =\delta\) y varianza \(Var (Yt) = Var(e_t) + \theta_1^2 Var(e_{t-1}) + \theta_2^2 Var(e_{t-2}) + ...+\theta_q^2 Var(e_{t-q})=\sigma^2_e(1+\theta_1^2+\theta_2^2+...+\theta_q^2)=\gamma_0\).
Las covarianzas del proceso son:
\[\gamma_1=E[(Y_t-\delta)(Y_{t-1}-\delta)]=(-\theta_1+\theta_1 \theta_2+\theta_2 \theta_3+...+\theta_{q-1} \theta_q) \sigma^2_e\]
\[\gamma_2=E[(Y_t-\delta)(Y_{t-2}-\delta)]=(-\theta_2+\theta_1 \theta_3+\theta_2 \theta_4+...+\theta_{q-2} \theta_q) \sigma^2_e\]
…
\[\gamma_q=E[(Y_t-\delta)(Y_{t-q}-\delta)]=-\theta_q \sigma^2_e\]
…
\[\gamma_k=0\]
Los coeficientes de la función de autocorrelación simple pueden ser obtenidos a partir de las expresiones anteriores de autocovarianzas, no siguiendo los mismos una expresión regular. En cualquier caso, cualquier proceso MA de orden finito es estacionario.
Cualquier proceso MA(q) puede expresarse como un AR de orden infinito. Así, por ejemplo, si consideramos un modelo MA(1) cuya expresión es, como sabemos:
\[Y_t=\delta +e_t- \theta_1 e_{t-1}\]
Y dado que:
\[Y_{t-1}=\delta +e_{t-1} - \theta_1 e_{t-2}\]
\[Y_{t-2}=\delta +e_{t-2} - \theta_1 e_{t-3}\]
Despejando el valor de \(e_t\) y operando:
\[e_t=Y_t - \delta +\theta_1 e_{t-1}=Y_t - \delta +\theta_1(Y_{t-1} - \delta +\theta_1 e_{t-2})=\] \[=Y_t - \delta + \theta_1 Y_{t-1} - \delta \theta_1 + \theta_1^2 e_{t-2}=Y_t - \delta + \theta_1 Y_{t-1} - \delta \theta_1 + \theta_1^2 (Y_{t-2} - \delta +\theta_1 e_{t-3})=\] \[=Y_t - \delta + \theta_1 Y_{t-1} - \delta \theta_1 + \theta_1^2 Y_{t-2}- \delta \theta_1^2+\theta_1^3 e_{t-3}\] \[\rightarrow Y_t = \delta (1+ \theta_1 + \theta_1^2) - \theta_1 Y_{t-1} - \theta_1^2 Y_{t-1}- \theta_1^3 e_{t-3} + e_t\]
Si continuamos sustituyendo \(e_{t-3}\) y siguientes, el procedimiento continuará hasta el infinito, lo que permite expresar a \(Y_t\) como función de todos sus valores pasados más una constante y un término de error.
El resultado anterior tendrá sentido sólo si \(\mid \theta_1 \mid < 1\) (o su equivalente en términos de raíces de polinomio de retardos, \(1-\theta_1B=0 \rightarrow \mid B \mid > 1\) ya que, de otro modo, el efecto del pasado sería más importante para explicar el comportamiento actual.
Del mismo modo, puede comprobarse que en el caso de un modelo MA(2), la condición que debe verificarse es \(\mid \theta_1 + \theta_2 \mid < 1\), en términos de raíces del polinomio de retardos, \(1-\theta_1 B - \theta_2 B^2=0 \rightarrow \mid B \mid > 1\), y en general, para cualquier modelo MA(q), la condición es \(1-\theta_1 B - \theta_2 B^2 - \theta_q B^q=0 \rightarrow \mid B \mid > 1\).
Si se verifica esta condición, denominada condición de invertibilidad, entonces es posible expresar un proceso MA(q) como un proceso AR de orden infinito, lo que implica que un proceso de media móvil consta de infinitos coeficientes de autocorrelación parcial distintos de cero, si bien a partir de q comenzarán a decaer rápidamente. Así, la función de autocorrelación parcial de un proceso de media móvil se comportará de manera análoga a como lo hace la función de autocorrelación simple de un proceso autorregresivo.
Los procesos ARMA (p, q) son, como su nombre indica, un modelo mixto que posee una parte autorregresiva y otra de media móvil, donde p es el orden de la parte autorregresiva y q el de la media móvil. La expresión genérica de este tipo de procesos es:
\[Y_t=\delta + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} +....+\phi_p Y_{t-p} +e_t - \theta_1 e_{t-1} - \theta_2 e_{t-2} -...- \theta_q e_{t-q}\]
En este tipo de modelos se deben verificar las dos condiciones que hemos visto hasta el momento: por un lado, la condición de estacionariedad, debiéndose cumplir que las raíces del polinomio de retardos de la parte autorregresiva estén fuera del círculo unidad, \(\phi(B)=0\); y por otro, la condición de invertibilidad, debiéndose verificar que las raíces del polinomio de retardos de la parte MA, \(\theta(B)=0\), estén fuera del círculo unidad.
Veamos las características particulares de un modelo ARMA (1,1). La ecuación que define este tipo de proceso es:
\[Y_t=\delta + \phi_1 Y_{t-1} + e_t - \theta_1 e_{t-1}\]
El cual presenta las siguientes características:
Media: \(\mu=\frac{\delta}{1-\phi_1} < \infty\), \(\forall \mid \phi_1 \mid \neq 1\)
Varianza: \(\gamma_0=\frac{\sigma_e^2(1 + \theta_1^2 - 2 \phi_1\sigma_e^2) )}{(1-\phi_1)^2}\), con \(\mid \theta_1 \mid < 1\)
A su vez, las autocovarianzas del proceso serán:
\[\gamma_1=\phi_1 \gamma_0 + \theta_1 \sigma_e^2\]
\[\gamma_2=\phi_1 \gamma_1\]
….
\[\gamma_k=\phi_1 \gamma_{k-1}\]
Simulamos un proceso ARMA (1,1) y obtenemos las fas y fap del proceso:
# Simulamos MA(1) con \phi_1=0.7 y \theta_1=-0.1
ARMA.1<-arima.sim(model=list(ma=c(.7),ar=c(.1)),n=100)
ts.plot(ARMA.1)
plot(acf(ARMA.1,type="correlation",plot=T))
plot(acf(ARMA.1,type="partial",plot=T))
No resulta nada sencillo en la práctica identificar un proceso ARMA (1, 1) a través de sus fas y fap, ya que es fácil confundir dichas funciones con las de otros procesos univariantes. A este respecto, se aconseja especifiquar y estimar inicialmente un modelo más sencillo, como por ejemplo un AR(2); posteriormente el análisis de los residuos obtenidos en dicha estimación pondrá de manifiesto la presencia de otras estructuras. Si, por ejemplo, el investigador detecta en las funciones de autocorrelación simple y parcial de los residuos obtenidos una estructura de MA(1) será necesario incorporar dicha estructura especificando un modelo ARMA (2,1), el cual sin duda tendrá una mayor capacidad explicativa.
Si la serie \(Y_t\) no fuera estacionaria y tomando \(d\) diferencias logramos que lo sea tal que \(\omega_t=\Delta^d Y_t\) sí es estacionaria, entonces diremos que \(Y_t\) sigue un proceso autorregresivo integrado de media móvil de orden (p, d, q) y se denominará ARIMA (p,d,q) o, lo que es lo mismo, que \(\omega_t\) sigue un proceso estacionario de tipo ARMA (p, q) tal que:
\[\omega_t=\delta + \phi_1 \omega_{t-1} + \phi_2 \omega_{t-2} +....+\phi_p \omega_{t-p} +e_t - \theta_1 e_{t-1} - \theta_2 e_{t-2} -...- \theta_q e_{t-q}\]
O también, expresando el proceso en notación de polinomios de retardos:
\[(1-\phi_1 B -\phi_2 B^2 -...-\phi_p B^p) \omega_t=\delta +e_t (1 - \theta_1 B - \theta_2 B^2 -...- \theta_q B^q)\]
\[\phi(B)\omega_t=\delta + \theta(B)e_t\]
El modelo ARIMA(p, d, q) puede ser considerado como el modelo estocástico lineal general, del cual derivan el resto de procesos que hemos visto. Así, si \(p=d=0\), estaremos ante un modelo ARIMA(0, 0, q) equivalente a un modelo MA(q); si \(q=0\) tendríamos un modelo ARIMA (p, d, 0) ó ARI(p,d) (es decir, un modelo autorregresivo en el que se han tomado d diferencias para hacer estacionaria a la serie analizada).
Cuando trabajamos con series temporales cuya frecuencia de medida es inferior al año (mensuales, trimestrales, cuatrimestrales), es frecuente encontrarse con patrones estacionales, es decir, ciclos u oscilaciones estrictamente periódicos, siendo dicho período igual o inferior al año. Por ejemplo, si una serie trimestral presenta estacionalidad diremos que su periodo estacional será igual a cuatro cuando en dicha serie se aprecian similitudes en su comportamiento cada cuatro trimestres.
La presencia de este componente se explica por la existencia de las estaciones y su impacto sobre la actividad económica (por ejemplo, en la producción agropecuaria o en el turismo), las costumbres (fin de año, Semana Santa) o los procesos físicos (temperatura, pluviosidad, etc.).
Otra manera para detectar un comportamiento estacional consiste en analizar las funciones de autocorrelación simple y parcial de la serie de la que se sospecha que presenta un comportamiento de tipo estacional. Si al representar dichas funciones se aprecian valores muy altos, significativamente distintos de cero, para los retardos estacionales podremos concluir que la serie presenta un componente estacional el cual debe presentar un carácter estacionario, es decir, debemos exigir que el componente estacional se mantenga constante a lo largo del tiempo.
Nuevamente, el análisis de las funciones de autocorrelación simple y parcial en los retardos estacionales nos dirá si el componente estacional de la serie es estacionario o no. Así, si observamos que la función de autocorrelación simple presenta un lento decaimiento en los valores correspondientes a los retardos estacionales y el valor del primer retardo estacional es próximo a uno tanto en la función de autocorrelación simple como parcial, es muy probable que el comportamiento estacional de la serie no presente un carácter estacionario, por lo que será necesario tomar diferencias de tipo estacional.
En caso de que la serie \(Y_t\) presente un comportamiento estacional no estacionario, habrá que tomar diferencias entre aquellas observaciones separadas por el periodo que presenta el comportamiento estacional, aplicando para ello el operador diferencia estacional, \(\Delta_s\), que se define como:
\[\Delta_s Y_t=Y_t-Y_{t-s}=(1-B^s)Y_t\]
donde \(s\) es el periodo estacional de la serie.
La detección del comportamiento estacional de la serie y su carácter estacionario es importante ya que, tal y como Box y Jenkins plantearon, es posible incorporar a un modelo ARIMA (p,d,q) las correlaciones existentes entre pares de observaciones separadas por periodos estacionales suponiendo que el término de error de un modelo ARIMA para la parte estacional está correlacionado serialmente.
Así, podemos especificar el siguiente modelo para la parte estacional detectada en la serie:
\[(1-\Phi_1 B^s -\Phi_2 B^{2s} -...-\Phi_P B^{Ps}) (1-B^s)^D Y_t=(1 - \Theta_1 B^s - \Theta_2 B^{2s} -...- \Theta_Q B^{Qs})u_t\]
Que se denomina \(ARIMA(P,D,Q)_s\) para la parte estacional de la serie.
A su vez, podemos suponer que el término de error de este modelo, \(u_t\), viene generado por un proceso \(ARIMA(p,d,q)\) en lugar de ser ruido blanco, tal que:
\[(1-\phi_1 B -\phi_2 B^{2} -...-\phi_p B^{p}) (1-B)^d u_t=(1 - \theta_1 B - \theta_2 B^{2} -...- \Theta_q B^{q})e_t\]
Sustituyendo, obtendremos la expresión del proceso estacional multiplicativo general, el cual denotaremos por \(ARIMA(p,d,q)XARIMA(P,D,Q)_s\), y que podemos escribir como:
\[(1-\Phi_1 B^s -\Phi_2 B^{2s} -...-\Phi_P B^{Ps})(1-\phi_1 B -\phi_2 B^{2} -...-\phi_p B^{p}) (1-B)^d (1-B^s)^D Y_t=\]
\[=(1 - \Theta_1 B^s - \Theta_2 B^{2s} -...- \Theta_Q B^{Qs})(1 - \theta_1 B - \theta_2 B^{2} -...- \Theta_q B^{q})e_t\]
O, de forma más abreviada, expresando el modelo en notación de retardos y generalizándolo incluyendo un término constante:
\[\Phi(B^s)\phi(B)[(1-B)^d (1-B^s)^D Y_t-\delta]=\Theta( B^s)\theta(B)e_t\]
donde:
-\(\phi(B)\) es el polinomio de retardos autorregresivo de la parte regular de la serie.
-\(d\) es el número de diferencias aplicadas a la parte regular de la serie para hacerla estacionaria.
\(\Phi(B^s)\) es el polinomio de retardos autorregresivo de la parte estacional de la serie.
\(\Theta(B^s)\) es el polinomio de retardos de medias móviles de la parte estacional de la serie.
-\(D\) es el número de diferencias aplicadas a la parte estacional de la serie para hacerla estacionaria.
Así, por ejemplo, si deseamos especificar un modelo para una serie con estacionalidad mensual podemos especificar un \(ARIMA(1,1,1)XARIMA(1,1,1)_{12}\), el cual puede escribirse como:
\[(1-\Phi_1 B^{12})(1-\phi_1 B) (1-B) (1-B^{12}) Y_t=(1 - \Theta_1 B^{12})(1 - \theta_1 B)e_t\]
La estructura de las funciones de autocorrelación simple y parcial de este tipo de modelos suele ser generalmente muy compleja, por lo que no vamos a entrar en detalle en sus expresiones.
Aunque las fases que vamos a explicar a continuación son válidas para cualquier tipo de proceso univariante, vamos a centrarnos fundamentalmente en los procesos de tipo ARIMA. Básicamente, se trata de buscar un proceso ARIMA que de forma verosímil haya podido generar la serie temporal, es decir, que se adapte mejor a las características de la misma. Para ello seguiremos las siguientes fases:
Fase de identificación.
Fase de estimación
Fase de validación
Fase de predicción
Dado que los procesos ARIMA están diseñados para modelizar datos de carácter estacionario, lo primero que debemos hacer es efectuar un análisis de la estacionariedad de los datos. Con tal fin se utilizan los siguientes instrumentos:
• Representación gráfica de los datos. Si el gráfico de la serie temporal presenta fluctuaciones cuya amplitud cambia para distintos intervalos del período muestral, seguramente el proceso que genera la serie es no estacionario. Lo mismo sucede cuando la tendencia es creciente o decreciente con el tiempo.
• A través del gráfico desviación típica-media. Si en el gráfico realizado observamos que, conforme crece la media, la desviación típica aumenta, la varianza del proceso será creciente, por lo que diremos que la serie es no estacionaria en varianza.
• Análisis del correlograma. El hecho de que la función de autocorrelación simple o correlograma de la serie decrezca muy lentamente al aumentar el retardo, ha demostrado ser una señal de tendencia no estacionaria. Puesto que en la práctica se dispone de una realización de un proceso estocástico, podemos obtener los coeficientes de autocorrelación muestral y, a partir de ellos, el correlograma muestral. Una vez representado el correlograma muestral, podrá analizarse si la serie es o no estacionaria. Asimismo, en este punto también es conveniente examinar la apariencia de la función de autocorrelación parcial de la serie, para ver si existen similitudes con alguno de los patrones estudiados.
Si la serie temporal que estamos analizando no es estacionaria se deberán aplicar las transformaciones adecuadas con objeto de convertirla en estacionaria. Si la serie no es estacionaria en varianza, deberemos tomar logaritmos sobre la serie; si además la serie presenta no estacionariedad en media, se aplicará el proceso de diferenciación que ya hemos comentado al comienzo del capítulo.
En este punto cabe señalar que es preferible trabajar con series económicas en niveles en lugar de tasas de variación ya que, en caso de detectarse no estacionariedad en la varianza, no podremos aplicar logaritmos si existe alguna tasa negativa. Asimismo, debemos tener en cuenta que, normalmente, las series originales transformadas aplicando logaritmos y tomando posteriormente una diferencia constituyen una aproximación a una tasa de variación, tal que \(\Delta ln(Y_t)=\frac {(Yt – Y{t-1})}{Y{t-1}}\)
Una vez transformada la serie en estacionaria, se determinará el orden de la parte autorregresiva (p) y el de la parte de media móvil (q) del proceso ARMA que se considere que haya podido generar la serie estacionaria. Para tal fin utilizaremos la representación gráfica de las funciones de autocorrelación simple y parcial de la serie transformada, con objeto de obtener pistas acerca del proceso univariante del que puede proceder la serie transformada. Las siguientes reglas pueden resultar útiles a la de inspeccionar los gráficos de la fas y la fap de la serie:
• En los modelos AR(p), la función de autocorrelación parcial presenta los p primeros coeficientes distintos de cero y el resto nulos. Asimismo, generalmente la función de autocorrelación simple presenta un decrecimiento rápido de tipo exponencial, sinusoidal o ambos.
• En los modelos MA(q), se da el patrón opuesto: la función de autocorrelación simple se anula para retardos superiores a q y la función de autocorrelación parcial decrece exponencial o sinusoidalmente.
• Sin embargo, como ya hemos visto, la especificación de los modelos ARMA no se ajusta a unas normas tan bien definidas. Por ejemplo, en un modelo AR(1), la función de autocorrelación parcial es cero para k>1, pero esto no ocurre en un ARMA(1,1), pues a la componente AR(1) hay que superponer la MA(1) cuya función de autocorrelación parcial converge exponencialmente a cero.
Lo habitual en estos casos es que el investigador especifique inicialmente un modelo más simple y, posteriormente, mediante el análisis de los residuos de la estimación de dicho modelo se detecte un proceso que no ha sido especificado inicialmente y que debe ser incorporado al modelo.
• En cualquier caso, para que una serie sea fácilmente identificable hay que considerar un tamaño muestral elevado, superior a 50 observaciones.
En general, la etapa de identificación suele plantear ciertas dificultades y su objetivo es determinar la especificación tentativa de unos pocos modelos con estructuras sencillas. Las posteriores etapas de estimación y validación de los resultados confirmarán los indicios o, por el contrario, servirán de base para reformular el modelo propuesto.
Una vez identificado el modelo apropiado, se procede a la estimación definitiva de sus parámetros. En este punto, no debemos olvidar que si hemos tomado d diferencias en la serie se perderán d observaciones, quedando \(T–d\) datos disponibles para la estimación.
Asimismo, debemos tener presente que el proceso estimado debe verificar las siguientes hipótesis:
El término \(e_t\) posee estructura de ruido blanco y sigue una distribución Normal con media cero y varianza constante.
La parte AR del proceso es estacionaria.
La parte MA del proceso es invertible.
Veamos a continuación brevemente cómo se realiza la estimación de los distintos modelos univariantes que hemos visto en los epígrafes anteriores:
• Estimación de procesos AR. Un proceso autorregresivo no cumple la hipótesis del modelo clásico de regresión basada en regresores fijos que veíamos en el capítulo 2, ya que los retardos de \(Y_t\) son variables aleatorias al serlo la propia \(Y_t\). Sin embargo, en presencia de errores que no presentan autocorrelación, los estimadores mínimo-cuadráticos son consistentes por lo que en la práctica la estimación de un proceso autorregresivo se realiza por MCO, siendo los retardos de la variable endógena las variables explicativas del modelo. Sólo si el término de error presentase algún tipo de correlación y no fuera ruido blanco, los estimadores obtenidos dejarían de ser consistentes.
• Estimación de procesos MA y ARMA. La estimación de modelos de medias móviles y ARMA resulta algo más compleja y se lleva a cabo maximizando el logaritmo de la función de verosimilitud.
En esta etapa se comprobará la capacidad de ajuste del modelo propuesto y estimado a los datos. En caso de que el modelo no supere satisfactoriamente este paso, será necesario reformularlo. En este sentido, cabe señalar que los resultados de la comprobación de la validez del modelo, suelen dar pistas para la especificación de un modelo alternativo.
Para la aceptación del modelo, éste debe cumplir los siguientes requisitos:
• Análisis de los residuos. Como sabemos, una de las hipótesis de los modelos univariantes es que el término de error del modelo es ruido blanco. Por ello, los residuos obtenidos tras la estimación del modelo deben seguir un proceso puramente aleatorio con distribución Normal, ya que de lo contrario, contendrían información relevante para la predicción que se estaría despreciando.
• Análisis de los coeficientes estimados.
Significatividad de los coeficientes: Lo primero es verificar si los coeficientes son significativos mediante el estadístico t. Dicho estadístico está construido bajo la hipótesis nula de que el coeficiente es cero y sigue una distribución t-Student con T–m grados de libertad, siendo m el número de parámetros incluidos. Si concluimos que alguno no es significativo (estadístico t mayor, en valor absoluto, que su valor en tablas) se puede eliminar del modelo.
Condiciones de estacionariedad e invertibilidad: El modelo debe verificar las condiciones ya vistas a lo largo del capítulo; de lo contrario, si alguna de las raíces del polinomio de retardos del componente autorregresivo o del componente media móvil fuese inferior a la unidad (o, alternativamente, alguno de los parámetros estimados fuera mayor de uno), se rechazaría automáticamente el modelo.
En el límite, si alguna de las raíces del polinomio de retardos (o alguno de los parámetros) del componente autorregresivo estuviera muy próxima a uno, es posible que la serie original esté subdiferenciada por lo que puede que sea necesaria tomar alguna diferencia adicional.
Del mismo modo, si las raíces del polinomio de retardos (o alguno de sus parámetros) del componente media móvil del modelo estuviera cercana a uno, posiblemente el modelo esté sobrediferenciado.
• Análisis de la bondad de ajuste. Generalmente en este aspecto se suele utilizar el coeficiente de determinación, \(R^2\), si bien los coeficientes de determinación de diferentes modelos univariantes sólo son comparables en aquellos modelos en los que se hayan tomado idéntico número de diferencias, debido a que para que éste sea un elemento de comparación directa, la varianza de la variable debe ser la misma. Para paliar este inconveniente, se han propuesto medidas alternativas como el estadístico AIC (Akaike Information Criterion) o el SIC (Schwarz Information Criterion).Siguiendo estos criterios, se seleccionará aquel modelo para el que se obtenga un AIC o SIC más bajo.
• Análisis de la estabilidad. Finalmente, de cara a la predicción, conviene saber si el modelo estimado para el período muestral sigue siendo válido para períodos futuros. Para ello, podemos aplicar el test de estabilidad estructural de Chow.
Una vez que el modelo ha superado la fase de diagnosis, se convierte en un instrumento útil para la predicción. La realización de predicciones y el error cometido al realizar dicha predicción dependerá del tipo de modelo univariante que estemos considerando.
El siguiente ejemplo utiliza los totales mensuales de pasajeros de líneas aéreas internacionales para el periodo comprendido entre Enero de 1949 y Diciembre de 1962 incluidos en libro de Box y Jenkins. Esta base de datos está disponible en R:
data(AirPassengers)
x<-AirPassengers
En la figura siguiente se muestra la representación gráfica de la serie en la que puede apreciarse claramente una fuerte estacionalidad en los datos y una varianza creciente en el tiempo.
El hecho de que la varianza de la serie no sea constante en el tiempo sugiere que lo primero que debemos hacer es transformar la serie tomando logaritmos para hacer que sea estacionaria en varianza.
x =log(x)
Tras tomar logaritmos, la serie presenta ahora el siguiente aspecto:
El análisis de la serie en logaritmos y de sus funciones de autocorrelación simple y parcial confirman que la serie no es estacionaria en media por lo que debemos tomar una diferencia.
par(mfcol = c(1, 2))
acf(x)
pacf(x)
Tras tomar una diferencia, el aspecto de la serie es el siguiente:
par(mfcol = c(1, 1))
x1 <- diff(x)
plot(x1, main="Pasajeros en Líneas Aéreas. Diferencias Log.")
Las funciones de autocorrelación simple y parcial de la serie logarítmica en diferencias se muestran en la figura siguiente, en las que puede apreciarse el marcado componente estacional en los meses de Diciembre, lo que nos obliga a tomar una diferencia estacional de 12 meses para hacer estacionaria la parte estacional de la serie.
par(mfcol = c(1, 2))
acf(x1)
pacf(x1)
El gráfico siguiente muestra la serie logarítmica con una diferencia regular y una diferencia estacional de periodo 12; en ella podemos apreciar la pérdida de las 13 primeras observaciones al haber aplicado las diferencias indicadas. Tras haber aplicado las transformaciones que hemos comentado, la serie presenta ahora un claro comportamiento estacionario, el cual viene confirmado por las funciones de autocorrelación simple y parcial de la serie:
par(mfcol = c(1, 1))
x1_12 <- diff(x1, 12)
plot(x1_12, main="Pasajeros en Líneas Aéreas. Diferencias Log. Estacionales")
par(mfcol = c(1, 2))
acf(x1_12)
pacf(x1_12)
De las funciones de autocorrelación simple y parcial podemos extraer algunas conclusiones: por un lado, en la parte regular podemos comprobar que las funciones de correlación simple y parcial son muy parecidas, siendo el primer retardo significativo para ambos casos. Esto indica que quizás el modelo sea un ARIMA(1,1,0), un ARIMA(0,1,1) o un ARIMA(1,1,1), en cualquier caso un modelo de primer orden.
Por otro lado, en la parte estacional vemos que el retardo 12 es significativo y que en sus cercanías hay muy poca correlación, lo que sugiere un proceso con muy poca memoria, posiblemente un \(ARIMA(0,1,1)_{12}\) en la parte estacional.
Las conclusiones anteriores nos llevan a estimar tres modelos: un \(ARIMA(1,1,0)×(0,1,1)_{12}\), un \(ARIMA(0,1,1)×(0,1,1)_{12}\) y un \(ARIMA(1,1,1)×(0,1,1)_{12}\). Presentamos a continuación, de forma resumida, los resultados obtenidos para los tres modelos.
Para estimar un modelo ARIMA en R hay que utilizar la función “arima”, cuya sintaxis es la siguiente:
arima(x, order = c(0L, 0L, 0L), seasonal = list(order = c(0L, 0L, 0L), period = NA), xreg = NULL, include.mean = TRUE, transform.pars = TRUE, fixed = NULL, init = NULL, method = c(“CSS-ML”, “ML”, “CSS”), n.cond, SSinit = c(“Gardner1980”, “Rossignol2011”), optim.method = “BFGS”, optim.control = list(), kappa = 1e6)
destacar, la opción order, en donde se especifican los elementos (p,d,q) de la parte no estacional del modelo arima, y seasonal, en donde se especifican los elementos de la parte estacional.
Si queremoes comprobar si se cumplen las condiciones de estacionariedad e invertibilidad, hay que activar la libreria “forecast” y hacer un plot del objeto creado. Las condiciones se cumplen cuando las raices están dentro del circulo unitario que la figura representa.
\(ARIMA(1,1,0)×(0,1,1)_{12}\)
library (forecast)
mod1 <- arima(x,c(1,1,0),c(0,1,1))
mod1
##
## Call:
## arima(x = x, order = c(1, 1, 0), seasonal = c(0, 1, 1))
##
## Coefficients:
## ar1 sma1
## -0.3395 -0.5619
## s.e. 0.0822 0.0748
##
## sigma^2 estimated as 0.001367: log likelihood = 243.74, aic = -481.49
plot(mod1)
\(ARIMA(0,1,1)×(0,1,1)_{12}\)
mod2 <- arima(x,c(0,1,1),c(0,1,1))
mod2
##
## Call:
## arima(x = x, order = c(0, 1, 1), seasonal = c(0, 1, 1))
##
## Coefficients:
## ma1 sma1
## -0.4018 -0.5569
## s.e. 0.0896 0.0731
##
## sigma^2 estimated as 0.001348: log likelihood = 244.7, aic = -483.4
plot (mod2)
\(ARIMA(1,1,1)×(0,1,1)_{12}\)
mod3 <- arima(x,c(1,1,1),c(0,1,1))
mod3
##
## Call:
## arima(x = x, order = c(1, 1, 1), seasonal = c(0, 1, 1))
##
## Coefficients:
## ar1 ma1 sma1
## 0.1960 -0.5784 -0.5643
## s.e. 0.2475 0.2132 0.0747
##
## sigma^2 estimated as 0.001341: log likelihood = 244.95, aic = -481.9
plot(mod3)
Como puede observarse, la estimación de este último modelo contiene un parámetro no significativo, AR(1), por lo que podemos excluirlo de nuestro análisis.
\(ARIMA(1,1,0)×(0,1,1)_{12}\)
par(mfcol = c(1, 2))
plot(x)
lines(x-mod1$residuals,col="red")
plot(mod1$residuals)
\(ARIMA(0,1,1)×(0,1,1)_{12}\)
par(mfcol = c(1, 2))
plot(x)
lines(x-mod2$residuals,col="red")
plot(mod1$residuals)
\(ARIMA(1,1,1)×(0,1,1)_{12}\)
par(mfcol = c(1, 2))
plot(x)
lines(x-mod3$residuals,col="red")
plot(mod1$residuals)
\(ARIMA(1,1,0)×(0,1,1)_{12}\)
par(mfcol = c(1, 2))
acf(mod1$residuals)
pacf(mod1$residuals)
\(ARIMA(0,1,1)×(0,1,1)_{12}\)
par(mfcol = c(1, 2))
acf(mod2$residuals)
pacf(mod2$residuals)
\(ARIMA(1,1,1)×(0,1,1)_{12}\)
par(mfcol = c(1, 2))
acf(mod3$residuals)
pacf(mod3$residuals)
\(ARIMA(1,1,0)×(0,1,1)_{12}\)
summary(mod1$residuals)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.1114640 -0.0232686 -0.0004461 0.0004500 0.0238061 0.1032393
par(mfcol = c(1, 1))
hist(mod1$residuals)
library(tseries)
jarque.bera.test(mod1$residuals)
##
## Results of Hypothesis Test
## --------------------------
##
## Alternative Hypothesis:
##
## Test Name: Jarque Bera Test
##
## Data: mod1$residuals
##
## Test Statistic: X-squared = 3.607033
##
## Test Statistic Parameter: df = 2
##
## P-value: 0.1647186
\(ARIMA(0,1,1)×(0,1,1)_{12}\)
summary(mod2$residuals)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.1185903 -0.0191628 -0.0000515 0.0005731 0.0223273 0.1085126
par(mfcol = c(1, 1))
hist(mod2$residuals)
library(tseries)
jarque.bera.test(mod2$residuals)
##
## Results of Hypothesis Test
## --------------------------
##
## Alternative Hypothesis:
##
## Test Name: Jarque Bera Test
##
## Data: mod2$residuals
##
## Test Statistic: X-squared = 5.226523
##
## Test Statistic Parameter: df = 2
##
## P-value: 0.07329508
\(ARIMA(1,1,1)×(0,1,1)_{12}\)
summary(mod3$residuals)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1.245e-01 -2.005e-02 8.487e-05 6.215e-04 2.350e-02 1.138e-01
par(mfcol = c(1, 1))
hist(mod3$residuals)
library(tseries)
jarque.bera.test(mod3$residuals)
##
## Results of Hypothesis Test
## --------------------------
##
## Alternative Hypothesis:
##
## Test Name: Jarque Bera Test
##
## Data: mod3$residuals
##
## Test Statistic: X-squared = 8.147297
##
## Test Statistic Parameter: df = 2
##
## P-value: 0.01701519
En definitiva los dos primeros modelos que hemos estimado superan las pruebas de diagnosis perfectamente y realizan un ajuste muy parecido de los datos. La elección del modelo ahora sí resulta sencilla a la luz de los valores de los estadísticos AIC, pues el segundo modelo presenta valores para estos estadísticos menores, en términos absolutos, que el primero. Así pues, el modelo seleccionado para modelizar el número de pasajeros que viaja mensualmente en líneas aéreas internacionales es un \(ARIMA(0,1,1)×(0,1,1)_{12}\).
Comprobamos por ultimo las condiciones de estacionariedad e invertivilidad del modelo elegido, con la función plot.
El siguiente ejemplo utiliza los totales mensuales del índice de producción industrial (IPI) de Cantabria Base 2010 para el periodo comprendido entre Enero de 2000 y Abril de 2014, incluidos en libro de Box y Jenkins. Esta base de datos está disponible en la librería “descomponer” de R:
library(descomponer)
data(ipi)
x<-ts(ipi,c(2000,1),frequency=12)
En la representación gráfica de la serie puede apreciarse claramente una fuerte estacionalidad en los datos y una varianza creciente en el tiempo.
El hecho de que la varianza de la serie no sea constante en el tiempo sugiere que lo primero que debemos hacer es transformar la serie tomando logaritmos para hacer que sea estacionaria en varianza.
x =log(x)
Tras tomar logaritmos, la serie presenta ahora el siguiente aspecto:
En la librería “forecast” hay una función “auto.arima” que selecciona el mejor modelo ARIMA atendiendo al AIC. Su estructura es la siguiente:
auto.arima(x, d=NA, D=NA, max.p=5, max.q=5, max.P=2, max.Q=2, max.order=5, max.d=2, max.D=1, start.p=2, start.q=2, start.P=1, start.Q=1, stationary=FALSE, seasonal=TRUE, ic=c(“aicc”,“aic”,“bic”), stepwise=TRUE, trace=FALSE, approximation=(length(x)>100 | frequency(x)>12), xreg=NULL, test=c(“kpss”,“adf”,“pp”), seasonal.test=c(“ocsb”,“ch”), allowdrift=TRUE, lambda=NULL, parallel=FALSE, num.cores=2)
La función permite establecer el orden de diferenciación regular o estacional. Si no se indica ningún orden, utiliza el test KPSS para establecer el orden regular, y el test OCSB para el estacional. En la opción test, se puede cambiar este criterio de diferenciación por el “test Dikey-Fuller Aumentado” (“adf”) ó el test de Phillips-Perron (“pp”) y en “sasonal.test” permite elegir el test “ch”.
En la función se puede indicar el orden de los coeficientes AR(p) y MA(q) regulares, y AR(P) y MA(Q) estacionales con que iniciar la selección del mejor modelo (“start”) y con que acabar la selección del mejor modelo (“max”), si no se le indica nada los valores por defecto son los que figuran en la estructura de la función.
Señalar, por último, que en “ic” se puede optar por el criterio de selección: AICC, AIC y BIC ).
A continuación, buscamos con los parámetros de los coeficientes establecidos por defecto, y cambiando el test KPSS por el test Phillips-Perron para testear la existencia de alguna raiz unitaria, el mejor AIC para un modelo ARIMA en la serie del IPI de Cantabria:
library(forecast)
mod1 <- auto.arima(x,test="pp")
mod1
## Series: x
## ARIMA(1,0,2)(1,1,1)[12]
##
## Coefficients:
## ar1 ma1 ma2 sar1 sma1
## 0.9307 -0.7020 0.1629 0.3013 -0.7317
## s.e. 0.0408 0.0944 0.0862 0.1468 0.1194
##
## sigma^2 estimated as 0.003462: log likelihood=192.41
## AIC=-372.82 AICc=-372.17 BIC=-355.35
plot(mod1)
Se dice que se ajusta el modelo paramétrico cuando se estiman sus parámetros a partir de un conjunto de observaciones que siguen dicho modelo, de manera que pueden hacerse predicciones de nuevos valores de \(Y\) conocido el valor de \(X\), y tener información precisa acerca de la incertidumbre asociada a la estimación y a la predicción.
Sin embargo, si el modelo paramétrico no es el adecuado al análisis de datos que estamos realizando, puede llevar a conclusiones que queden muy alejadas de la realidad, dado que el modelo paramétrico conlleva un grado de exactitud en las afirmaciones que de él se derivan y que son adecuadas siempre y cuando se cumplan los supuestos básicos sobre los que se apoya su construcción teórica. De hecho, los modelos paramétricos presentan una estructura teórica tan rígida que no pueden adaptarse a muchos conjuntos de datos de los que hoy día se disponen para el análisis económico.
La econometría no paramétrica aparece como consecuencia de intentos por solucionar problemas que existen en la econometría paramétrica como, por ejemplo, la consistencia entre los datos y los principios de maximización, homocedasticidad, o la necesidad de asumir una determinada relación, por lo general de forma lineal, entre las variables de interés. Esta preocupación llevó a una serie de investigadores a utilizar formas funcionales flexibles para aproximarse a relaciones desconocidas entre las variables. El plantear formas funcionales flexibles requiere el conocimiento del valor esperado de la variable \(Y\), condicional en las otras, \(X\). Esto conlleva la necesidad de estimar la función de densidad de \(Y\) condicional en \(X\).
La econometría no paramétrica no parte de supuestos sobre la distribución de probabilidad de las variables bajo estudio, sino que trata de estimar dicha distribución para encontrar la media condicional y los momentos de orden superior (por ejemplo, la varianza) de la variable de interés. Una de las desventajas de este método es, sin embargo, la necesidad de contar con muestras muy grandes si es que se desea estimar la función de relación entre ambas variables de manera precisa. Además el tamaño de la muestra debe aumentar considerablemente conforme aumenta el número de variables involucradas en la relación.
Los modelos de regresión paramétricos suponen que los datos observados provienen de variables aleatorias cuya distribución es conocida, salvo por la presencia de algunos parámetros cuyo valor se desconoce.
\[y_i= \beta_0 + \beta_1 x_i + e_i,\ \ i=1,2,…,n\]
con \(e_i\approx N(0;\sigma^2)\)
Este es un modelo estadístico con tres parámetros desconocidos: \(\beta_0\); \(\beta_1\) y \(\sigma^2\).
Una formulación general de un modelo de regresión paramétrico es la siguiente:
\[y_i=m(x_i;\theta)+e_i,\ \ i=1,2,…, n,\ \ \theta \in \Theta \in \Re\]
Donde \(m(x_i;\theta)\) es una función conocida de \(X\) y de \(\theta\), que es desconocido, \(e_i\) es una variable aleatoria idénticamente distribuida con \(E(e_i)=0\) y \(Var(e_i)=\sigma^2\). El modelo de regresión lineal simple sería un caso particular con \(\theta=(\beta_0, \beta_1)\) y \(m(x_i;\theta)=\beta_0 + \beta_1 x_i\).
Donde los valores de la variable explicativa son conocidos, por lo que se dice que el modelo tiene diseño fijo, y dado que la varianza de los errores es constante el modelo es Homocedástico.
Considerando una variable aleatoria bivariante con densidad conjunta \((Y,X)\), cabe definir la función de regresión \(f(y,x)\) como \(m(x,\theta)=E(Y/X=x)\), es decir, el valor esperado de \(Y\) cuando \(X\) toma el valor conocido \(x\). Entonces \(E(Y/X)=m(X,\theta))\), y definiendo \(e=Y-m(X,\theta)\), se tiene que: \(Y=m(X,\theta)+e\), \(E(e/X)=0\) y \(Var(e/X)=\sigma^2\).
Se supone que se observan ahora \(n\) pares de datos \((y_i,x_i),\ \ i=1…n\). Estos datos siguen el modelo de regresión no paramétrico: \(y_i=m(x_i;\theta)+e_i\).
Una vez establecido el modelo, el paso siguiente consiste en estimarlo (o ajustarlo) a partir de las n observaciones disponibles. Es decir, hay que construir un estimador de la función de regresión y un estimador de la varianza del error. Los procedimientos de estimación se conocen como métodos de suavizado.
El abanico de técnicas disponibles para estimar no paramétricamente la función de regresión es amplísimo e incluye, entre otras, las siguientes:
• Ajuste local de modelos paramétricos. Se basa en hacer varios (o incluso infinitos, desde un punto de vista teórico) ajustes paramétricos teniendo en cuenta únicamente los datos cercanos al punto donde se desea estimar la función.
• Suavizado mediante splines. Se plantea el problema de buscar la función \(\hat m(x)\) que minimiza la suma de los cuadrados de los errores (\(e_i=y_i-\hat m(x)\)) más un término que penaliza la falta de suavidad de las funciones (\(\hat m(x)\)) candidatas (en términos de la integral del cuadrado de su derivada segunda).
• Métodos basados en series ortogonales de funciones. Se elige una base ortonormal del espacio vectorial de funciones y se estiman los coeficientes del desarrollo en esa base de la función de regresión. Los ajustes por series de Fourier y mediante wavelets son los dos enfoques más utilizados.
• Técnicas de aprendizaje supervisado. Las redes neuronales, los k vecinos más cercanos y los árboles de regresión se usan habitualmente para estimar \(m(x)\).
Los histogramas son siempre, por naturaleza, funciones discontinuas; sin embargo, en muchos casos es razonable suponer que la función de densidad de la variable que se está estimando es continua. En este sentido, los histogramas son estimadores insatisfactorios. Los histogramas tampoco son adecuados para estimar las modas, a lo sumo, pueden proporcionar “intervalos modales”, y al ser funciones constantes a trozos, su primera derivada es cero en casi todo punto, lo que les hace completamente inadecuados para estimar la derivada de la función de densidad.
Los estimadores de tipo núcleo (o kernel) fueron diseñados para superar estas dificultades. La idea original es bastante antigua y se remonta a los trabajos de Rosenblatt y Parzen en los años 50 y primeros 60. Los estimadores kernel son, sin duda, los más utilizados y mejor estudiados en la teoría no paramétrica.
Dada un m.a.s (\(X_1,X_2,...X_n\)) con densidad \(f\), estimamos dicha densidad en un punto \(t\) por medio del estimador:
\[\hat f(t)=\frac{1}{nh}\sum_{i=1}^n K(\frac{t-X_i}{h})\]
donde \(h\) es una sucesión de parámetros de suavizado, llamados ventanas, amplitudes o ancho de banda (windows, bandwidths) que deben tender a cero ”lentamente" (\(h \Rightarrow 0\), \(nh\Rightarrow \infty\)) para poder asegurar que \(\hat f\) tiende a la verdadera densidad \(f\) de las variables \(X_i\) y \(K\) es una función que cumple \(\int K=1\). Por ejemplo:
• Nucleo Gaussiano \(\frac{1}{\sqrt{2 \pi}}e^{- \frac {u^2} 2}\)
• Núcleo Epanechnikov \(\frac 3 4 (1-u^2)I_{\mid u \mid < 1}\)
donde \(I_{\mid u \mid < 1}\) es la función que vale 1 si \({\mid u \mid < 1}\) y cero si \({\mid u \mid \geq 1}\)
• Núcleo Triangular \((1-\mid u \mid)I_{\mid u \mid < 1}\)
• Núcleo Uniforme \(\frac 1 2 I_{\mid u \mid < 1}\)
• Núcleo Biweight \(\frac {15} {16} (1-u^2)I_{\mid u \mid < 1}\)
• Núcleo Triweight \(\frac {35} {32} (1-u^2)I_{\mid u \mid < 1}\)
Los programas informáticos eligen el ancho de ventana, \(h\), siguiendo criterios de optimización (error cuadrático medio).
En R la estimación de una función de densidad kernel se realiza con la función “density”. Con los datos del vector \(x\), hay que realizar el siguiente programa:
x <- c(2.1,2.6,1.9,4.5,0.7,4.6,5.4,2.9,5.4,0.2)
density(x, kernel="epanechnikov")
##
## Call:
## density.default(x = x, kernel = "epanechnikov")
##
## Data: x (10 obs.); Bandwidth 'bw' = 1.065
##
## x y
## Min. :-2.99424 Min. :0.00000
## 1st Qu.:-0.09712 1st Qu.:0.02366
## Median : 2.80000 Median :0.09427
## Mean : 2.80000 Mean :0.08621
## 3rd Qu.: 5.69712 3rd Qu.:0.15245
## Max. : 8.59424 Max. :0.16948
plot(density(x, kernel="epanechnikov"))
Los estimadores núcleo establecen que el peso de (\(X_i\),\(Y_i\)) en la estimación de \(m(x)\) es:
\[W_i(t,X_i)=\frac {\frac 1 h K(\frac{t-X_i}{h})}{\hat f(t)}\]
donde \(K(t)\) es una función de densidad simétrica (por ejemplo, la normal estándar) y \(\hat f(t)\) es un estimador kernel de la densidad como el definido en el apartado anterior.
\(W_i(t,X_i)\) es, para cada i, una función de ponderación que da “mayor importancia” a los valores \(X_i\) de la variable auxiliar que están cercanos a t.
Una expresión alternativa para \(W_i(t,X_i)\)
\[W_i(t,X_i)=\frac {K(\frac{t-X_i}{h})}{\sum_{j=1}^nK(\frac{t-X_i}{h})}\]
A partir de los pesos puede resolverse el problema de mínimos cuadrados ponderados siguiente:
\[min_{a,b}\sum_{i=1}^n W_i(Y_i-(\beta_0+\beta_1(t-X_i)))^2\]
los parámetros así obtenidos dependen de \(t\), porque los pesos \(W_i\) también dependen de \(t\). La recta de regresión localmente ajustada alrededor de \(t\) sería:
\[l_t(X)=\hat \beta_0(t)+\hat \beta_1(t)(t-X_i)\]
Y la estimación de la función en el punto en donde \(X=t\)
\[\hat m(t) =l_t(t)=\hat \beta_0(t)\]
Las funciones núcleo usadas en la estimación no paramétrica de la regresión son las mismas que en la densidad.
Si se generaliza al ajuste local de regresiones polinómicas de mayor grado, es decir si pretendemos estimar una forma lineal del tipo:
\[\beta_0+\beta_1 X_i+\beta_3 X_i^2+...+\beta_q X_i^q\]
con la salvedad de que en vez del valor \(X_i\) en la regresión lineal múltiple se utiliza el valor \(t-X_i\). El estimador de polinomios locales de grado \(q\), asignando los pesos obtenidos mediante la función núcleo. se resuelve mediante el siguiente problema de regresión polinómica ponderada:
\[min_{a,b}\sum_{i=1}^n W_i(Y_i-(\beta_0+\beta_1(t-X_i)+\beta_2(t-X_i)^2+...+\beta_q(t-X_i)^q))^2\]
Los parámetros \(\hat \beta_j= \hat \beta_j(t)\) dependen del punto t en donde se realiza la estimación, y el polinomio ajustado localmente alrededor de t sería:
\[P_{q,t}=\sum_{j=0}^q \hat \beta_j(t-X_i)^j\]
Siendo \(m(t)\) el valor de dicho polinomio estimado en el punto en donde \(X=t\):
\[\hat m(t) =P_{q,o}= \hat \beta_0(t)\]
En el caso particular del ajuste de un polinomio de grado cero, se obtiene el estimador de Nadaraya−Watson, o estimador núcleo de la regresión:
\[\hat m_k(t)=\frac {\sum_{i=0}^n K(\frac{t-X_i}{h})Y_i}{\sum_{i=0}^n K(\frac{t-X_i}{h})}\]
El estimador del parámetro de suavizado \(h\) tiene una importancia crucial en el aspecto y propiedades del estimador de la función de regresión. Valores pequeños de \(h\) dan mayor flexibilidad al estimador y le permiten acercarse a todos los datos observados, pero originan altos errores de predicción (sobre-estimación). Valores mas altos de \(h\) ofrecerán un menor grado de ajuste a los datos pero predicen mejor, aunque si \(h\) es demasiado elevado tendremos una falta de ajuste a los datos (sub-estimación).
En la figura siguiente se realizar la representación gráfica de la regresión kernel realizada con el estimador de Nadaraya–Watson con diferentes parámetros de suavizado a la serie temporal co2.
plot (time(co2),co2, main="Regresión kernel con diferentes parámetros de suavizado",type="l")
lines(ksmooth(time(co2),co2, "normal", bandwidth = 2), col = 2)
lines(ksmooth(time(co2),co2, "normal", bandwidth = 5), col = 3)
La función “dpill” de la libreria “KernSmooth”, permite una selección automática del bandwidth más idoneo, siempre que no existan fuertes irregularidades en la serie de datos originales (outliers).
library(KernSmooth)
## KernSmooth 2.23 loaded
## Copyright M. P. Wand 1997-2009
plot(time(co2),co2, main="Regresión kernel con función dpill",type="l")
lines(ksmooth(time(co2),co2, "normal", bandwidth = dpill(cars$speed, cars$dist)), col = 2)
La Regresión LOESS (inicialmente Lowess: Locally Weighted Scatterplot Smoothing) es un modelo de regresión no-paramétrica que también se conoce como regresión local.
LOESS combina la sencillez de la regresión lineal por mínimos cuadrados con la flexibilidad de la regresión no lineal. Mediante el ajuste de modelos sencillos sobre subconjuntos locales de datos, crea una función que describe la parte determinista de la variación en los datos punto a punto. Uno de los principales atractivos de este método es que no resulta necesario especificar una función global para ajustar un modelo a los datos.
La regression LOESS, fue propuesta originalmente por Cleveland (1979) y desarrollada por Cleveland y Devlin (1988).
Dado un conjunto de pares de datos, \((x_t,y_t)\), correspondientes a observaciones de las variables \((X,Y)\). El objetivo de un suavizado en un diagrama de dispersión es estimar la componente determinística,\(\mu(\cdot)\) cuando se utiliza el siguiente modelo de la relación entre las variables:
\[y_t=\mu(x_t)+e_t\]
Un modelo de regresió lineal simple, supone estimar:
\[\mu(X_t)=\beta_0+\beta_1x_t\]
con todas las observaciones participando en la estimación.
La regresión local es un enfoque de ajuste de curvas (o superficies) a datos mediante suavizados en los que el ajuste en \(x\) se realiza utilizando únicamente observaciones en un entorno de \(x\). Al realizar una regresión local puede utilizarse una familia paramétrica al igual que en un ajuste de regresión global pero solamente se realiza el ajuste localmente.
En la práctica se realizan ciertas suposiciones:
sobre la función de regresión \(\mu(\cdot)\) tales como continuidad y derivabilidad de manera que pueda estar bien aproximada localmente por polinomios de un cierto grado.
sobre la variabilidad de \(Y\) alrededor de la curva \(\mu(\cdot)\).
Los métodos de estimación que resultan de este tipo de modelos, requieren que para cada punto \(x\), se defina un entorno. Dentro de ese entorno suponemos que la función regresora es aproximada por una función paramétrica polinómica.Por ejemplo, un polinomio cuadrático: \(g(u) = a_0 + a_1 (u - x) +a_2 (u -x)^2\).
Se estiman los parámetros con las observaciones en ese entorno, denominándose ajuste local a la función ajustada evaluada en \(x\).
Generalmente, se incorpora una función de peso, \(w(u)\), para dar mayor peso a los valores \(x_t\) que se encuentran cerca de \(x\). Los criterios de estimación dependen de los supuestos que se realicen sobre la distribución de \(Y\) dado \(x\). Si, por ejemplo, suponemos que tiene distribución Gaussiana con varianza constante, es adecuado utilizar el Método de Mínimos Cuadrados.
Los subconjuntos de los datos utilizados para el ajuste por mínimos cuadrados ponderados acaban estando determinados por un parámetro de suavización que define el ancho de banda, \(\alpha\). Este parámetro es un número entre \(\frac {(\lambda + 1)}{n}\) y 1, donde \(\lambda\) denota el grado del polinomio local. El valor de \(\alpha\) es la proporción de los datos utilizados en cada ajuste. A \(\alpha\) se le llama parámetro de suavización porque controla la flexibilidad de la función de regresión. Valores grandes de \(\alpha\) producen curvas suaves; valores pequeños hacen que la curva se ajuste tal vez demasiado a los datos. En ocasiones se recomienda utilizar valores en el rango que va de \(0.25\) a \(0.5\).
Este es el codigo en R para el suavizado con Loess.
co2.l=loess(co2~time(co2))
summary(co2.l)
## Call:
## loess(formula = co2 ~ time(co2))
##
## Number of Observations: 468
## Equivalent Number of Parameters: 4.34
## Residual Standard Error: 2.113
## Trace of smoother matrix: 4.72 (exact)
##
## Control settings:
## span : 0.75
## degree : 2
## family : gaussian
## surface : interpolate cell = 0.2
## normalize: TRUE
## parametric: FALSE
## drop.square: FALSE
plot (co2, main="Regresión LOESS")
lines (ts(co2.l$fitted, frequency = 12, start = c(1959, 1)), col=2)
Para poder estimar la función \(f\) de la forma más sencilla posible, deberíamos poder representarla de forma que \(Y_i=f(x_i)+e_i\), \(i=1,2,...,n\) se convierta en un modelo lineal.
Y esto se puede hacer eligiendo una base de funciones de dimensión \(q\) que genere un subespacio de funciones que incluya a \(f\) como elemento y que pueda expresarse como:
\[f(x)=\sum_{j=1}^q \beta_j s_j(x)\]
siendo \(\beta_j\) un parámetro desconocido, asociado al elemento \(j\), \(s_j(x)\) de dicha base de funciones, de manera que:
\[Y_i=\sum_{j=1}^q \beta_j s_j(x) + e_i\] (1)
se convierte en un modelo lineal de dimensión \(q\).
La regresión con funciones base polinómicas es la propuesta más sencilla para este tipo de estimaciones.
Supongamos que \(f\) es un polinomio de grado 4 de forma que el espacio de polinomios de grado 4 contiene a \(f\). Una base de este subespacio es:
\[\begin{equation} \left\lbrace\begin{array}{ll} s_1(x)=1\\ s_2(x)=x\\ s_3(x)=x^2\\ s_4(x)=x^3\\ s_5(x)=x^4 \end{array}\right.\end{equation}\]
De manera que el modelo (1) se convierte en:
\[Y_i=\beta_1 + \beta_2 x_i + \beta_3 x_i^2 + \beta_4 x_i^3 + \beta_5 x_i^4 + e_i\]
Un spline es una curva diferenciable definida en porciones mediante polinomios, que se utiliza como base de funciones para aproximar curvas con formas complicadas.
Una función spline está formada por varios polinomios, cada uno definido sobre un subintervalo, que se unen entre sí obedeciendo a ciertas condiciones de continuidad.
Supongamos que se ha fijado un entero \(q \neq 0\), de manera que disponemos de \(q+1\) puntos, a los que denominaremos nodos (knots), tales que \(t_0<t_1<t_2<...<t_q\), en los que troceamos nuestro conjunto de datos. Decimos entonces que una función spline de grado \(q\) con nodos en \(t_0,t_1,t_2,...,t_q\) es una función \(S\) que satisface las condiciones:
en cada intervalo \([t_{j-1}, t_j)\), \(S\) es un polinomio de grado menor o igual a \(q\).
\(S\) tiene una derivada de orden \((q-1)\) continua en \([t_0,t_q]\).
La flexibilidad de estos modelos se puede controlar de dos formas:
Con el número de puntos de corte (knots) introducidos. A mayor número mayor flexibilidad.
Con el grado del polinomio empleado.
Los splines de grado \(0\) son funciones constantes por zonas. La expresión matemática de un spline de grado \(0\) es la siguiente:
\[\begin{equation} \left\lbrace\begin{array}{ll} s_0(x)=c_0 & x \in [t_0,t_1) \\ s_j(x)=c_j & x \in [t_{j-1},t_j) \\ ...\\ s_{q-1}(x)=c_{q-1} & x \in [t_{q-1},t_q) \end{array}\right.\end{equation}\]
En la figura siguiente se muestran las gráficas correspondientes a los splines de grado cero:
Los splines de grado \(0\), se definen en un solo tramo de nodo, y ni siquiera es continua en los nodos. Equivale a realizar una regresión por tramos.
\[Y_i=\beta_0 c_0 x_i + \beta_1 c_1 x_i + ... + \beta_{q-1} c_{q-1} x_i+ e_i\]
donde \(c_j\) toma valor \(1\) en \([t_{j-1},t_j)\) y cero en el resto.
Un spline de grado 1 o lineal se expresa como:
\[\begin{equation} \left\lbrace\begin{array}{ll} s_0(x)=a_0x + b_0 & x \in [t_0,t_1) \\ s_j(x)=a_jx + b_j & x \in [t_{j-1},t_j) \\ ...\\ s_{q-1}(x)=a_{q-1}x + b_{q-1} & x \in [t_{q-1},t_q) \end{array}\right.\end{equation}\]
La representación gráfica de un spline lineal aparece en la figura siguiente:
Las funciones de spilines más comúnmente utilizadas son las de grado tres ó cúbicas. Son polinomios de grado tres a trozos, que son continuos en los nodos al igual que su primera y segunda derivada, proporcionando un excelente ajuste a los puntos tabulados y a través de un cálculo que no es excesivamente complejo.
Sobre cada intervalo \([t_{j-1},t_j)\), \(S\) está definido por un polinomio cúbico diferente.
\[\begin{equation} \left\lbrace\begin{array}{ll} s_0(x)=a_0x^3 + b_0x^2 + c_0x + d_0 & x \in [t_0,t_1) \\ s_j(x)=a_jx^3 + b_jx^2 + c_jx + d_j & x \in [t_{j-1},t_j) \\ ...\\ s_{q-1}(x)=a_{q-1}x^3 + b_{q-1}x^2 + c_{q-1}x + d_{q-1} & x \in [t_{q-1},t_q) \end{array}\right.\end{equation}\]
Los polinomios \(S_{j-1}\) y \(S_j\) interpolan el mismo valor en el punto \(t_j\), para que se cumpla: \(S_{j-1}(x_i)=y_i=S_j(x_i)\), por lo que se garantiza que \(S\) es continuo en todo el intervalo. Además, se supone que \(S'\) y \(S''\) son continuas, condición que se emplea en la deducción de una expresión para la función del spline cúbico.
Aplicando las condiciones de continuidad del spline \(S\) y de las derivadas primera \(S'\) y segunda \(S''\), es posible encontrar la expresión analítica del spline.
Los elementos de una base de splines cúbicos son polinomios de grado 3. Un Spline cúbico se representa en la figura siguiente:
Para poder obtener el ajuste de un spline cúbico con \(K\) knots, se emplea regresión por mínimos cuadrados, regression splines, sobre una ecuación formada por la intersección y \(3 + K\) predictores:
\(d, X, X^2, X^3, h(X,\xi_1), h(X,\xi_2),...,h(X,\xi_K)\)
donde \((\xi_1,...,\xi_K)\) son los knots.
El modelo resultante implica estimar un total de \(4 + K\) coeficientes de regresión, de manera que el ajuste de un spline cúbico con \(K\) knots tiene \(4 + K\) grados de libertad.
El resultado de los métodos basados en regression splines depende en gran medida de la cantidad de knots que se introduzcan, así como de sus posiciones. Dado que a cuantos más knots mayor es la flexibilidad, una opción sería concentrar un mayor número en los tramos con alta varianza y menos en los tramos más estables. A pesar de que esta es una buena opción, en la práctica se suele preferir distribuir los knots de forma uniforme a lo largo de la serie. Para conseguirlo, se indica al software empleado el número de grados de libertad que se desean y este distribuye el número de knots correspondientes en cuantiles uniformes.
A la hora de elegir el número de knots óptimo, o lo que es lo mismo, el número de grados de libertad (teniendo en cuenta que cada restricción de continuidad introducida reduce un grado de libertad) se recurre a la Cross Validation. Tras calcular el RSS para un rango de \(K\) knots, se selecciona aquella cantidad para la que el RSS estimado es menor (https://rpubs.com/Joaquin_AR/250069).
Utilizamos la base de datos Wage de la libreria (ISLR), pretendemos crear un modelo de regression splines que permita predecir el salario de un trabajador en función de la edad que tiene.
Para ajustar regression splines en R se emplea la librería splines, que viene instalada por defecto. La función bs(), cuyo nombre viene de B-spline, genera la matriz de ecuaciones necesaria para crear las splines acorde a los knots indicados. Por defecto, bs() se generan polinomios de grado 3 (cubic splines) pero esto puede cambiarse con el argumento degree.
# LEEMOS DATOS
library(ISLR)
data("Wage")
head(Wage)
## year age maritl race education
## 231655 2006 18 1. Never Married 1. White 1. < HS Grad
## 86582 2004 24 1. Never Married 1. White 4. College Grad
## 161300 2003 45 2. Married 1. White 3. Some College
## 155159 2003 43 2. Married 3. Asian 4. College Grad
## 11443 2005 50 4. Divorced 1. White 2. HS Grad
## 376662 2008 54 2. Married 1. White 4. College Grad
## region jobclass health health_ins
## 231655 2. Middle Atlantic 1. Industrial 1. <=Good 2. No
## 86582 2. Middle Atlantic 2. Information 2. >=Very Good 2. No
## 161300 2. Middle Atlantic 1. Industrial 1. <=Good 1. Yes
## 155159 2. Middle Atlantic 2. Information 2. >=Very Good 1. Yes
## 11443 2. Middle Atlantic 2. Information 1. <=Good 1. Yes
## 376662 2. Middle Atlantic 2. Information 2. >=Very Good 1. Yes
## logwage wage
## 231655 4.318063 75.04315
## 86582 4.255273 70.47602
## 161300 4.875061 130.98218
## 155159 5.041393 154.68529
## 11443 4.318063 75.04315
## 376662 4.845098 127.11574
# AUSTE DEL MODELO
library(splines)
modelo_splines <- lm(wage ~ bs(age, knots = c(25,40,60), degree = 3),data = Wage)
summary(modelo_splines)
##
## Call:
## lm(formula = wage ~ bs(age, knots = c(25, 40, 60), degree = 3),
## data = Wage)
##
## Residuals:
## Min 1Q Median 3Q Max
## -98.832 -24.537 -5.049 15.209 203.207
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 60.494 9.460 6.394
## bs(age, knots = c(25, 40, 60), degree = 3)1 3.980 12.538 0.317
## bs(age, knots = c(25, 40, 60), degree = 3)2 44.631 9.626 4.636
## bs(age, knots = c(25, 40, 60), degree = 3)3 62.839 10.755 5.843
## bs(age, knots = c(25, 40, 60), degree = 3)4 55.991 10.706 5.230
## bs(age, knots = c(25, 40, 60), degree = 3)5 50.688 14.402 3.520
## bs(age, knots = c(25, 40, 60), degree = 3)6 16.606 19.126 0.868
## Pr(>|t|)
## (Intercept) 1.86e-10 ***
## bs(age, knots = c(25, 40, 60), degree = 3)1 0.750899
## bs(age, knots = c(25, 40, 60), degree = 3)2 3.70e-06 ***
## bs(age, knots = c(25, 40, 60), degree = 3)3 5.69e-09 ***
## bs(age, knots = c(25, 40, 60), degree = 3)4 1.81e-07 ***
## bs(age, knots = c(25, 40, 60), degree = 3)5 0.000439 ***
## bs(age, knots = c(25, 40, 60), degree = 3)6 0.385338
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 39.92 on 2993 degrees of freedom
## Multiple R-squared: 0.08642, Adjusted R-squared: 0.08459
## F-statistic: 47.19 on 6 and 2993 DF, p-value: < 2.2e-16
# INTERPOLACIÓN DE PUNTOS DENTRO DEL RANGO DEL PREDICTOR
limites <- range(Wage$age)
nuevos_puntos <- seq(from = limites[1], to = limites[2], by = 1)
nuevos_puntos <- data.frame(age = nuevos_puntos)
head(nuevos_puntos)
## age
## 1 18
## 2 19
## 3 20
## 4 21
## 5 22
## 6 23
tail(nuevos_puntos)
## age
## 58 75
## 59 76
## 60 77
## 61 78
## 62 79
## 63 80
# PREDICCIÓN DE LA VARIABLE RESPUESTA Y DEL ERROR ESTÁNDAR
predicciones <- predict(modelo_splines, newdata = nuevos_puntos, se.fit = TRUE,level = 0.95)
# CÁLCULO DEL INTERVALO DE CONFIANZA SUPERIOR E INFERIOR
intervalo_conf <- data.frame(inferior = predicciones$fit - 1.96*predicciones$se.fit,superior = predicciones$fit +1.96*predicciones$se.fit)
attach(Wage)
plot(x = age, y = wage, pch = 20, col = "darkgrey")
title("Cubic Spline, knots: 25, 40, 60")
lines(x = nuevos_puntos$age, predicciones$fit, col = "red", lwd = 2)
lines(x = nuevos_puntos$age, intervalo_conf$inferior, col = "blue",lwd = 2, lty = 2)
lines(x = nuevos_puntos$age, intervalo_conf$superior, col = "blue",lwd = 2, lty = 2)
Dado que se han especificado 3 knots en los valores 25, 40 y 60, la spline resultante tiene 6 funciones. Esto equivale a 7 grados de libertad, uno por el intercept más 6 por las funciones que lo forman.
En el caso de las series temporales, la regression splines se utiliza para obtener una linea de tendencia o suavizado. En el siguiente ejemplo en que suavizamos el IPI de Cantabria, para que los knots estén equidistribuidos, en lugar de indicar las posiciones en el argumento knots, se indican los grados de libertad del spline:
# LEEMOS DATOS
library(descomponer)
data(ipi)
x<-ts(ipi,c(2000,1),frequency=12)
# CUBIC SPLINE CON 3 KNOTS EQUIDISTRIBUIDOS
ipi_splines <- lm(x ~ bs(time(x), df = 6, degree = 3))
summary(ipi_splines)
##
## Call:
## lm(formula = x ~ bs(time(x), df = 6, degree = 3))
##
## Residuals:
## Min 1Q Median 3Q Max
## -38.812 -5.573 1.883 7.147 20.032
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 99.595 5.682 17.529 <2e-16 ***
## bs(time(x), df = 6, degree = 3)1 -10.610 10.653 -0.996 0.3210
## bs(time(x), df = 6, degree = 3)2 13.940 6.992 1.994 0.0481 *
## bs(time(x), df = 6, degree = 3)3 10.999 8.511 1.292 0.1983
## bs(time(x), df = 6, degree = 3)4 -9.476 7.926 -1.195 0.2339
## bs(time(x), df = 6, degree = 3)5 5.248 8.887 0.591 0.5558
## bs(time(x), df = 6, degree = 3)6 -10.963 7.913 -1.385 0.1681
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.39 on 141 degrees of freedom
## Multiple R-squared: 0.2009, Adjusted R-squared: 0.1669
## F-statistic: 5.907 on 6 and 141 DF, p-value: 1.594e-05
# GRÁFICA DEL SUAVIZADO
x.spline<-ts(ipi_splines$fitted.values,c(2000,1),frequency=12)
plot(x,main = "IPI de Cantabria")
lines(x.spline,col="red")
El concepto de smoothing splines O splines con penalizaciones es similar al de regression splines, la diferencia está en la estrategia seguida para obtener la curva final. En los smoothing splines la selección de los nodos no es tan determinante como en los regression splines, pero sí lo es, la elección del grado de suavización del spline.
Si se mantiene fija la base de splines y se controla el grado de suavización añadiendo una penalización a la función objetivo de mínimos cuadrados:
\[\lambda \beta' S \beta\]
donde \(S\) es una matriz de orden \(q*q\) con coeficientes conocidos que dependen de la base elegida y un parámetro de suavizado \(\lambda\), la solución del modelo de regresión lineal penalizado, en donde la matriz de regresores está ahora definida por la base de splines y la penalización, sería:
\[\hat \beta = (X'X - \lambda S)^{-1}X'y\]
El modelo de regresión lineal con spilines penalizados es equivalente al modelo de regresión lineal:
\[Y'=\beta X' + e\]
donde \(Y'=(y,0,0...0)\) es un vector de dimensión \((n+q)\), es decir el vector \(y\) seguido de tantos ceros como nodos se han utilizado en la base de los splines.
La matriz de regresores
\[X' = \begin{bmatrix}X\\ B \sqrt \lambda\\ \end{bmatrix}\]
tiene ahora orden \((n+q)*q\), siendo \(B\) una matriz que cumple \(B=S'S\) y que se obtiene a través de la descomposición de Cholesky, \(\lambda\) el parámetro de suavizado y \(e\) un vector de \((n+q)\) errores aleatorios.
El parámetro de suavización,\(\lambda\),es a priori desconocido y hay que determinarlo, si es muy alto suaviza los datos en exceso. Un criterio utilizado para elegir el parámetro es del valor que minimiza el estadístico general de validación cruzada.
La introducción de knots aumenta los grados de libertad y tambien la flexibilidad del modelo. A priori, un spline con knots en cada observación \(x_i\) tendría una flexibilidad muy por encima de lo deseado debido a la gran cantidad de grados de libertad, sin embargo, la restricción que impone el parametro de suavizado \(\lambda\) hace que los grados de libertad efectivos \((df\lambda)\) sean mucho menores. El término \(df\lambda\) puede entenderse como el impacto real de los grados de libertad sobre la flexibilidad de un modelo. En la mayoría de casos, los grados de libertad hacen referencia al número de parámetros libres, como por ejemplo el número de coeficientes de regresión en un modelo, de ahí que sean un indicativo de la flexibilidad del modelo. Cuando se imponen restricciones (shrinkage), la libertad de los parámetros se reduce, por lo que, aunque el número de grados de libertad se mantiene, la flexibilidad disminuye. Es por esta razón por la que en modelos con restricciones se habla de grados de libertad efectivos.
En la función smooth.splines de R, el parámetro de suavizado \(\lambda\) puede determinarse a través de la opción spar, ya que computacionalmente:
\(\lambda = 256r^{3(spar - 1)}\)
siendo \(r = \frac {tr(X'WX)} {tr (\sum)}\), y \(\sum\) es la matriz dada por \(\sum[i, j] = \int B''[i](t) B''[j](t) dt\), \(X\) está dada por \(X[i,j] = B [j] (x [i])\), \(W\) es la matriz diagonal de pesos (escalada de tal manera que su traza es \(n\), el número original de observaciones) y \(B[k](.)\) es la k-ésima B-spline.
Dadas estas definiciones, \(f_i = f (x_i)\), y la representación de base B-spline \(f = X c\) (donde \(c\) es el vector de los coeficientes de spline), logaritmo de verosimilitud penalizado es:
\(L = (y -f)'W (y-f) + \lambda c'\sum c\),
y por lo tanto \(c\) es la solución de la ridge regresión: \((X'WX + \lambda \sum) c = X'Wy\).
Si faltan spar y lambda o NULL, el valor de df se usa para determinar el grado de suavizado. Si también falta \(df\), se utiliza la validación cruzada de omisión (ordinaria o “generalizada” según lo determinado por cv) para determinar \(\lambda\).
Partiendo de la base de datos “cars”, la función R “smooth.spline” realiza la regresión por splines utilizando una base de splinee cúbicos penalizados:
attach(cars)
plot(speed, dist, main = "data(cars) & smoothing splines")
cars.spl1 <- smooth.spline(speed, dist)
cars.spl1
## Call:
## smooth.spline(x = speed, y = dist)
##
## Smoothing Parameter spar= 0.7801305 lambda= 0.1112206 (11 iterations)
## Equivalent Degrees of Freedom (Df): 2.635278
## Penalized Criterion (RSS): 4187.776
## GCV: 244.1044
cars.spl2 <- smooth.spline(speed, dist, spar=0.10)
lines(cars.spl1, col = "blue")
lines(cars.spl2, col = "red")
En la función “smooth.spline” lo más practico es obtener el parámetro de suavizado a partir del “spar”, fijando un valor entre 0 y 1, en tanto que el coeficiente \(\lambda\) se computa por el procedimiento antes descrito. En el ejercicio el programa elige un \(\lambda=0.7801305\). En línea roja se representa en el gráfico correspondiente al resultado que se obtendría con un parámetro de suavizado de valor \(0.10\).
Para una serie temporal, IPI de Cantabria, procederíamos de la siguiente forma:
plot(x, main = "IPI de Cantabria")
IPI.spl1 <- smooth.spline(x)
IPI.spl1
## Call:
## smooth.spline(x = x)
##
## Smoothing Parameter spar= 0.7554373 lambda= 0.0007791226 (11 iterations)
## Equivalent Degrees of Freedom (Df): 8.414817
## Penalized Criterion (RSS): 16314.77
## GCV: 123.9264
IPI.spl2 <- smooth.spline(x, spar=0.50)
lines(IPI.spl1, col = "blue")
lines(IPI.spl2, col = "red")
La forma de Fourier permite aproximar arbitrariamente cerca, tanto a la función como a sus derivadas, sobre todo el dominio de definición de las mismas. La idea que subyace en este tipo de aproximaciones (que podrían denominarse semi-no-paramétricas) es ampliar el orden de la base de expansión, cuando el tamaño de la muestra aumenta, hasta conseguir la convergencia asintótica de la función aproximante a la verdadera función generadora de los datos y a sus derivadas (Gallant, A.R.; 1981, 1984).
Un polinomio de Fourier viene dado por la expresión:
\[\frac \eta 2 + \sum_{j=1}^k[a_j\cos(jw_0t)+b_j\sin(jw_0t)]\]
donde \(k\) es es el número de ciclos teóricos o armónicos que consideramos, siendo el máximo \(N/2\), \(w_0=\frac {2\pi} N\) es la frecuencia fundamental (también denominada frecuencia angular fundamental) y \(t\) toma los valores enteros comprendidos entre \(1\) y \(N\) (es decir, \(t = 1, 2, 3, ...N\)).
Los coeficientes de los armónicos vienen dados por las expresiones:
\[\frac \eta 2 = \frac 2 N \sum_{i=1}^N y_i\]
\[a_j=\frac 2 N \sum_{i=1}^N y_i \cos(jw_0t)\]
\[b_j=\frac 2 N \sum_{i=1}^N y_i \sin(jw_0t)\]
La aproximación a una función no periódica \(m(x_i;\theta)\) por una serie de expansión de Fourier se escribe como:
\[m(x_i;\theta)= \eta + \sum_{j=1}^J[a_j\cos(jx_i)+b_j\sin(jx_i)]\]
El vector de parámetros es \(\theta=(\eta, a_1, b_1,...,a_J,b_J)\) de longitud \(K=1+2J\).
Suponiendo que los datos siguieran el modelo \(y_i=m(x_i;\theta)+e_i\), para \(i=1,2,…,N\), estimariamos \(\theta\) por mínimos cuadrados minimizando:
\[S_n(\theta)=\frac 1 N \sum_{i=1}^N[y_i-m_K(x_i;\theta)]^2\]
Dado que la variable exógena \(x_i\) no esta expresada en forma periódica, debe de transformase o normalizarse en un intervalo de longitud menor que \(2\pi\), \([0,2\pi]\).
Como ejemplo, vamos a utilizar la base de datos de la Agencia Española de Meteorológica (Aemet) desde el R-package fda.usc. La base de datos contiene mediciones diarias de temperatura, velocidad del viento y precipitaciones de 73 diferentes estaciones meteorológicas de España para los años 1980 a 2009. En este ejemplo, vamos a analizar las temperaturas medias diarias de Santander, que representamos gráficamente en R con la siguiente programación:
library(fda)
## Loading required package: Matrix
##
## Attaching package: 'fda'
## The following object is masked from 'package:forecast':
##
## fourier
## The following object is masked from 'package:graphics':
##
## matplot
library(fda.usc)
## Loading required package: mgcv
## Loading required package: nlme
##
## Attaching package: 'nlme'
## The following object is masked from 'package:forecast':
##
## getResponse
## This is mgcv 1.8-31. For overview type 'help("mgcv-package")'.
## Loading required package: rpart
data(aemet, package = "fda.usc")
tt = aemet$temp$argvals
temp = as.data.frame(aemet$temp$data, row.names=F)
range.tt = aemet$temp$rangeval
inv.temp = data.frame(t(aemet$temp$data)) # 365 x 73 matrix
names(inv.temp) = aemet$df$name
plot(ts(inv.temp[,21]),main="Temperaturas medias diarias Santander 1980-2009")
Para conocer los ciclos que dominan en una serie temporal hay que representar el peridograma. El periodograma mide la aportación de los componentes periodicos de las frecuencias de la serie temporal (armonicos) a su varianza total. Si el periodograma presenta un pico en una frecuencia determinada, indica que dicha frecuencia tiene más importancia en la dinámica de la serie que el resto. Utilizamos la función gperiodograma de la librería descomponer para representar el periodograma de
# GENERAMOS UNA SERIE TEMPORAL ARMONICA CON TENDENCIA, DOS CICLOS DE FRECUENCIA 2 y 4 Y ERROR ALEATORIO
t=seq(1:100)
x=0.5*t+5*cos(2*pi*t/50)+0.5*sin(2*pi*t/50)+5*cos(2*pi*t/25)+0.5*sin(2*pi*t/50)+rnorm(100,0,2)
plot(x,type="l")
# PERIODOGRAMA DE LA SERIE TEORICA
library(descomponer)
gperiodograma(x)
# PERIODOGRAMA DE LA SERIE DE TEMPERATURAS DE SANTANDER
gperiodograma(inv.temp[,21])
El periodograma de la serie de temperaturas medias diarias muestra que la serie está dominada por los ciclos de baja frecuencia.
A continuación se van a suavizar estas temperaturas diarias utilizando funciones periódicas de Fourier, en concreto vamos a utilizar las funciones de base igual a 5. Es decir, los armónicos que se obtendrían con:
\[\sum_{j=1}^5[a_j\cos(jw_0t)+b_j\sin(jw_0t)]\]
Santander5 = create.fourier.basis(rangeval = range(tt), nbasis = 5)
plot(Santander5)
Con la función smooth.basis(argvals=1:n, y, fdParobj) del R-package fda obtenemos la serie suavizada. Respecto a los parámetros, argvals es el dominio, y es el conjunto de valores a suavizar y fdParobj la función base utilizada como regresores:
Santanderfourier5.fd = smooth.basis(argvals = tt, y = inv.temp[,21], fdParobj = Santander5)
plot(ts(inv.temp[,21]), main="Temperaturas medias diarias Santander 1980-2009")
lines(Santanderfourier5.fd,col="red")
En el objeto que genera la función, incluye un data set “y2cMap” en donde se guardan las series de senos y cosenos que se utilizan en el suavizado, en “fd$coefs” estan los coeficientes, para obtener el resultdo del suavizado hay que multiplicar los coeficientes por los regresores. En el siguiente proceso se realiza la misma representación obteniendo el resultado del suavizado, que se ha transformado a objeto ts.
# Regresores
head(t(Santanderfourier5.fd$y2cMap))
## const sin1 cos1 sin2 cos2
## [1,] 0.05170402 0.0006310771 0.07311781 0.001262107 0.07310964
## [2,] 0.05170423 0.0019103806 0.07309602 0.003819475 0.07302161
## [3,] 0.05170487 0.0031891174 0.07305275 0.006372281 0.07284597
## [4,] 0.05170592 0.0044669066 0.07298802 0.008917483 0.07258292
## [5,] 0.05170740 0.0057433674 0.07290184 0.011452047 0.07223277
## [6,] 0.05170930 0.0070181196 0.07279423 0.013972954 0.07179594
# Coeficientes
Santanderfourier5.fd$fd$coefs
## [,1]
## const 276.441022
## sin1 -38.390736
## cos1 -61.224525
## sin2 8.514355
## cos2 -1.642055
# Obtenermos resultado
resultado=(t(Santanderfourier5.fd$fd$coefs)%*%Santanderfourier5.fd$y2cMap)
head(ts(resultado[1,]))
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 9.682978 9.657176 9.632933 9.610235 9.589071 9.569427
plot(ts(inv.temp[,21]),main="Temperaturas medias diarias Santander 1980-2009")
lines(ts(resultado[1,]),col="red")
Nerlove (1964) y Granger (1969) fueron los primeros investigadores en aplicar el analisis espectral a las series de tiempo en economía. El uso del analisis espectral requiere un cambio en el modo de ver las series económicas, al pasar de la perspectiva del tiempo al dominio de la frecuencia. El analisis espectral parte de la supsición de que cuanquier serie \(X_t\), puede ser transformada en ciclos formados con senos u cosenos:
\[X_t=\eta+\sum_{j=1}^N\left[a_j\cos \left(2\pi\frac{ft}n\right) +b_j\sin\left(2\pi\frac{ft}n\right)\right] \ \ \ \ \ \ (1)\]
donde \(\eta\) es la media de la serie, \(a_j\) y \(b_j\) son su amplitud, \(f\) son las frecuencias del conjunto de las \(n\) observaciones, \(t\) es un indice de tiempo que va de 1 a N, siendo N el numero de periodos para los cuales tenemos observaciones en el conjunto de datos.
El cociente \((\frac{ft}n)\) convierte cada valor de \(t\) en escala de tiempo en proporciones de \(2n\) y rango \(j\), desde \(1\) hasta \(n\), siendo \(n=\frac{N}2\) (es decir, 0,5 ciclos por intervalo de tiempo).
La dinámica de las altas frecuencias (los valores más altos de f) corresponden a los ciclos cortos en tanto que la dinámica de la bajas frecuencias (pequeños valores de f) van a corresponder con los ciclos largos. Si nosotros hacemos que \(\frac{ft}n=w\), la ecuación (1) quedaría así:
\[X_t=\eta+\sum_{j=1}^N[a_j\cos(\omega_j)+b_j\sin(\omega_j)] \ \ \ \ \ \ (2)\]
El análisis espectral puede utilizarse para identificar y cuantificar, en procesos aparentemente aperiodicos, sucesiones de ciclos de corto y largo plazo. Una serie dada \({X_t}\) puede contener diversos ciclos de diferentes frecuencias y amplitudes, y esa combinación de frecuencias y amplitudes de carácter cíclico la hacen aparecer como una serie no periódica e irregular. De hecho, la ecuación (2) muestra que cada observación \(t\) de una serie de tiempo, es el resultado de sumar los valores en \(t\) que resultan de \(N\) ciclos de diferente longitud y amplitud, a los que habría que añadir, si cabe, un término de error.
Una manera practica de pasar desde el dominio del tiempo al dominio de la frecuencia es premultiplicando los datos originales por una matriz ortogonal, \(W\), sugerida por Harvey (1978), con el elemento (j,t)th:
\[\begin{equation} w_{jt} = \left\lbrace\begin{array}{ll}\left(\frac{1}T\right) ^\frac{1}2 & \forall j=1\\ \left(\frac{2}T\right) ^\frac{1}2 \cos\left[\frac{\pi j(t-1)}T\right] & \forall j=2,4,6,..\frac{(T-2)}{(T-1)}\\ \left(\frac{2}T\right) ^\frac{1}2 \sin\left[\frac{\pi (j-1)(t-1)}T\right] & \forall j=3,5,7,..\frac{(T-2)}T\\ \left(\frac{1}T\right) ^\frac{1}2 (-1)^{t+1} & \forall j=T\end{array}\right.\end{equation}\]
La matriz \(W\) tiene la ventaja de ser ortogonal por lo que \(WW^T=I\).
Sea \(a\) un vector n x 1, el modelo transformado en el dominio de la frecuencia esta dado por: \(\hat a= Wa\).
Engle (1974), demostró que una regresión realizada con las series transformadas en el dominio de la frecuencia, Regresión Band Spectrum (RBS), no alteraba los supuestos básicos de la regresión clásica, cuyos estimadores eran Estimadores Lineales, Insesgados y Optimos (ELIO).
\[y=X\beta+u \ \ \ \ \ \ (3)\]
donde \(X\) es una matriz \(n x k\) de observaciones de \(k\) variables independientes, \(\beta\) es un vector \(k x I\) de parámetros, \(y\) es un vector \(n x 1\) de observaciones de la variable dependiente, y \(u\) en un vector \(n x I\) de pertubacciones de media cero y varianza constante, \(\sigma^2\).
El modelo se expresaría en el dominio de la frecuencia aplicando una transformación lineal a las variables dependiente e independientes, por ejemplo, premultiplicando todas las variables por la matriz ortogonal \(W\). La técnica de la RBS consiste en realizar el analisis de regresión en el dominio de la frecuencia, pero omitinedo determinadas oscilaciones periodicas. Con este procedimiento pueden tratarse problemas derivados de la estacionalidad de las series o de la autocorrelación en los residuos. Engle (1974) muestra que si los residuos están correlacionados serialmente y son generados por un procieso estacionario estocástico, la regresión en el dominio de la frecuencia es el estimador asintóticamente más eficiente de \(\beta\).
La transformación de la ecuación (3) del dominio del tiempo al dominio de la frecuencia en Engle (1974), se basa en la matriz \(W\), cuyo elemento \((t, s)\) esta dado por:
\[w_{ts}=\frac{1}{\sqrt n} e^{i\lambda_t s} \ \ \ \ \ \ s= 0,1,...,n-1\]
donde \(\lambda_t = 2\pi \frac{t}n\), \(t=0,1,...,n-1\), y \(i=\sqrt{-1}\).
Premultiplicando las observaciones de (3) por \(W\), obtenemos:
\[\dot y=\dot X\beta+\dot u \ \ \ \ \ \ (4)\]
donde \(\dot y = Wy\), \(\dot X = WX\),ç y \(\dot u = Wu\).
Si el vector de las perturbaciones en (3) cumple las hipótesis clásicas del modelo de regresión: \(E[u] = 0\) y \(E[uu']=\sigma^2 I_n\), entonces el vector de perturbaciones transformado al dominio de la frecuencia, \(\dot u\), tendrá las mimas propiedades.
Por otro lado, dado que la matriz W es ortogonal, \(WW^{T}= I\), entonces \(W^T\) sería la transpuesta de la completa conjugada de \(W\), de forma que las observaciones del modelo (4) acaban conteniendo el mismo tipo de información que las observaciones del modelo inicialmente planteado.
\[var(\dot u)=E(\dot u \dot u^T)=E(Wuu'W^T)=WE(uu')W^T=\sigma^2W \Omega W^T\]
si \(\Omega=I\) entonces \(var(\dot u)=\sigma^2I\).
Asuminendo que \(x\) es independiente de \(u\), el toerema de Gauss-Markov implicaría que:
\[\hat \beta = (\dot x' \dot x)^{-1}\dot x'\dot y\]
es el mejor estimador lineal insesgando (ELIO) de \(\dot \beta\). El estimador obtenido sería de hecho idéntico al estimador MCO de (3).
Estimar (4) manteniendo únicamente determinadas frecuencias, puede llevarse a cabo omitiendo las observaciones correspondientes a las restantes frecuencias, si bien, dado que las variables en (4) son complejas, Engle (1974) sugiere la transformada inversa de Fourier para recomponer el modelo estimado en términos de tiempo.
Utilizando el IPI de Cantabria se comprueba que los estimadores MCO coinciden con los estimadores de la regresión en el dominio de la frecuencia:
# DATOS IPI CANTABRIA
library(descomponer)
data("ipi")
t=seq(1:length(ipi))
t2=t^2
# REGRESIÓN MINIMO CUADRADA
summary(lm(ipi~t+t2))
##
## Call:
## lm(formula = ipi ~ t + t2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -42.468 -4.931 2.215 6.942 23.111
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 95.2675702 2.9250060 32.570 < 2e-16 ***
## t 0.3413570 0.0906335 3.766 0.00024 ***
## t2 -0.0025658 0.0005892 -4.355 2.5e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.7 on 145 degrees of freedom
## Multiple R-squared: 0.1331, Adjusted R-squared: 0.1212
## F-statistic: 11.14 on 2 and 145 DF, p-value: 3.169e-05
# TRANSFORMACION SERIES AL DOMINIO DE LA FRECUENCIA
K <- c(rep(1,length(ipi)))
ipi.1 = gdf(ipi)
t.1=gdf(t)
t.2=gdf(t2)
K.1=gdf(K)
# REGRESIÓN EN EL DOMININO DE LA FRECUENCIA
summary(lm(ipi.1~0+K.1+t.1+t.2))
##
## Call:
## lm(formula = ipi.1 ~ 0 + K.1 + t.1 + t.2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.195 -5.415 -0.469 2.552 65.236
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## K.1 95.2675702 2.9250060 32.570 < 2e-16 ***
## t.1 0.3413570 0.0906335 3.766 0.00024 ***
## t.2 -0.0025658 0.0005892 -4.355 2.5e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.7 on 145 degrees of freedom
## Multiple R-squared: 0.9872, Adjusted R-squared: 0.987
## F-statistic: 3739 on 3 and 145 DF, p-value: < 2.2e-16
Definiendo una matriz \(A\) de tamaño n x n de ceros excepto en las posiciones de la diagonal principal, correspondientes a las frecuencias que queremos incluir en la regresión, y premultiplicando \(\dot y\) y \(\dot X\) por \(A\) eleminamos determindas observaciones y las reemplazamos por ceros para realizar la regresión band spectrum. Devolver al dominio del tiempo a estas observaciones requiere:
\[y^* = W^{T}A\dot y = W^{T}AWy\] \[x^* = W^{T}A\dot x = W^{T}AWx \ \ \ \ \ \ (5)\]
Al regresar \(y^*\) sobre \(x^*\) obtenemos un \(\beta\) idéntico al estimador que obtendríamos al estimar por MCO \(\dot y\) frente a \(\dot x\).
Cuando se realiza la regresión band spectrum de esta manera, ocurre un problema asociado a los grados de libertad de la regresión de \(y^*\) sobre \(x^*\) que asumen los programas estadisticos convencionales, \(n - k\). Los grados de libertad reales serían únicamente \(n'- k\), donde \(n'\) es el numero de frecuencias incluidas en la regresión band spectrum.
Tan H.B and Ashley R (1999), señalan que el procedimiento de elaboración de una RBS consta de tres etapas:
1.- Transformar los datos originales del dominio del tiempo al dominio de la frecuencia utilizando series finitas de senos y cosenos. Implicaría premultiplicar los datos originales por la matriz ortogonal \(W\) sugerida por Harvey (1978).
2.- Permitir la variación a través de m bandas de frecuencia usando variables Dummy \(D_j^1,..D_j^m\). Estas variables se elaboran a partir de submuestras de las \(n\) observaciones del dominio de frecuencias. De esta forma, \(D_j^s=\dot x_{j,k}\) si la observación \(j\) está en la banda de frecuencias \(s\) y \(D_j^s=0\), en el resto de los casos.
3.- Re-estimar el resultado del modelo de regresión en el dominio del tiempo con las estimaciones y los coeficientes de las \(m\) variables Dummy. Implicaría premultiplicar la ecuación de regresión ampliada por las variables Dummy por la transpuesta de \(W\).
Asumiendo entonces que las series, \(y_t\), \(x_t\), \(\beta_t\) y \(u_t\) pueden ser transformadas en el dominio de la frecuencia:
\[y_t=\eta^y+\sum_{j=1}^N[a^y_j\cos(\omega_j)+b^y_j\sin(\omega_j)\]
\[x_t=\eta^x+\sum_{j=1}^N[a^y_j\cos(\omega_j)+b^y_j\sin(\omega_j)]\]
\[\beta_t=\eta^\beta+\sum_{j=1}^N[a^\beta_j\cos(\omega_j)+b^\beta_j\sin(\omega_j)]\]
\[(6)\]
Premultiplicando (6) por \(W\) obtenemos:
\[\dot y=\dot x\dot\beta+\dot u \ \ \ \ \ \ (7)\]
donde \(\dot y = Wy\),\(\dot x = Wx\), \(\dot \beta = W\beta\) y \(\dot u = Wu\)
El sistema (7) puede reescribirse como:
\[\begin{equation} \dot y=Wx_tI_nW^T\dot \beta + WI_nW^T\dot u \end{equation}\]
Si denominamos \(\dot e=WI_nW^T\dot u\), podrían buscarse los \(\dot \beta\) que minimizaran la suma cuadrática de los errores \(e_t=W^T\dot e\).
Una vez encontrada la solución a dicha optimización, se transformarían las series al dominio del tiempo para obtener el sistema (6).
Para obtener una solución a la minimización de los errores que ofrezca el mismo resultado que la regresión lineal por mínimos cuadrados ordinarios, requiere utilizar una matriz de regresores cuya primera columna sería el vector de tamaño \(N\), \((1,0,0,...)\), la segunda columna sería la primera fila de la matriz \(WI_NX_tW^T\), y las columnas siguientes, corresponderían las a las frecuencias de senos o cósenos que queremos regresar.
Denominando a esta nueva matriz, de tamaño (Nxp), \(\dot X\), donde \(p=2+j\), siendo \(j\) las frecuencias de seno y coseno elegidas como explicativas, los coeficientes de la solución MCO serían:
\[\dot \beta = (\dot X' \dot X)^{-1}\dot X' \dot y\]
donde \(\beta_{0,1}\) sería el parámetro asociado a la constante, \(\beta_{1,1}\) el asociado a la pendiente, y \(\beta_{1,j}\) los asociados a las frecuencias de senos y cósenos elegidas.
La regresión en el dominio de la frecuencia para el IPI de Cantabria realizado con un filtrado de altas frecuencias, se muestra aqui:
# CREAMOS LA MATRIZ DE REGRESORES FILTRANDO LAS ALTAS FRECUENCIAS CON LA MATRIZ DE HARVEY
n=length(ipi)
M <- MW(length(ipi))
z <- lm(ipi~t+t2)$fitted
cx <- M%*%diag(z)
cx <- cx%*%t(M)
id <- seq(1,n)
S1 <- data.frame(cx)
S2 <- S1[1:(2+(n/12)),]
X <- as.matrix(S2)
X <- t(X)
# REGRESION FILTRANDO LAS ALTAS FRECUENCIAS
rbs.fit=lm(ipi.1~0+X)
summary(rbs.fit)
##
## Call:
## lm(formula = ipi.1 ~ 0 + X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.204 -4.326 -0.237 1.651 65.231
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## X1 12.16502 0.10704 113.646 < 2e-16 ***
## X2 -0.01543 0.10793 -0.143 0.8865
## X3 0.16244 0.10615 1.530 0.1283
## X4 0.06540 0.10725 0.610 0.5430
## X5 -0.44072 0.10683 -4.125 6.46e-05 ***
## X6 -0.05344 0.10711 -0.499 0.6186
## X7 0.26225 0.10697 2.452 0.0155 *
## X8 0.19221 0.10706 1.795 0.0748 .
## X9 -0.12187 0.10701 -1.139 0.2568
## X10 -0.08563 0.10703 -0.800 0.4251
## X11 0.03593 0.10702 0.336 0.7376
## X12 0.05775 0.10698 0.540 0.5902
## X13 0.05649 0.10685 0.529 0.5979
## X14 -0.04020 0.10680 -0.376 0.7072
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.86 on 134 degrees of freedom
## Multiple R-squared: 0.9898, Adjusted R-squared: 0.9888
## F-statistic: 932.6 on 14 and 134 DF, p-value: < 2.2e-16
plot(ts(ipi,frequency = 12, start = c(2002, 1)),type="l",main="IPI.Cantabria",ylab="")
lines(ts(lm(ipi~t+t2)$fitted,frequency = 4, start = c(1980, 1)),type="l",col=2)
lines(ts(gdt(rbs.fit$fitted),frequency = 4, start = c(1980, 1)),type="l",col=3)
legend("top", ncol=3,c("ipi","Estimado LM","Estimado RBS"),cex=0.6,bty="n",fill=c(1,2,3))
Una manera de obtener pronosticos en el caso de la regresión RBS, es generar los correspondientes armónicos y utilizar los coeficientes de la regresión RBS para componer el pronostico.
Por pasos:
Convertimos al dominio de tiempo cada regresor (cada columna de la matriz X)
Se reliza la estimación en el dominio del tiempo la regresión MCO \(X_{1t}=\hat \beta_0 + \hat \beta_1 t + \hat \beta_1 t^2\) y su pronóstico
Se reliza la estimación en el dominio del tiempo la regresión MCO \(X_{2t}=\hat \beta_0 + \hat \beta_1 cos( \frac {2*\pi t} {T})\) y su pronóstico
Se reliza la estimación en el dominio del tiempo la regresión MCO \(X_{3t}=\hat \beta_0 + \hat \beta_1 sin( \frac {2*\pi t} {T})\) y su pronostico
Se reliza la estimación en el dominio del tiempo la regresión MCO \(X_{4t}=\hat \beta_0 + \hat \beta_1 cos( \frac {4*\pi t} {T})\) y su pronóstico
Se reliza la estimación en el dominio del tiempo la regresión MCO \(X_{5t}=\hat \beta_0 + \hat \beta_1 sin( \frac {4*\pi t} {T})\) y su pronostico
y sucesivamente ….
Se combinan las series pronosticadas con los coeficientes que resultan de la regresión en el dominio de la frecuencia.
A continuación se realiza un ejemplo para el IPI de Cantabria, utilizando los dos primeros armónicos.
# REGRESION FILTRANDO LAS ALTAS FRECUENCIAS
S2 <- S1[1:5,]
X <- as.matrix(S2)
X <- t(X)
rbs.fit.2=lm(ipi.1~0+X)
summary(rbs.fit)
##
## Call:
## lm(formula = ipi.1 ~ 0 + X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.204 -4.326 -0.237 1.651 65.231
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## X1 12.16502 0.10704 113.646 < 2e-16 ***
## X2 -0.01543 0.10793 -0.143 0.8865
## X3 0.16244 0.10615 1.530 0.1283
## X4 0.06540 0.10725 0.610 0.5430
## X5 -0.44072 0.10683 -4.125 6.46e-05 ***
## X6 -0.05344 0.10711 -0.499 0.6186
## X7 0.26225 0.10697 2.452 0.0155 *
## X8 0.19221 0.10706 1.795 0.0748 .
## X9 -0.12187 0.10701 -1.139 0.2568
## X10 -0.08563 0.10703 -0.800 0.4251
## X11 0.03593 0.10702 0.336 0.7376
## X12 0.05775 0.10698 0.540 0.5902
## X13 0.05649 0.10685 0.529 0.5979
## X14 -0.04020 0.10680 -0.376 0.7072
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.86 on 134 degrees of freedom
## Multiple R-squared: 0.9898, Adjusted R-squared: 0.9888
## F-statistic: 932.6 on 14 and 134 DF, p-value: < 2.2e-16
# Tendencia cuadrática
T=148
n=12
X.1=gdt(X[,1])
z.1=c(lm(X.1~t+t2)$fitted,predict(lm(X.1~t+t2),data.frame(t=seq(from=T+1, to=T+n),t2=seq(from=T+1, to=T+n)^2)))
plot(z.1,type="l", col="red")
lines(X.1, type="p")
# Armonico 1
X.2.1=gdt(X[,2])
z.2.1=c(lm(X.2.1~cos(2*pi*t/T))$fitted,predict(lm(X.2.1~cos(2*pi*t/T)),data.frame(t=seq(from=T+1, to=T+n))))
plot(z.2.1,type="l", col="red")
lines(X.2.1, type="p")
X.2.2=gdt(X[,3])
z.2.2=c(lm(X.2.2~sin(2*pi*t/T))$fitted,predict(lm(X.2.2~sin(2*pi*t/T)),data.frame(t=seq(from=T+1, to=T+n))))
plot(z.2.2,type="l", col="red")
lines(X.2.2, type="p")
# Armónico 2
X.3.1=gdt(X[,4])
z.3.1=c(lm(X.3.1~cos(4*pi*t/T))$fitted,predict(lm(X.3.1~cos(4*pi*t/T)),data.frame(t=seq(from=T+1, to=T+n))))
plot(z.3.1,type="l", col="red")
lines(X.3.1, type="p")
X.3.2=gdt(X[,5])
z.3.2=c(lm(X.3.2~sin(4*pi*t/T))$fitted,predict(lm(X.3.2~sin(4*pi*t/T)),data.frame(t=seq(from=T+1, to=T+n))))
plot(z.3.2,type="l", col="red")
lines(X.3.2, type="p")
# Pronostico serie de dos armónicos
fit.2=rbs.fit.2$coefficients[1]*z.1+rbs.fit.2$coefficients[2]*z.2.1+rbs.fit.2$coefficients[3]*z.2.2+rbs.fit.2$coefficients[4]*z.3.1+rbs.fit.2$coefficients[5]*z.3.2
plot(ipi)
lines(fit.2,col="red")
Para obtener pronosticos con mayor precision, vamos a crea una serie de funciones que lo que hacer es generar indices para matriz ortogonal, \(W\), con \(m\) adelantos.
MW modificada
En la función MW2, m desfasa la serie original
MW2 <- function(n,m) {
# Author: Francisco Parra Rodriguez
# Some ideas from: Harvey, A.C. (1978), Linear Regression in the Frequency Domain, International Economic Review, 19, 507-512.
# http://econometria.wordpress.com/2013/08/21/estimation-of-time-varying-regression-coefficients/
uno <- as.numeric (m:(n+m-1))
A <- matrix(rep(sqrt(1/n),n), nrow=1)
if(n%%2==0){
for(i in 3:n-1){
if(i%%2==0) {
A1 <- matrix(sqrt(2/n)*cos(pi*(i)*(uno-1)/n), nrow=1)
A <- rbind(A,A1)}
else {
A2 <- matrix(sqrt(2/n)*sin(pi*(i-1)*(uno-1)/n), nrow=1)
A <- rbind(A,A2)
}}
AN <- matrix(sqrt(1/n)*(-1)^(uno+1), nrow=1)
A <- rbind(A,AN)
A
} else {
for(i in 3:n-1){
if(i%%2==0) {
A1 <- matrix(
sqrt(2/n)*cos(pi*(i)*(uno-1)/n), nrow=1)
A <- rbind(A,A1)}
else {
A2 <- matrix(sqrt(2/n)*sin(pi*(i-1)*(uno-1)/n), nrow=1)
A <- rbind(A,A2)
}}
AN <- matrix(
sqrt(2/n)*sin(pi*(n-1)*(uno-1)/n), nrow=1)
A <- rbind(A,AN)
}
}
función gdf transformada
En la función gdf2, m adelanta la serie original
gdf2 <- function(y,m) {
a <- matrix(y,nrow=1)
n <- length(y)
A <- MW2(n,m)
A%*%t(a)
}
función gdt transformada
En la función gdt2, adelanta la serie original
gdt2 <- function(y,m) {
# Author: Francisco Parra Rodriguez
# http://econometria.wordpress.com/2013/08/21/estimation-of-time-varying-regression-coefficients/
a <- matrix(y,nrow=1)
n <- length(y)
A <- MW2(n,m)
t(A)%*%t(a)
}
Utilizando estas nuevas matrices, la serie del IPI regional de Cantabria se pronosticaria con las altas frecuencias de esta forma:
# CREAMOS LA MATRIZ DE REGRESORES FILTRANDO LAS ALTAS FRECUENCIAS CON LA MATRIZ DE HARVEY
n=length(ipi)
M2 <- MW2(length(ipi),12)
z <- predict(lm(ipi~t+t2),data.frame(t=seq(from=11, to=n+10),t2=seq(from=11, to=n+10)^2))
cx <- M2%*%diag(z)
cx <- cx%*%t(M2)
id <- seq(1,n)
S1 <- data.frame(cx)
S2 <- S1[1:abs(2+(n/12)),]
X <- as.matrix(S2)
X <- t(X)
# PRONOSTICO FILTRANDO LAS ALTAS FRECUENCIAS
coef=t(as.matrix(rbs.fit$coefficients))
rbs.fit.3=coef%*%t(X)
dim(rbs.fit.3)
## [1] 1 148
fit.3=gdt2(rbs.fit.3,12)
plot(window(ts(ipi,frequency = 12, start = c(2002, 1)),start = c(2003,1)),type="l",main="IPI.Cantabria",ylab="")
lines(ts(z,frequency = 12, start = c(2003, 1)),type="l",col=2)
lines(ts(fit.3,frequency = 12, start = c(2003, 1)),type="l",col=3)
legend("top", ncol=3,c("ipi","Estimado LM","Estimado RBS"),cex=0.6,bty="n",fill=c(1,2,3))
La regresión en el dominio de la frecuencia tambien puede utilizarse para modelos bivariados. En la libreria descomponer, hay una función “rdf” para realizar dicha regresión.
El algoritmo de calculo “rdf” se realiza en las siguentes fases:
Sea \(x\) un vector n x 1 el modelo transformado en el dominio de la frecuencia esta dado por: \(\hat x= Wx\).
Sea \(y\) un vector n x 1 el modelo transformado en el dominio de la frecuencia esta dado por: \(\hat y= Wy\)
Denominando \(p_j\) el ordinal del cross-periodograma de \(\hat x\) y \(\hat y\) en la frecuencia \(\lambda_j=2\pi j/n\), y \(\hat x_j\) el j-th elemento de \(\hat x\) y \(\hat y_j\) el j-th elemento de \(\hat y\), entonces
\[ \left\lbrace \begin{array}{ll} p_j=\hat x_{2j}\hat y_{2j}+\hat x_{2j+1}\hat y_{2j+1} & \forall j = 1,...\frac{n-1}{2}\\ p_j=\hat x_{2j}\hat y_{2j}& \forall j = \frac{n}{2}-1 \end{array} \right. \]
\[p_0=\hat x_{1}\hat y_{1}\]
Ordena el co-espectro en base al valor absoluto de \(|p_j|\) y genera un índice en base a ese orden para cada coeficiente de fourier.
Calcula la matriz \(Wx_tI_nW^T\) y la ordena en base al indice anterior.
Obtiene \(\dot e=WI_nW^T\dot u\), incluyendo el vector correspondiente al parámetro constante, \((1,0,...0)^n\), y calucula el modelo utilizando los dos primeros regresores de la matriz \(Wx_tI_nW^T\) reordenada y ampliada, calcula el modelo para los 4 primeros, para los 6 primeros, hasta completar los \(n\) regresores de la matriz.
Realiza el Test de Durbin (1967) a los modelos estimados, y selecciona aquellos en donde los \(e_t=W^T\dot e\) están dentro de las bandas elegidas.
Denominando \(p_j\) al ordinal del periodograma de \(\hat a\) en la frecuencia \(\lambda_j=2\pi j/n\), y \(\hat a_j\) el j-th elemento de \(\hat a\), entonces
\[\left\lbrace \begin{array}{ll} p_j=\hat a_{2j}^{2}+\hat a_{2j+1}^{2} & \forall j = 1,...\frac{n-1}{2}\\ p_j=\hat a_{2j}^{2}& \forall j = \frac{n}{2}-1 \end{array} \right.\]
\[p_0=\hat a_{1}^{2}\]
Entonces, el cuadrado de \(\hat a\) puede ser utilizado como un estimador consistente del periodograma de \(a\).
El test de Durbin está basado en el siguiente estadistico:
\[s_j=\frac{\sum_{r=1} ^j p_r}{\sum_{r=1}^m p_r}\]
donde \(m=\frac{1}{2}n\) para \(n\) par y \(\frac{1}{2}(n-1)\) para \(n\) impar.
El estadístico \(s_j\) ha de encontrarse entre unos límites inferior y superior de valores críticos que han sido tabulados por Durbin (1969). Si bien, hay que tener presente que el valor \(p_0\) no se considera en el cálculo del estadístico, esto es, \(p_0=\hat v_1=0\).
A continuación va a realizarse una RBS con datos trimestrales de la productividad y salarios reales en Canada, correspondientes al primer trimestre de 1980 finalizando el cuarto trimestre de 2000. En la libreria “descomponer”, las funciones “gdf” y “gdt” transforman las series del tiempo a la frecuencia y de la frecuencia al tiempo, siguiendo la transformación sugerida por Harvey (1978).
# LEEMOS DATOS
library(vars)
data("Canada")
head(Canada)
## e prod rw U
## 1980 Q1 929.6105 405.3665 386.1361 7.53
## 1980 Q2 929.8040 404.6398 388.1358 7.70
## 1980 Q3 930.3184 403.8149 390.5401 7.47
## 1980 Q4 931.4277 404.2158 393.9638 7.27
## 1981 Q1 932.6620 405.0467 396.7647 7.37
## 1981 Q2 933.5509 404.4167 400.0217 7.13
P <- as.numeric(Canada[, "prod"])
W <- as.numeric(Canada[, "rw"])
# REGRESIÓN MINIMO CUADRADA
summary(lm(W~P))
##
## Call:
## lm(formula = W ~ P)
##
## Residuals:
## Min 1Q Median 3Q Max
## -44.485 -8.761 -1.274 7.755 29.873
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1242.4281 165.0193 -7.529 5.94e-11 ***
## P 4.1273 0.4046 10.200 3.00e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.54 on 82 degrees of freedom
## Multiple R-squared: 0.5593, Adjusted R-squared: 0.5539
## F-statistic: 104 on 1 and 82 DF, p-value: 3.003e-16
# TRANSFORMACION SERIES AL DOMINIO DE LA FRECUENCIA
K <- c(rep(1,84))
P.1 = gdf(P)
W.1=gdf(W)
K.1=gdf(K)
# REGRESIÓN EN EL DOMININO DE LA FRECUENCIA
summary(lm(W.1~0+K.1+P.1))
##
## Call:
## lm(formula = W.1 ~ 0 + K.1 + P.1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -86.668 -4.440 -3.030 -1.072 29.500
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## K.1 -1242.4281 165.0193 -7.529 5.94e-11 ***
## P.1 4.1273 0.4046 10.200 3.00e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.54 on 82 degrees of freedom
## Multiple R-squared: 0.9988, Adjusted R-squared: 0.9988
## F-statistic: 3.383e+04 on 2 and 82 DF, p-value: < 2.2e-16
# REGRESION EN EL DOMINIO DE LA FRECUENCIA FILTRANDO LAS FRECUENCIAS RELEVANTES
rdf.mod=rdf(W,P)
str(rdf.mod)
## List of 6
## $ datos :'data.frame': 84 obs. of 4 variables:
## ..$ Y : num [1:84] 386 388 391 394 397 ...
## ..$ X : num [1:84] 405 405 404 404 405 ...
## ..$ F : num [1:84] 395 391 387 391 401 ...
## ..$ res: num [1:84] -9.31 -2.58 3.85 2.57 -3.98 ...
## $ Fregresores: num [1:84, 1:16] 1 0 0 0 0 0 0 0 0 0 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:84] "X1" "X2" "X3" "X4" ...
## .. ..$ : chr [1:16] "C" "1" "2" "3" ...
## $ Tregresores: num [1:84, 1:16] 0.109 0.109 0.109 0.109 0.109 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr [1:16] "C" "1" "2" "3" ...
## $ Nregresores: num 16
## $ sse : num 764
## $ gcv : num 13.9
plot(ts(W,frequency = 4, start = c(1980, 1)),type="l",main="Salarios reales.Canada",ylab="")
lines(ts(lm(W~P)$fitted, frequency = 4, start = c(1980, 1)), type="l", col=2)
lines(ts(rdf.mod$datos$F, frequency = 4, start = c(1980, 2)), type="l", col=3)
legend("top", ncol=3, c("W","Estimado LM","Estimado RBS"), cex=0.6, bty="n", fill=c(1,2,3))
La mayoría de los métodos de ML, no tienen conciencia del tiempo. Por el contrario, consideran que las observaciones son independientes e idénticamente distribuidas. Obviamente, esta suposición se viola en los datos de series de tiempo que se caracterizan por la dependencia en serie.
Los métodos basados en el árbol de decisión, por ejemplo, no pueden predecir una tendencia, es decir, no se extrapolan. Los árboles operan mediante reglas que dividen recursivamente el espacio de entrada. Por lo tanto, no pueden predecir valores que se encuentren fuera del rango de valores del objetivo en el conjunto de entrenamiento. Pero utilizando transformaciones y diferenciaciones pueden hacerse pronósticos de series de tiempo con bosques aleatorios (https://www.statworx.com/de/blog/time-series-forecasting-with-random-forest/).
Esencialmente, una serie de tiempo (univariante) es un vector de valores indexados por tiempo. Para que sea “aprendible”, necesitamos hacer un preprocesamiento. Esto puede incluir algunos o todos los siguientes:
• Transformaciones estadísticas (transformación Box-Cox, transformación logarítmica, etc.) • Detrending (diferenciación, STL, etc.) • Funciones de retardo de tiempo • Ingeniería de características (retrasos, estadísticas continuas, términos de Fourier, variables de tiempo, etc.)
Vamos a utilizar la serie de pasajeros en lineas aereas para realizar este ejercicio.. El pronostico de una serie temporal mediante estas técnicas requiere transformar la serie hasta hacerla estacionaria. Con nsdiffs elegimos el orden de diferenciación para hacerla estacionaria en media, y tomamos el logaritmo para que sea estacionaria en varianza.
ipi<-ts(ipi,c(2000,1),frequency=12)
x<-window(ipi, end = c(2010, 12))
# Buscamos el mejor orden de diferenciación
n_diffs <- nsdiffs(x)
# Realizamos una transformación logaritmica
x <- x %>%
log() %>%
diff(n_diffs)
# Respresentamos los resultados
plot(x)
Construimos una matriz con la función R “embed”. Cada fila de la matriz resultante consta de secuencias x [t], x [t-1], …, x [t-dimension + 1], donde t es el índice original de x. Si x es una matriz, es decir, x contiene más de una variable, entonces x [t] consiste en la tth observación en cada variable. En en ejemplo la primera columna empieza con el dato de Julio de 2000 (seis meses adelante), la siguiente con el dato de junio de 2000, y así sucesivamente. En consecuencia, en la ultima estaría la serie original.
lag_order <- 6 # numero de meses de desfase (seis meses)
horizon <- 12 # the forecast horizon (12 meses)
x_mbd <- embed(x, lag_order + 1) # embedding magic!
Seleccionamos dos muestras, en la de entrenamiento están los de 2000 a 2010, y en la de test los de 2011.
y_train <- x_mbd[, 1] # the target
X_train <- x_mbd[, -1] # everything but the target
y_test <- window(ipi, start = c(2011, 1), end = c(2011, 12)) # the year 2012
X_test <- x_mbd[nrow(x_mbd), c(1:lag_order)] # the test set consisting
# of the six most recent values (we have six lags) of the training set. It's the
# same for all models.
Estimamos un modelo con randomForest.
library(randomForest)
## randomForest 4.6-14
## Type rfNews() to see new features/changes/bug fixes.
forecasts_rf <- numeric(horizon)
for (i in 1:horizon){
# set seed
set.seed(2019)
# Estimo el modelo
fit_rf <- randomForest(X_train, y_train)
# Realizo los prnosticos para la muestra test
forecasts_rf[i] <- predict(fit_rf, X_test)
# Reestructuramos repetidamente los datos de entrenamiento para reflejar la distancia de tiempo correspondiente al horizonte de pronóstico actual.
y_train <- y_train[-1]
X_train <- X_train[-nrow(X_train), ]
}
Dada la transformación logarítmica realizada, se realiza la transformación inversa. Es decir, primero revertimos la diferenciación y luego la transformación logarítmica. Hacemos esto exponiendo la suma acumulativa de nuestros pronósticos transformados y multiplicando el resultado con la última observación de nuestra serie de tiempo. En otras palabras, calculamos:
$ y_{t+H} = y_{t}exp(\sum_{h = 1}^H \tilde{y}_{t+h}\right)$
# exponenciamos la suma acumulativa
exp_term <- exp(cumsum(forecasts_rf))
# extraemos la ultima obsrvación de nuestra base de datos (y_t)
last_observation <- as.vector(ipi[144])
# calculamos las prdiciones resultantes
backtransformed_forecasts <- last_observation * exp_term
# convertimos a formato ts y lo representamos
y_pred <- ts(
backtransformed_forecasts,
start = c(2012, 1),
frequency = 12
)
IPI.f=ts(c(ipi,y_pred),frequency = 12,start=c(2000,1))
# Representamos la serrie con los resultados estimados
plot(IPI.f)
La RNA es una técnica de inferencia basada en Machine Learnig (aprendizaje máquina). Existen distintos modelos de redes neuronales, los más utilizados son el “Perceptron” y el “backpropagation”.
Hay que tener presente que una red neuronal se considera una “caja negra”, donde lo importante es la predicción, y no cómo se hace.
El proceso incluye, como ocurre con este tipo de técnicas, una fase de entrenamiento (training) para la optimización de las predicciones, y otra de test o prueba.
Los elementos de la red son:
Los nodos (neuronas) de la capa de entrada, se combinan con los nodos de la capa oculta mediante la función de combinación, que suele ser una combinación lineal de los nodos de entrada mediante los pesos. A las neuronas de las capas ocultas, se les aplica una función de activación, que suele ser la tangente hiperbólica de la anterior combinación más un parámetro por nodo oculto, con la que estimamos las neuronas de la capa de salida, y sus errores.
El siguiente script utiliza el package neuralnet para hacer una regresión, utilizando el ejemplo del IPI utilizados en el ejemplo anterior. En lo relativo al modelo de red neuronal que se va a estimar, destacar:
El parametro threshol = 0.05 indica que las iteraciones se detendrán cuando el “Cambio” del error sea menor a 5% entre una iteracion de optimizacion y otra. Este “Cambio” es calculado como la derivada parcial de la funcion de error respecto a los pesos.
El parámetro algorithm = “rprop+” refiere al algoritmo “Resilient Backpropagation”, que actualiza los pesos considerando únicamente el signo del cambio, es decir, si el cambio del error es en aumento (+) o disminución (-) entre una iteración y otra. Para detalles ver: https://en.wikipedia.org/wiki/Rprop
El parámetro hidden = 1 especifica una capa oculta con 1 neuronas.
#LIBRERIAS Y DATOS
library(MASS); library(neuralnet); library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:randomForest':
##
## margin
set.seed(65)
# NORMALIZACION DE VARIABLES
datos_nrm <- as.data.frame(x_mbd)
names(datos_nrm)=c("x1","x2","x3","x4","x5","x6","IPI")
train_nrm <- datos_nrm[1:113, ]
test_nrm <- datos_nrm[113:125,, ]
# FORMULA
nms <- c("x1","x2","x3","x4","x5","x6","IPI")
frml <- as.formula(paste("IPI ~", paste(nms[!nms %in% "IPI"], collapse = " + ")))
# MODELO
modelo.nn <- neuralnet(frml,data=train_nrm,threshold = 0.05,hidden=1,algorithm = "rprop+")
# PREDICCION
pr.nn <- compute(modelo.nn,within(test_nrm,rm(IPI)))
# Red
plot(modelo.nn)
# exponenciamos la suma acumulativa
exp_term <- exp(cumsum(pr.nn$net.result))
# extraemos la ultima obsrvación de nuestra base de datos (y_t)
last_observation <- as.vector(ipi[144])
# calculamos las prdiciones resultantes
backtransformed_forecasts <- last_observation * exp_term
# convertimos a formato ts y lo representamos
y_pred <- ts(
backtransformed_forecasts,
start = c(2012, 1),
frequency = 12
)
IPI.f=ts(c(ipi,y_pred),frequency = 12,start=c(2000,1))
# Representamos la serrie con los resultados estimados
plot(IPI.f)
Las técnicas de machine leaning tambien pueden aplicarse a la clasificación o agrupación de las series temporales en base a sus características comunes. Se trataría de dividir el data-set de series temporales en grupos basados en similitudes o distancias, de modo que las series temporales de un mismo grupo tengan la misma naturaleza dinámica. Para la agrupación de series de tiempo, el primer paso es elaborar una métrica de distancia ó similitud apropiada, y luego, en el segundo paso, utilizar técnicas de agrupación existentes, como k-means, clústering jerárquico, clústering basado en densidad o clústering subespacial.
El objetivo es formar grupos homogéneos de series temporales, con una similitud mínima entre grupos y máxima entre grupos. Para lo cual precisamos:
Medida de distancia
Prototipo (resume las características de todas las series en un grupo)
Algoritmo de clúster (particional o jerárquico más común)
Para encontrar estructuras de agrupamiento, de series temporales la metrica más utilizada es Dynamic Time Warping (DTW) (Sakoe & Chiba, 1978). Esta distancia es una técnica desarrollada en el ambito de reconocimiento de la voz, cuyo objetivo es comparar dos emisiones vocales aisladas a fin de determinar si corresponden o no a la misma palabra. El DTW se diseño para comprobar si existe una sincronización temporal (alineamiento temporal) entre dos grupos fónicos. La falta de alineamiento, por lo general, no obedece a una ley fija (p. e., un retardo constante), sino que se da de forma heterogénea, produciéndose así variaciones localizadas que aumentan o disminuyen la duración del tramo de análisis.
El problema de calcular una función de alineamiento se resuelve en el DTW mediante técnicas de programación dinámica, motivo por el que se conoce a esta técnica como Alineamiento Temporal Dinámico.
En general, el funcionamiento del algoritmo se basa en la búsqueda de un camino óptimo de coincidencia entre dos secuencias con ciertas restricciones. Las secuencias son transformadas no linealmente en el tiempo, de modo que son comprimidas o expandidas en el tiempo para que tengan el mismo largo, y así poder compararlas punto a punto.
De forma general, el algoritmo DTW consiste en una serie de pasos que se explican a continuación: Se requieren dos matrices para el cálculo:
D matriz de distancias.
G matriz de programación dinámica, para obtener el camino mínimo entre el punto final y el inicial.
Se parte de 2 vectores: \(A= [a_1, a_2, a_3, .. , a_i , .., a_M]\) y \(B= [b_1, b_2, b_3, .. , b_j , .. , b_N]\)
Se denota como \(C= [c(1), c(2), .., c(k), .., c(K)]\) a la función de alineamiento, donde cada \(c(k)= [i(k) j(k)]\)tiene una matriz de coste \(d[c(k)]\), que muestra la diferencia entre los elementos comparados.
La función de coste tomando como medida la distancia euclieda, será \(d[c(k)]= (a_{i(k)}-b_{j(k)})^2\) y la función de alineamiento que minimice el coste total será:
\[D(C)=\sum_{k=1}^K d[c(k)] w(k)\]
donde \(W_k\) es un coeficiente de ponderación.
La función de alineamiento debe cumplir una serie de restricciones:
Monotonicidad: El camino debe tener el sentido de izquierda a derecha, y de arriba debajo de la matriz G.
Continuidad: El paso de un nodo al siguiente debe hacerse de modo que no haya nodos intermedios.
Frontera: El principio y el final deben coincidir con ciertos puntos, independientemente del camino seguido.
Ventana: Condición de ajuste (límite global): \(|i(k)-j(k)|\leq \Delta\), siendo \(\Delta\) un entero positivo.
Pendiente: Se aplican restricciones (límites locales) sobre las pendientes del camino para encontrar el camino óptimo.
y una serie de restricciones locales ((Sakoe & Chiba,1978).
El algoritmo DTW puede construirse con una medida de distancia eucliedea u otra medidad de distancia (por ejemplo,manhatan)
El principal problema de esta medida de similitud es el gran coste computacional que supone, ya que al tratarse de programación dinámica dadas dos cadenas de longitud \(N\) y \(M\) respectivamente el coste computacional del algoritmo es del orden de \(N x M\).
En el ejemplo, se utiliza un conjunto de datos de la serie temporal de gráficos de control sintético, que contiene 600 ejemplos de gráficos de control. Cada gráfico de control es una serie de tiempo con 60 valores. Hay seis clases:
Los datos y el script se ha obtenido de :http://www.rdatamining.com/examples/time-series-clústering-classification.
# lectura de datos
sc <- read.table("http://kdd.ics.uci.edu/databases/synthetic_control/synthetic_control.data", header=F, sep="")
# Selección aleatoria de variables
n <- 10
s <- sample(1:100, n)
idx <- c(s, 100+s, 200+s, 300+s, 400+s, 500+s)
sample2 <- sc[idx,]
observedLabels <- c(rep(1,n), rep(2,n), rep(3,n), rep(4,n), rep(5,n), rep(6,n))
# calculo de distancias DTW
library(dtw)
## Loading required package: proxy
##
## Attaching package: 'proxy'
## The following object is masked from 'package:Matrix':
##
## as.matrix
## The following objects are masked from 'package:stats':
##
## as.dist, dist
## The following object is masked from 'package:base':
##
## as.matrix
## Loaded dtw v1.20-1. See ?dtw for help, citation("dtw") for use in publication.
distMatrix <- dist(sample2, method="DTW")
# clúster jerrárquico
hc <- hclust(distMatrix, method="average")
plot(hc, labels=observedLabels, main="",cex=0.5)
Introducción a R: https://www.datacamp.com/courses/introduccion-a-r/?tap_a=5644-dce66f&tap_s=10907-287229
Akaike, H. (1974), “A new look at the statistical model identification”, IEEE Transactions on Automatic Control AC-19, pp. 716–723.
Ashley, Richard A. (1984), “A Simple Test for Regression Parameter Instability,” Economic Inquiry 22, No. 2, 253-267.
Aznar, A. y Trívez, F. J. (1993), Métodos de Predicción en Economía II: Análisis de Series Temporales, Ed. Ariel.
Beltran, Mauricio (2015): “Diseño e implementación de un nuevo clasificador de préstamos bancarios a través de minería de datos”. Tesis Doctoral. Departamento de Economía Aplicada y Estadística. UNED.
Breiman, L., Friedman, J. H., Olshen, R. A., and Stone, C. J. (1984). Classification and Regression Trees. Chapman & Hall/CRC.
Durbin, J. y Koopman, S. J. (2001), Time Series Analysis by State Space Models (Oxford Statistical Science Series, nº 24), Oxford University Press.
Durbin, J. y Watson, G. S. (1950), “Testing for Serial Correlation Least Squares Regressions”, Biometrika, vol 37. pp. 409-428.
Engle, Robert F. (1974), Band Spectrum Regression,International Economic Review 15,1-11.
Gallant, A. R.(1981) “On the Bias in Flexible Functional Forms and an Essentially Unbiased Form.” J. Econometrics 15(1981):211-45.
Gallant, A. R.(1984) “The Fourier Flexible Form.” Amer. J. Agr. Econ. 66(1984):204-15
Greene, W. H. (2000), Análisis Econométrico, Ed. Prentice Hall
Gujarati, D. (1997), Basic Econometrics, McGraw-Hill
Gujarati, D. (2003), Econometría, Ed. McGraw-Hill
Hair, J.F., Anderson R.E., Tatham R.L., Black W.C. (2008): Análisis Multivariante. 5ª Edición. Pearson, Prentice Hall.
Hastie, T., Tibshirani R. and Friedman, J. (2008), The Element of Statistical Learning. Data Minining, Inference and Prediction. Second Edition. Springe.
Harvey, A.C. (1978), Linear Regression in the Frequency Domain, International Economic Review, 19, 507-512.
Johnston, J. (1997), Econometric Methods. McGraw-Hill.
Johnston, J. y Dinardo, J. (2001), Métodos De Econometría, Ed. Vicens-Vives 3ª Ed.
Loh, W.-Y. and Shih, Y.-S. (1997). Split selection methods for classification trees, Statistica Sinica 7: 815–840.
Metropolis N., Rosenbluth A., Rosenbluth M., Teller A., and Teller E. (1953), Equations of state calculations by fast computing machines.J. Chem. Phys. 21, 1087{1091.
Mood, A. M. (1950), Introduction to the Theory of Statistics, McGraw-Hill.
Muñoz A., Parra F. (2007): Econometría Aplicada. Ediciones Académicas
Newey WK, West KD (1987). “A Simple, Positive-Definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix.” Econometrica, 55, 703–708.
Novales, A. (1993), Econometría, 2ª Edición, McGraw-Hill.
Parra, F.(2016): Econometria Aplicada I. https://econometria.files.wordpress.com/2014/11/parra-econometria-aplicada-i1.pdf
Parra, F.(2016): Econometria Aplicada II. https://econometria.files.wordpress.com/2015/01/parra-econometria-aplicada-ii5.pdf.
Parra, F. Vicente, J.A. (2019): Apuntes modulo3: Análisis de Datos Multivariantes I. Master de Data Science y Big Data aplicados a la Economía y a la Administración y Dirección de Empresas. UNED.
Pindyck, R. S. y Rubinfield, D. L. (1976), Econometric Models and Economic Forecast, McGraw-Hill.
Pindyck, R. S. y Rubinfield, D. L. (1980), Modelos Econométricos, Ed. Labor.
Pulido, A. (1983), Modelos Econométricos, Ed. Pirámide
Rosenblatt, F. (1958): The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain, Cornell Aeronautical Laboratory, Psychological Review, v65, No. 6, pp. 386–408. doi:10.1037/h0042519.
SAKOE; CHIBA. Dynamic Programming Algorithm Optimization for spoken word recognition, 1978.
Stewart, M. y Wallis, K. (1984), Introducción a la Econometría, Alianza Editorial.
Tan, Hui Boon & Ashley, Richard, 1999. “Detection And Modeling Of Regression Parameter Variation Across Frequencies,” Macroeconomic Dynamics, Cambridge University Press, vol. 3(01), pages 69-83, March.
Venables, W. N. y Ripley, B. D. (2002), Modern Applied Statistics with S. 4ª Ed., Springer.
White, H. (1980), An Heteroskedastic-Consistent Regression with Independent Observation. Econometrica 48, pp. 817-838.