The VARMA (Vector Autoregressive Moving Average) model is a multivariate time series analysis model that can be used to examine the relationships among several variables. It is a generalization of the ARIMA model, which is used for univariate time series analysis. The VARMA model is represented by a set of equations that describe the relationships between the variables over time. The model can be estimated using the conditional maximum likelihood estimation method. The output of the model includes various parameters and statistics that describe the model and its fit to the data. The model can also be used to compute the impulse response function, which measures the response of the variables to a shock in one of the variables.
------

SET SCHEMA DM_PAL;

DROP TABLE PAL_VARMA_DATA_TBL;
CREATE COLUMN TABLE PAL_VARMA_DATA_TBL("timestamp" INTEGER, "Y1" DOUBLE, "X" DOUBLE, "Y2" DOUBLE);

INSERT INTO PAL_VARMA_DATA_TBL VALUES(1 ,9.8,6.4,8.2);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(2 ,9.7,6.4,8.1);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(3 ,9.8,6.3,8);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(4 ,9.7,6.2,7.9);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(5 ,9.6,6.3,7.8);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(6 ,9.6,6.8,7.6);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(7 ,9.6,6.8,7.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(8 ,9,6.8,7.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(9 ,9.2,6.8,7.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(10,9.2,6.7,7.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(11,9.1,6.6,7.6);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(12,9,6.6,7.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(13,8.8,6,7.2);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(14,8.8,6,7.7);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(15,8.7,5.9,7);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(16,8.3,5.8,6.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(17,8.2,5.9,6.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(18,8.2,6.3,6.3);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(19,8.2,6.3,6.1);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(20,8.4,6.4,6);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(21,8.1,6.4,6.1);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(22,7.8,6.5,6);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(23,7.7,6.5,5.9);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(24,7.5,6.3,5.9);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(25,7.2,6.5,5.7);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(26,7.2,6.4,5.8);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(27,7,6.3,5.8);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(28,7,6,5.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(29,6.9,6.2,5.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(30,7,5.9,5.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(31,7.1,6,5.3);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(32,7.4,6,5.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(33,6.9,5.8,5.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(34,6.8,5.8,5.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(35,7,5.6,5.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(36,7.1,5.6,5.4);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(37,7,5.3,5.7);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(38,7,5.3,5.6);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(39,7.2,5.4,5.5);
INSERT INTO PAL_VARMA_DATA_TBL VALUES(40,7.6,5.5,5.8);


DROP TABLE PAL_VARMA_MODEL_TBL;
CREATE COLUMN TABLE PAL_VARMA_MODEL_TBL ("INDICES" INTEGER, "CONTENT" NVARCHAR(5000));

DROP TABLE PAL_VARMA_FIT_TBL;
CREATE COLUMN TABLE PAL_VARMA_FIT_TBL ("colNAME" NVARCHAR(100), "INDICES" INTEGER, "FITTED" DOUBLE, "RES" DOUBLE);

DROP TABLE PAL_VARMA_IRF_TBL;
CREATE COLUMN TABLE PAL_VARMA_IRF_TBL( "colNAME" NVARCHAR(100), "colNAME2" NVARCHAR(100), "INDICES" INTEGER, "IRF" DOUBLE);

DROP TABLE PAL_VARMA_CTRL_TBL;
CREATE COLUMN TABLE PAL_VARMA_CTRL_TBL("NAME" NVARCHAR(100), "Intargs" INTEGER, "Dblargs" DOUBLE, "Strargs" NVARCHAR(100));
INSERT INTO PAL_VARMA_CTRL_TBL VALUES('MODEL', 0, NULL, NULL);
INSERT INTO PAL_VARMA_CTRL_TBL VALUES('CALCULATE_IRF', 1, NULL, NULL);
INSERT INTO PAL_VARMA_CTRL_TBL VALUES('EXOGENOUS_VARIABLE', NULL, NULL, 'X');


do begin
	lt_data = select * from PAL_VARMA_DATA_TBL;
	lt_control = select * from PAL_VARMA_CTRL_TBL;
	CALL _SYS_AFL.PAL_VARMA(:lt_data, :lt_control, lt_model, lt_fit, lt_irf);
	INSERT INTO PAL_VARMA_MODEL_TBL SELECT * FROM :lt_model;
	select * from :lt_model;
	select * from :lt_fit;
	select * from :lt_irf;
end

