|
Autocorrelación y correlación cruzada en series de tiempo con C++ en Linux
Publicado el: 04-17-2008 @ 07:18 pm
Hace algún tiempo, programé en C++ un modelo autoregresivo linear de primer orden para generar elementos climáticos de temperatura máxima, temperatura mínima y radiación solar. Los valores producidos estaban "acoplados" a datos de precipitación comprendidos entre 1970 y 1994 (en total 9131 valores). Las matrices de covarianza empleadas fueron: Para lag 0: 1.000 0.697 0.249 0.697 1.000 -0.192 0.249 -0.192 1.000
Para lag 1: 0.670 0.632 0.058 0.532 0.700 -0.075 0.102 -0.091 0.240
En consecuencia, el modelo produjo 9.131 valores para cada elemento climático cuyas medias y desviaciones estándares mensuales se correspondían ajustadamente con los valores reales. Sin embargo, en esa época no pude (o no quize) encontrar la forma para analizar las series de tiempo en cuanto a si en realidad presentaban la autocorrelación y la correlación cruzada que sugerían las matrices de covarianza. Recientemente, me decidí a quitarle las tendencias a cada una de las series de tiempo y producir residuales con media cero y varianza uno. Me señalaron que Matlab me podría ayudar a procesar las series de residuales para encontrar los coeficientes de autocorrelación y correlación cruzada pero cuando le introduje esos "pequeños vectores" de 9.131 valores (equivalente a 25 años de registro) Matlab se "desmayó". Ni siquiera con 10 años de registro y, finalmente, terminé probando con sólo 5 años (para mantener las series balanceadas). No obstante, por más que indagué, no pude encontrar que Matlab me determinara los coeficientes de correlación cruzada para lag 1; sólo autocorrelación para lag 1 y correlación cruzada para lag 0 (me faltaban, por tanto, 6 valores). Cansado de buscar que Matlab hiciera lo que yo quería (tardé como dos días en ello) tomé la decisión de elaborar yo mismo el código en C++ (fue lo primero que debí haber hecho) y en un momento tenía todos los coeficientes de correlación cruzada calculados; incluidos los de autocorrelación como caso particular. Aquí tenemos el código para Linux :
el cual, con muy pequeñas modificaciones, corre en Windows XP usando el Dev-C++ con licencia GNU. Aquí tenemos una imagen de como corre en Linux Debian:  donde se aprecia el valor de r1(3,1) = 0,100 y r1(1,3) = 0,063 que concuerdan aceptablemente con los valores respectivos de 0,102 y 0,058 que se encuentran en la matriz de covarianza para lag 1.

Ultima actualización el 04-21-2008 @ 08:09 pm
|