Modelo autoregresivo lineal de 1 er orden con Google Earth Engine (GEE)

En un artículo anterior se consideró la posibilidad de un modelo autoregresivo lineal de 1 er orden con lenguage R y en éste con Java Script en la API de Google Earth Engine (GEE). Si se trabaja con series de tiempo y tres variables correlacionadas, hay que encontrar la manera de generar los respectivos residuales. Si lo hacemos para un día, podemos tenerlos para todos los días que se deseen. Dadas las matrices de covarianza para lag 0 y lag 1 (respectivamente M0 y M1), se requiere encontrar previamente dos matrices, A y B (que se encuentran en la ecuación de generación de residuales y que no se considera aquí), que vienen determinadas por:

A = M1.M0-1
C.L.CT = Z = B.BT = M0 – M1.M0-1.M1T

donde -1 y T se refieren, respectivamente, a la inversa y a la transpuesta de una matriz. No obstante, para la segunda ecuación tienen que decirme, adicionalmente, como se determina B; no B.BT. Para ello se requiere análisis espectral donde se sabe que B.BT = Z es simétrica, con coeficientes reales, por lo que admite una descomposición en matrices de autovectores (C) y autovalores (L) con coeficientes reales (Z = C.L.CT). Finalmente, también tenemos que saber que B = Z1/2 y que Z1/2 = C.L1/2.CT (1/2 hace referencia a la raíz cuadrada de una matriz).

Si asumimos como válidas las matrices de covarianza que tenemos a continuación (Richardson, 1981):

Para lag 0 (M0):

1.000  0.697  0.249
0.697  1.000 -0.192
0.249 -0.192  1.000

Para lag 1 (M1):

0.670  0.632  0.058
0.532  0.700 -0.075
0.102 -0.091  0.240

la implementación de las ecuaciones anteriores en el Code Editor de GEE es mucho más intuitiva que en R por lo que el código luce como a continuación. Es de hacer notar que la documentación para generar el código fue la que se encuentra en el propio editor de GEE para los objetos de tipo ee.Array y el documento siguiente para la obtención de autovalores y autovectores.

var M0 = ee.Array([
[1.000,  0.697,  0.249],
[0.697,  1.000, -0.192],
[0.249, -0.192,  1.000]
]);

var M1 = ee.Array([
[0.670,  0.632,  0.058],
[0.532,  0.700, -0.075],
[0.102, -0.091,  0.240]
]);

var A = M1.matrixMultiply(M0.matrixInverse());

print("A", A);

var Z = M0.subtract(M1.matrixMultiply(M0.matrixInverse()).matrixMultiply(M1.matrixTranspose()));

print("Z", Z);

var eigen = Z.eigen();

var eigenValues = eigen.slice(1, 0, 1);

var L_sqrt = eigenValues.matrixToDiag().pow(0.5);

print("L_sqrt", L_sqrt);

var C = eigen.slice(1, 1).matrixTranspose();

print("C", C);

var B = C.matrixMultiply(L_sqrt).matrixMultiply(C.matrixTranspose());

print("B", B);

var verif = B.matrixMultiply(B.matrixTranspose());

print("Z", verif);

Después de ejecutado el código anterior en el Code Editor de GEE, las matrices A y B obtenidas en el formato propio de GEE (aunque con mayor número de decimales) fueron idénticas a las producidas con R y que corresponden a las siguientes:

A
0.43701374  0.3298025 0.01250566
0.05659762  0.6680735 0.03917730
0.21262845 -0.2110682 0.14653042
B
0.6618472  0.1879894  0.1570305
0.1879894  0.6767792 -0.1086588
0.1570305 -0.1086588  0.9420574
Esta entrada fue publicada en Google Earth Engine. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s