Análisis/Predicción de dos series temporales utilizando correlación cruzada (CCF).

PREDICCIÓN USANDO CORRELACIÓN CRUZADA

Si tenemos un problema de determinación de posibles relaciones adelantadas (leading) o retrasadas (lagging) entre dos series X(t) e Y(t) según el modelo: Y(t)=A*X(t-l)+W(t), observaremos que la serie X(t) “conduce” a la serie Y(t) para l>0 o está retrasado respecto a la serie Y(t) si l<0. style="font-weight: bold;">función de covarianza cruzada (ccvf):
gamma_yx(h)=E[Y(t+h)X(t)]
=A*E[X(t+h-l)X(t)]+E[W(t+h)X(t)]
=A*gamma_x(h-l)

La función de covarianza cruzada se parecerá a la autocovarianza de la serie X(t), con un pico en el lado positivo si X(t) conduce a Y(t) y un pico en el lado negativo si X(t) está retrasado respecto a Y(t). El gráfico de la función de correlación cruzada en función del lag, se llama correlograma cruzado. Nota: gamma_xy(h)=gamma_yx(-h).
Cuando tenemos muchas variables preferimos referirnos a la función de auto-covarianza cruzada (acvf) de cada una más que a la ccvf del par, por ejemplo gamma_xx(h).
La función de correlación cruzada (ccf) se define como:
rho_xy(h)=gamma_xy(h)/(sigma_x*sigma_y)

Estimaciones ccvf y ccf muestrales:
Ccvf: c_xy(h)=(1/n)*sum[(X(t-h)-mean(X))(Y(t)-mean(y))]
Acf: r_xy(h)=c_xy(h)/sqrt[c_xx(0)*c_yy(0)]

Teórico
Sean X(t) e Y(t) estacionarias en media y varianza, las variables pueden estar correlacionadas serialmente y correlacionadas entre sí en diferentes lags. El modelo combinado es estacionario de segundo orden si todas estas correlaciones dependen solo del lag, por ello definimos el ccf como función del lag h.
El cff puede calcularse para 2 series cualesquiera que se solapen en el tiempo, pero si ambas tienden tendencias o efectos estacionales similares, estos dominarán el ccf. Por eso el ccf muestral se define para procesos estocásticos estacionarios, necesitando eliminar la tendencia y efectos estacionales antes de estudiar la ccf.
Si las variables son independientes esperamos que el 5% de las correlaciones muestrales caigan fuera de las líneas punteadas.

Ejemplo teórico
Si X es la entrada de algún sistema físico e Y la respuesta, la causa precede el efecto, Y estará retrasado respecto a X (Y will lag X), y el ccf será 0 para h positivos, y habrán picos en el ccf en lags negativos.

Ejemplo práctico en R: Análisis de la correlación cruzada entre las aprobaciones de construcción y la actividad misma.

 #Actividad de la construcción: series temporales de aprobaciones para la construcción y la actividad misma.
www="http://www.massey.ac.nz/~pscowper/ts/ApprowActiv.dat"
Build.dat=read.table(www,header=T); attach(Build.dat)
App.ts=ts(Approvals,start=c(1996,1),freq=4)
Act.ts=ts(Activity,start=c(1996,1),freq=4)
ts.plot(App.ts,Act.ts,lty=c(1,3))

#función acf y ccf para la ST de aprobaciones y ST de actividad, en la construcción.
acf(ts.union(App.ts,Act.ts)) #grafica la función de autocorrelación para cada muestra (acf, superior-izquierda e inferior-derecha) y la función de correlación cruzada de ambas series(ccf, superior-derecha e inferior-izquierda -cuantifica la relación entre las variables-)
print(acf(ts.union(App.ts,Act.ts)))
#La unidad del lag es de 1 año, por lo que la correlación para el lag de 1 cuatrimestre es aparece en .25.
#si las variables son independientes esperamos que el 5% de las correlaciones muestrales caigan fuera de las líneas punteadas.
#varias correlaciones cruzadas en lags negativos cruzan la línea, indicando que que la serie de aprobaciones precede a la actividad.
#cff puede calcularse para 2 series cualesquiera que se solapen en el tiempo, pero si ambas tienden tendencias o efectos estacionales similares, estos dominarán el ccf. por eso el ccf muestral se define para procesos estocásticos estacionarios. Necesitamos eliminar la tendencia y efectos estacionales antes de estudiar la ccf.

#función acf y ccf para de las ST sin tendencia (usamos decompose, el método de media móvil centrada para 4 cuatrimestres).
app.ran=decompose(App.ts)$random ; app.ran.ts=window(app.ranm,start=c(1996,3))
act.ran=decompose(Act.ts)$random ; act.ran.ts=window(act.ran,start=c(1996,3))
acf(ts.union(app.ran.ts,act.ran.ts))
print(acf(ts.union(app.ran.ts,act.ran.ts)))
ccf(app.ran.ts,act.ran.ts) #gráfico de correlación cruzada para las componentes aleatorias de las ST luego de utilizar "decompose"
#observamos nuevamente una relación retrasada (lagged).

Created by Pretty R at inside-R.org

Comentarios