1 /*
2  *  gretl -- Gnu Regression, Econometrics and Time-series Library
3  *  Copyright (C) 2001 Allin Cottrell and Riccardo "Jack" Lucchetti
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #ifndef VAR_H_
21 #define VAR_H_
22 
23 #include "gretl_matrix.h"
24 #include "gretl_restrict.h"
25 
26 enum Detflags {
27     DET_CONST = 1 << 0,
28     DET_TREND = 1 << 1,
29     DET_SEAS  = 1 << 2
30 };
31 
32 enum VAR_robust {
33     VAR_HC = 1,
34     VAR_HAC
35 };
36 
37 typedef struct JohansenInfo_ JohansenInfo;
38 
39 struct GRETL_VAR_ {
40     int ci;              /* command index (VAR or VECM) */
41     int refcount;        /* for saving/deleting */
42     int err;             /* error code */
43     int neqns;           /* number of equations in system */
44     int order;           /* maximum lag order */
45     int t1;              /* starting observation */
46     int t2;              /* ending observation */
47     int T;               /* number of observations */
48     int df;              /* T - average coeffs per equation */
49     int ifc;             /* equations include a constant (1) or not (0) */
50     int ncoeff;          /* total coefficients per equation */
51     int *lags;           /* list of specific lags */
52     int *ylist;          /* list of stochastic vars */
53     int *xlist;          /* list of exogenous variables */
54     int *rlist;          /* restricted exogenous variables (VECM only) */
55     int detflags;        /* record of automatic deterministic vars added */
56     int robust;          /* computing robust std errors? */
57     int xcols;           /* full column size of X matrix (VECM special) */
58     gretl_matrix *Y;     /* matrix of dependent variables */
59     gretl_matrix *X;     /* matrix of independent variables */
60     gretl_matrix *B;     /* basic coefficient matrix */
61     gretl_matrix *XTX;   /* X'X inverse */
62     gretl_matrix *A;     /* augmented coefficient matrix (companion form) */
63     gretl_matrix *L;     /* lambda: inverse roots of A(L) polynomial */
64     gretl_matrix *E;     /* residuals matrix */
65     gretl_matrix *C;     /* Cholesky-decomposed covariance matrix */
66     gretl_matrix *S;     /* cross-equation variance matrix */
67     gretl_matrix *F;     /* optional forecast matrix */
68     gretl_matrix *V;     /* full parameter covariance matrix */
69     gretl_matrix *ord;   /* optional Cholesky-ordering vector */
70     MODEL **models;      /* pointers to individual equation estimates */
71     double *Fvals;       /* hold results of F-tests */
72     double *Ivals;       /* hold results of info criteria comparisons */
73     double ldet;         /* log-determinant of S */
74     double ll;           /* log-likelihood */
75     double AIC;          /* Akaike criterion */
76     double BIC;          /* Bayesian criterion */
77     double HQC;          /* Hannan-Quinn criterion */
78     double LR;           /* for likelihood-ratio testing */
79     double LB;           /* Ljung-Box (Portmanteau) test statistic */
80     int LBs;             /* order for Portmanteau test */
81     JohansenInfo *jinfo; /* extra information for VECMs */
82     char *name;          /* for use in session management */
83 };
84 
85 #define var_n_lags(v) ((v->lags != NULL)? v->lags[0] : v->order)
86 #define var_max_lag(v) ((v->lags != NULL)? v->lags[v->lags[0]] : v->order)
87 
88 int var_max_order (const int *list, const DATASET *dset);
89 
90 GRETL_VAR *gretl_VAR (int order, int *laglist, int *list,
91 		      const DATASET *dset, gretlopt opt,
92 		      PRN *prn, int *err);
93 
94 GRETL_VAR *gretl_VECM (int order, int rank, int *list,
95 		       const DATASET *dset, gretlopt opt,
96 		       PRN *prn, int *err);
97 
98 const gretl_matrix *
99 gretl_VAR_get_forecast_matrix (GRETL_VAR *var, int t1, int t2,
100 			       DATASET *dset, gretlopt opt,
101 			       int *err);
102 
103 const gretl_matrix *
104 gretl_VAR_get_residual_matrix (const GRETL_VAR *var);
105 
106 gretl_matrix *
107 gretl_VAR_get_fcast_decomp (const GRETL_VAR *var,
108 			    int targ, int periods,
109 			    int *errp);
110 
111 gretl_matrix *
112 gretl_VAR_get_vma_matrix (const GRETL_VAR *var, const DATASET *dset,
113 			  int *err);
114 
115 gretl_matrix *gretl_VAR_get_FEVD_matrix (const GRETL_VAR *var,
116 					 int targ, int shock,
117 					 int horizon,
118 					 const DATASET *dset,
119 					 int *err);
120 
121 gretl_matrix *
122 gretl_VAR_get_full_FEVD_matrix (const GRETL_VAR *var,
123 				const DATASET *dset,
124 				int *err);
125 
126 gretl_matrix *gretl_FEVD_from_bundle (gretl_bundle *b,
127 				      int targ, int shock,
128 				      const DATASET *dset,
129 				      int *err);
130 
131 gretl_matrix *gretl_IRF_from_bundle (gretl_bundle *b,
132 				     int targ, int shock,
133 				     double alpha,
134 				     const DATASET *dset,
135 				     int *err);
136 
137 gretl_matrix *VECM_get_EC_matrix (const GRETL_VAR *v,
138 				  const DATASET *dset,
139 				  int *err);
140 
141 int
142 gretl_VAR_do_error_decomp (const gretl_matrix *S, gretl_matrix *C,
143 			   const gretl_matrix *ord);
144 
145 const gretl_matrix *gretl_VAR_get_roots (GRETL_VAR *var, int *err);
146 
147 int gretl_VAR_autocorrelation_test (GRETL_VAR *var, int order,
148 				    DATASET *dset, gretlopt opt,
149 				    PRN *prn);
150 
151 int gretl_VAR_arch_test (GRETL_VAR *var, int order,
152 			 DATASET *dset, gretlopt opt,
153 			 PRN *prn);
154 
155 int gretl_VAR_normality_test (const GRETL_VAR *var,
156 			      gretlopt opt, PRN *prn);
157 
158 int set_VAR_model_stats (GRETL_VAR *var, int i);
159 
160 const int *gretl_VAR_get_exo_list (const GRETL_VAR *var);
161 
162 const int *gretl_VAR_get_endo_list (const GRETL_VAR *var);
163 
164 GRETL_VAR *gretl_VAR_omit_test (GRETL_VAR *var, const int *omitlist,
165 				DATASET *dset, gretlopt opt,
166 				PRN *prn, int *err);
167 
168 int gretl_VAR_wald_omit_test (GRETL_VAR *var, const int *omitlist,
169 			      DATASET *dset, gretlopt opt,
170 			      PRN *prn);
171 
172 double *gretl_VECM_get_EC (GRETL_VAR *vecm, int j, const DATASET *dset,
173 			   int *err);
174 
175 void gretl_VAR_free (GRETL_VAR *var);
176 
177 int default_VAR_horizon (const DATASET *dset);
178 
179 gretl_matrix *
180 gretl_VAR_get_impulse_response (GRETL_VAR *var,
181 				int targ, int shock,
182 				int periods, double alpha,
183 				const DATASET *dset,
184 				int *err);
185 
186 void gretl_VAR_set_name (GRETL_VAR *var, const char *name);
187 
188 const char *gretl_VAR_get_name (const GRETL_VAR *var);
189 
190 int gretl_VAR_get_variable_number (const GRETL_VAR *var, int k);
191 
192 int gretl_VAR_get_n_equations (const GRETL_VAR *var);
193 
194 int gretl_VAR_get_t1 (const GRETL_VAR *var);
195 
196 int gretl_VAR_get_t2 (const GRETL_VAR *var);
197 
198 int gretl_var_get_sample (const GRETL_VAR *var, int *t1, int *t2);
199 
200 const MODEL *gretl_VAR_get_model (const GRETL_VAR *var, int i);
201 
202 double *gretl_VAR_get_resid_series (GRETL_VAR *var, int eqnum,
203 				    int *err);
204 
205 int gretl_VAR_set_ordering (GRETL_VAR *var, gretl_matrix *ord);
206 
207 int gretl_VAR_do_irf (GRETL_VAR *var, const char *line,
208 		      const DATASET *dset);
209 
210 int gretl_VAR_get_highest_variable (const GRETL_VAR *var);
211 
212 GRETL_VAR *johansen_test (int order, const int *list,
213 			  const DATASET *dset, gretlopt opt,
214 			  PRN *prn);
215 
216 int johansen_test_simple (int order, const int *list,
217 			  const DATASET *dset,
218 			  gretlopt opt, PRN *prn);
219 
220 int gretl_VECM_n_beta (const GRETL_VAR *vecm);
221 
222 int gretl_VECM_n_alpha (const GRETL_VAR *vecm);
223 
224 int gretl_VECM_test (GRETL_VAR *vecm,
225 		     gretl_restriction *rset,
226 		     const DATASET *dset,
227 		     gretlopt opt,
228 		     PRN *prn);
229 
230 int gretl_VAR_test (GRETL_VAR *var,
231 		    gretl_restriction *rset,
232 		    const DATASET *dset,
233 		    gretlopt opt,
234 		    PRN *prn);
235 
236 GRETL_VAR *
237 real_gretl_restricted_vecm (GRETL_VAR *orig,
238 			    gretl_restriction *rset,
239 			    const DATASET *dset,
240 			    PRN *prn, int *err);
241 
242 int gretl_VECM_rank (const GRETL_VAR *vecm);
243 
244 int beta_restricted_VECM (const GRETL_VAR *vecm);
245 
246 int alpha_restricted_VECM (const GRETL_VAR *vecm);
247 
248 int restricted_VECM (const GRETL_VAR *vecm);
249 
250 const gretl_matrix *gretl_VECM_R_matrix (const GRETL_VAR *vecm);
251 
252 const gretl_matrix *gretl_VECM_q_matrix (const GRETL_VAR *vecm);
253 
254 const gretl_matrix *gretl_VECM_Ra_matrix (const GRETL_VAR *vecm);
255 
256 const gretl_matrix *gretl_VECM_qa_matrix (const GRETL_VAR *vecm);
257 
258 double *gretl_VAR_get_series (const GRETL_VAR *var, const DATASET *dset,
259 			      int idx, const char *key, int *err);
260 
261 gretl_matrix *gretl_VAR_get_matrix (const GRETL_VAR *var, int idx,
262 				    int *err);
263 
264 void gretl_VAR_param_names (GRETL_VAR *v, char **params,
265 			    const DATASET *dset);
266 
267 int gretl_VAR_serialize (const GRETL_VAR *var, SavedObjectFlags flags,
268 			 PRN *prn);
269 
270 int gretl_VAR_bundlize (const GRETL_VAR *var, DATASET *dset,
271 			gretl_bundle *b);
272 
273 int transcribe_VAR_models (GRETL_VAR *var,
274 			   const DATASET *dset,
275 			   const gretl_matrix *XTX);
276 
277 #ifdef FULL_XML_HEADERS
278 
279 GRETL_VAR *gretl_VAR_from_XML (xmlNodePtr node, xmlDocPtr doc,
280 			       const DATASET *dset,
281 			       int *err);
282 
283 #endif
284 
285 gretl_matrix *vma_rep (gretl_matrix *A, gretl_matrix *C,
286 		       int horizon, int *err);
287 
288 #endif /* VAR_H_ */
289