Estoy leyendo esto papel sobre el ajuste de un modelo L1TF a los datos mediante programación cuadrática. En la sección 7.4 se indica cómo se podría añadir estacionalidad al modelo, pero no se profundiza mucho en ello. Estoy tratando de terminar esta línea de pensamiento sin mucha experiencia en la optimización convexa.
Lo que sugieren es añadir estos valores "s" como parámetros adicionales que están restringidos a ser periódicos y también tienen media cero. De lo contrario, el problema no tendrá una solución única. Hasta ahora tiene sentido.
Pero, ¿cómo se procede? Si dejas estas condiciones sobre s como restricciones externas e intentas escribir la forma cuadrática para el vector combinado (x,s) obtienes una matriz singular como supongo que deberías ya que sin esas restricciones el problema está mal definido. Pero si la forma cuadrática es singular, no puedes proceder de la manera normal usando las fórmulas para el problema dual porque implica la inversa de esa forma cuadrática que no existe si es singular.
Entonces, ¿cómo debo proceder? ¿Debo trasladar todas las restricciones sobre s directamente al cálculo de la forma cuadrática extendida? ¿Hay otra manera de construir el problema dual para este caso?
Imagino que se encontraría con este mismo problema en el caso simplificado de ajustar una única tendencia con estacionalidad, así que imagino que se sabe bien cómo hacerlo.
Actualización:
Aquí está mi intento de trabajar las restricciones en s directamente en la forma cuadrática. Digamos que el tamaño de x es 5 y el período de estacionalidad es 3, por ejemplo. Es decir, hay dos parámetros adicionales s0, s1. El tercero s2 = -s1-s2 se elimina como parámetro pero su efecto sigue apareciendo en la forma cuadrática como sigue.
Llamamos P a la matriz de 7x7. Será simétrica. El primer bloque de 5x5 es simplemente la matriz identidad de 5x5, ya que ninguno de los valores de x depende de los demás. Las filas/col que son =0 mod 3 tienen un 1 en la 6ª fila/col y un cero en la 7ª. Las que son =1 mod 3 tienen un 0 en la 6ª y un 1 en la 7ª. Las que son = 2 mod 3 tienen -1 en la 6ª y 7ª fila.
A continuación, la matriz P y su inversa P_inv
In [413]: print P
[ 1.00e+00 0 0 0 0 1.00e+00 0 ]
[ 0 1.00e+00 0 0 0 0 1.00e+00]
[ 0 0 1.00e+00 0 0 -1.00e+00 -1.00e+00]
[ 0 0 0 1.00e+00 0 1.00e+00 0 ]
[ 0 0 0 0 1.00e+00 0 1.00e+00]
[ 1.00e+00 0 -1.00e+00 1.00e+00 0 -1.00e+00 -1.00e+00]
[ 0 1.00e+00 -1.00e+00 0 1.00e+00 -1.00e+00 0.00e+00]
In [414]: print P_inv
[ 8.33e-01 1.67e-01 -1.67e-01 1.67e-01 -1.67e-01 1.67e-01]
[ 1.67e-01 8.33e-01 1.67e-01 -1.67e-01 1.67e-01 -1.67e-01]
[-1.67e-01 1.67e-01 8.33e-01 1.67e-01 -1.67e-01 1.67e-01]
[ 1.67e-01 -1.67e-01 1.67e-01 8.33e-01 1.67e-01 -1.67e-01]
[-1.67e-01 1.67e-01 -1.67e-01 1.67e-01 8.33e-01 1.67e-01]
[ 1.67e-01 -1.67e-01 1.67e-01 -1.67e-01 1.67e-01 -1.67e-01]
Así que es invertible, lo cual es bueno y entonces supongo que se puede proceder como antes, usando esta matriz de 7x7 en lugar de la matriz identidad de 5x5. Esto es fácilmente generalizable a otros tamaños. Veamos cómo funciona...