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 GRETL_MODEL_H 21 #define GRETL_MODEL_H 22 23 #include "objstack.h" 24 25 typedef enum { 26 ARMA_X12A = 1 << 0, /* using X-12-ARIMA (or X-13) to generate estimates */ 27 ARMA_EXACT = 1 << 1, /* using exact ML */ 28 ARMA_LS = 1 << 2, /* using conditional ML, and O/NLS == CML */ 29 ARMA_OLS = 1 << 3 /* OLS == MLE */ 30 } ArmaFlags; 31 32 typedef struct CoeffIntervals_ CoeffIntervals; 33 34 struct CoeffIntervals_ { 35 int asy; 36 int ncoeff; 37 double alpha; 38 double t; 39 char **names; 40 double *coeff; 41 double *maxerr; 42 int df; 43 int ifc; 44 }; 45 46 typedef enum { 47 VCV_CLASSICAL, 48 VCV_HC, 49 VCV_HAC, 50 VCV_ML, 51 VCV_PANEL, 52 VCV_RQ, 53 VCV_CLUSTER 54 } VCVMajorType; 55 56 typedef enum { 57 ML_UNSET, 58 ML_HESSIAN, 59 ML_IM, 60 ML_OP, 61 ML_QML, 62 ML_BW, 63 ML_HAC, 64 ML_VCVMAX 65 } MLVCVType; 66 67 typedef enum { 68 KERNEL_BARTLETT, 69 KERNEL_PARZEN, 70 KERNEL_QS, 71 KERNEL_MAX 72 } HACKernel; 73 74 typedef enum { 75 PANEL_HAC, 76 PANEL_BK /* Beck-Katz */ 77 } PanelVCVType; 78 79 typedef enum { 80 RQ_ASY, 81 RQ_NID /* sandwich */ 82 } RQVCVType; 83 84 typedef enum { 85 HAC_PREWHITEN = 1 86 } VCVFlags; 87 88 typedef struct VCVInfo_ VCVInfo; 89 90 struct VCVInfo_ { 91 int vmaj; /* general type of VCV */ 92 int vmin; /* HC variant, etc. */ 93 int order; /* for use with HAC */ 94 VCVFlags flags; /* includes prewhitening */ 95 double bw; /* for use with QS HAC kernel */ 96 }; 97 98 /* single-equation model commands */ 99 100 #define MODEL_COMMAND(c) (c == AR || \ 101 c == AR1 || \ 102 c == ARCH || \ 103 c == ARMA || \ 104 c == DPANEL || \ 105 c == DURATION || \ 106 c == GARCH || \ 107 c == GMM || \ 108 c == HECKIT || \ 109 c == HSK || \ 110 c == INTREG || \ 111 c == IVREG || \ 112 c == LAD || \ 113 c == LOGISTIC || \ 114 c == LOGIT || \ 115 c == MIDASREG || \ 116 c == MLE || \ 117 c == MPOLS || \ 118 c == NEGBIN || \ 119 c == NLS || \ 120 c == OLS || \ 121 c == PANEL || \ 122 c == POISSON || \ 123 c == PROBIT || \ 124 c == BIPROBIT || \ 125 c == QUANTREG || \ 126 c == TOBIT || \ 127 c == WLS) 128 129 #define AR_MODEL(c) (c == AR || \ 130 c == AR1 || \ 131 c == ARMA || \ 132 c == GARCH) 133 134 #define SIMPLE_AR_MODEL(c) (c == AR || c == AR1) 135 136 #define ML_ESTIMATOR(c) (c == ARMA || \ 137 c == DURATION || \ 138 c == GARCH || \ 139 c == HECKIT || \ 140 c == LOGIT || \ 141 c == MLE || \ 142 c == NEGBIN || \ 143 c == POISSON || \ 144 c == PROBIT || \ 145 c == BIPROBIT || \ 146 c == TOBIT) 147 148 #define LIMDEP(c) (c == LOGIT || \ 149 c == PROBIT || \ 150 c == TOBIT || \ 151 c == INTREG) 152 153 #define COUNT_MODEL(c) (c == POISSON || c == NEGBIN) 154 155 #define LSQ_MODEL(c) (c == AR1 || \ 156 c == HSK || \ 157 c == OLS || \ 158 c == WLS) 159 160 #define ASYMPTOTIC_MODEL(c) (c == ARMA || \ 161 c == DPANEL || \ 162 c == DURATION || \ 163 c == GARCH || \ 164 c == GMM || \ 165 c == HECKIT || \ 166 c == INTREG || \ 167 c == IVREG || \ 168 c == LOGIT || \ 169 c == MLE || \ 170 c == NEGBIN || \ 171 c == POISSON || \ 172 c == PROBIT || \ 173 c == TOBIT || \ 174 c == BIPROBIT) 175 176 #define EQN_SYSTEM_COMMAND(c) (c == VAR || c == VECM || c == SYSTEM) 177 178 /* model where the specification is not based on a list 179 of variables */ 180 #define NONLIST_MODEL(c) (c == NLS || c == MLE || c == GMM || c == MIDASREG) 181 182 #define is_model_ref_cmd(c) (c == ADD || \ 183 c == ARCH || \ 184 c == CHOW || \ 185 c == CUSUM || \ 186 c == FCAST || \ 187 c == LEVERAGE || \ 188 c == MODTEST || \ 189 c == OMIT || \ 190 c == RESTRICT || \ 191 c == VIF) 192 193 #define RQ_SPECIAL_MODEL(m) ((m->ci == LAD || m->ci == QUANTREG) && \ 194 NULL != gretl_model_get_data(m, "rq_tauvec")) 195 196 #define POOLED_MODEL(m) ((m->ci == OLS || m->ci == PANEL) && \ 197 gretl_model_get_int(m, "pooled")) 198 199 typedef enum { 200 GRETL_TEST_ADD, 201 GRETL_TEST_ARCH, 202 GRETL_TEST_AUTOCORR, 203 GRETL_TEST_CHOW, 204 GRETL_TEST_CUSUM, 205 GRETL_TEST_QLR, 206 GRETL_TEST_GROUPWISE, 207 GRETL_TEST_LOGS, 208 GRETL_TEST_NORMAL, 209 GRETL_TEST_OMIT, 210 GRETL_TEST_RESET, 211 GRETL_TEST_SQUARES, 212 GRETL_TEST_WHITES, 213 GRETL_TEST_SARGAN, 214 GRETL_TEST_IV_HAUSMAN, 215 GRETL_TEST_PANEL_HAUSMAN, 216 GRETL_TEST_PANEL_F, 217 GRETL_TEST_PANEL_BP, 218 GRETL_TEST_PANEL_TIMEDUM, 219 GRETL_TEST_PANEL_AR, 220 GRETL_TEST_HET_1, 221 GRETL_TEST_BP, 222 GRETL_TEST_CHOWDUM, 223 GRETL_TEST_COMFAC, 224 GRETL_TEST_INDEP, 225 GRETL_TEST_RE, 226 GRETL_TEST_WITHIN_F, 227 GRETL_TEST_PANEL_WELCH, 228 GRETL_TEST_RE_WALD, 229 GRETL_TEST_XDEPEND, 230 GRETL_TEST_MAX 231 } ModelTestType; 232 233 MODEL *gretl_model_new (void); 234 235 void gretl_model_init (MODEL *pmod, const DATASET *dset); 236 237 int gretl_model_allocate_storage (MODEL *pmod); 238 239 MODEL **gretl_model_array_new (int n); 240 241 MODEL *allocate_working_model (void); 242 243 void gretl_model_array_destroy (MODEL **models, int n); 244 245 void destroy_working_model (MODEL *models); 246 247 void gretl_model_smpl_init (MODEL *pmod, const DATASET *dset); 248 249 void impose_model_smpl (const MODEL *pmod, DATASET *dset); 250 251 void gretl_model_set_auxiliary (MODEL *pmod, ModelAuxCode aux); 252 253 void clear_model (MODEL *pmod); 254 255 void gretl_model_free (MODEL *pmod); 256 257 void clear_model_xpx (MODEL *pmod); 258 259 void gretl_model_free_on_exit (MODEL *pmod); 260 261 void display_model_data_items (const MODEL *pmod); 262 263 int bundlize_model_data_items (const MODEL *pmod, gretl_bundle *b); 264 265 int gretl_model_set_data_with_destructor (MODEL *pmod, const char *key, void *ptr, 266 GretlType type, size_t size, 267 void (*destructor) (void *)); 268 269 int gretl_model_set_data (MODEL *pmod, const char *key, void *ptr, 270 GretlType type, size_t size); 271 272 int gretl_model_set_matrix_as_data (MODEL *pmod, const char *key, 273 gretl_matrix *m); 274 275 int gretl_model_set_list_as_data (MODEL *pmod, const char *key, int *list); 276 277 int gretl_model_set_string_as_data (MODEL *pmod, const char *key, char *str); 278 279 int gretl_model_set_array_as_data (MODEL *pmod, const char *key, 280 gretl_array *A); 281 282 int gretl_model_destroy_data_item (MODEL *pmod, const char *key); 283 284 int gretl_model_detach_data_item (MODEL *pmod, const char *key); 285 286 int gretl_model_set_int (MODEL *pmod, const char *key, int val); 287 288 int gretl_model_set_double (MODEL *pmod, const char *key, double val); 289 290 int gretl_model_set_full_vcv_info (MODEL *pmod, int vmaj, int vmin, 291 int order, int flags, double bw); 292 293 int gretl_model_set_vcv_info (MODEL *pmod, int vmaj, int vmin); 294 295 int gretl_model_get_vcv_type (const MODEL *pmod); 296 297 int gretl_model_get_hc_version (const MODEL *pmod); 298 299 int gretl_model_get_cluster_var (const MODEL *pmod); 300 301 void *gretl_model_get_data (const MODEL *pmod, const char *key); 302 303 void *gretl_model_get_data_full (const MODEL *pmod, const char *key, 304 GretlType *type, int *copied, 305 size_t *sz); 306 307 int gretl_model_get_int (const MODEL *pmod, const char *key); 308 309 double gretl_model_get_double (const MODEL *pmod, const char *key); 310 311 double gretl_model_get_double_default (const MODEL *pmod, 312 const char *key, 313 double deflt); 314 315 int *gretl_model_get_list (const MODEL *pmod, const char *key); 316 317 char *gretl_model_get_param_name (const MODEL *pmod, 318 const DATASET *dset, 319 int i, char *targ); 320 321 gretl_array *gretl_model_get_param_names (const MODEL *pmod, 322 const DATASET *dset, 323 int *err); 324 325 int gretl_model_get_param_number (const MODEL *pmod, 326 const DATASET *dset, 327 const char *s); 328 329 void free_coeff_intervals (CoeffIntervals *cf); 330 331 CoeffIntervals * 332 gretl_model_get_coeff_intervals (const MODEL *pmod, 333 const DATASET *dset); 334 335 int reset_coeff_intervals (CoeffIntervals *cf, double alpha); 336 337 int gretl_model_get_depvar (const MODEL *pmod); 338 339 const char *gretl_model_get_depvar_name (const MODEL *pmod, 340 const DATASET *dset); 341 342 int *gretl_model_get_x_list (const MODEL *pmod); 343 344 int *gretl_model_get_y_list (const MODEL *pmod); 345 346 int *gretl_model_get_secondary_list (const MODEL *pmod); 347 348 int arma_model_nonseasonal_AR_order (const MODEL *pmod); 349 350 int arma_model_nonseasonal_MA_order (const MODEL *pmod); 351 352 int arma_model_max_AR_lag (const MODEL *pmod); 353 354 int arma_model_max_MA_lag (const MODEL *pmod); 355 356 int arma_model_AR_MA_coeffs (const MODEL *pmod, 357 gretl_vector **phi_star, 358 gretl_vector **theta_star, 359 gretlopt opt); 360 361 int regarma_model_AR_coeffs (const MODEL *pmod, 362 double **phi0, 363 int *pp); 364 365 const double *arma_model_get_x_coeffs (const MODEL *pmod); 366 367 int arma_model_get_n_arma_coeffs (const MODEL *pmod); 368 369 int regarima_model_get_AR_coeffs (const MODEL *pmod, 370 double **phi0, 371 int *pp); 372 373 int *arima_delta_coeffs (int d, int D, int s); 374 375 gretl_matrix *arma_spectrum_plot_data (const MODEL *pmod, 376 const DATASET *dset, 377 int *err); 378 379 gretl_matrix *gretl_model_ahat_vec (const MODEL *pmod, int *err); 380 381 int gretl_model_set_coeff_separator (MODEL *pmod, const char *s, int pos); 382 383 int gretl_model_get_coeff_separator (const MODEL *pmod, char **ps, int *ppos); 384 385 int gretl_model_new_vcv (MODEL *pmod, int *nelem); 386 387 int gretl_model_write_vcv (MODEL *pmod, const gretl_matrix *V); 388 389 int gretl_model_add_QML_vcv (MODEL *pmod, int ci, 390 const gretl_matrix *H, 391 const gretl_matrix *G, 392 const DATASET *dset, 393 gretlopt opt, 394 gretl_matrix **pV); 395 396 int gretl_model_add_hessian_vcv (MODEL *pmod, 397 const gretl_matrix *H); 398 399 int gretl_model_add_OPG_vcv (MODEL *pmod, 400 const gretl_matrix *G, 401 gretl_matrix **pV); 402 403 VMatrix *gretl_model_get_vcv (MODEL *pmod, const DATASET *dset); 404 405 double gretl_model_get_vcv_element (const MODEL *pmod, 406 int i, int j, 407 int np); 408 409 int gretl_model_write_coeffs (MODEL *pmod, double *b, int k); 410 411 int gretl_model_add_arinfo (MODEL *pmod, int nterms); 412 413 MODEL *gretl_model_copy (MODEL *pmod); 414 415 void swap_models (MODEL *targ, MODEL *src); 416 417 int command_ok_for_model (int test_ci, gretlopt opt, 418 const MODEL *pmod); 419 420 int model_test_ok (int ci, gretlopt opt, const MODEL *pmod, 421 const DATASET *dset); 422 423 int gretl_is_simple_OLS (const MODEL *pmod); 424 425 int gretl_is_arima_model (const MODEL *pmod); 426 427 int gretl_is_between_model (const MODEL *pmod); 428 429 int gretl_is_regular_panel_model (const MODEL *pmod); 430 431 int get_first_model_stat (const char **word, const char **desc); 432 433 int get_next_model_stat (const char **word, const char **desc); 434 435 int get_model_count (void); 436 437 void set_model_count (int c); 438 439 int model_count_plus (void); 440 441 void model_count_minus (MODEL *pmod); 442 443 void set_model_id (MODEL *pmod, gretlopt opt); 444 445 ModelTest *model_test_new (ModelTestType ttype); 446 447 ModelTest *gretl_model_get_test (MODEL *pmod, ModelTestType ttype); 448 449 void model_test_free (ModelTest *test); 450 451 int maybe_add_test_to_model (MODEL *pmod, ModelTest *test); 452 453 void model_test_set_teststat (ModelTest *test, unsigned char ts); 454 void model_test_set_order (ModelTest *test, int order); 455 void model_test_set_dfn (ModelTest *test, int df); 456 void model_test_set_dfd (ModelTest *test, double df); 457 void model_test_set_value (ModelTest *test, double val); 458 void model_test_set_pvalue (ModelTest *test, double pval); 459 void model_test_set_param (ModelTest *test, const char *s); 460 void model_test_set_opt (ModelTest *test, gretlopt opt); 461 void model_test_set_allocated_param (ModelTest *test, char *s); 462 void model_test_set_crit_and_alpha (ModelTest *test, 463 double crit, 464 double alpha); 465 466 void gretl_model_test_print (const MODEL *pmod, int i, PRN *prn); 467 void gretl_model_print_last_test (const MODEL *pmod, PRN *prn); 468 void gretl_model_test_print_direct (const ModelTest *test, int heading, 469 PRN *prn); 470 471 void gretl_model_destroy_tests (MODEL *pmod); 472 473 void model_list_to_string (int *list, char *buf); 474 475 int highest_numbered_var_in_model (const MODEL *pmod, 476 const DATASET *dset); 477 478 int mle_criteria (MODEL *pmod, int addk); 479 480 int model_use_zscore (const MODEL *pmod); 481 482 double coeff_pval (int ci, double x, int df); 483 484 double model_coeff_pval (const MODEL *pmod, double x); 485 486 int exact_fit_check (const MODEL *pmod, PRN *prn); 487 488 void maybe_suppress_time_dummies (MODEL *pmod, int ndum); 489 490 int gretl_model_allocate_param_names (MODEL *pmod, int k); 491 492 int gretl_model_set_param_name (MODEL *pmod, int i, const char *name); 493 494 int gretl_model_add_arma_varnames (MODEL *pmod, const DATASET *dset, 495 int yno, int p, int q, 496 const char *pmask, const char *qmask, 497 int P, int Q, 498 int r); 499 500 int gretl_model_add_panel_varnames (MODEL *pmod, const DATASET *dset, 501 const int *ulist); 502 503 void gretl_model_add_allocated_varnames (MODEL *pmod, char **vnames); 504 505 int gretl_model_add_y_median (MODEL *pmod, const double *y); 506 507 int gretl_model_add_normality_test (MODEL *pmod, double X2); 508 509 int gretl_model_get_normality_test (const MODEL *pmod, PRN *prn); 510 511 char *gretl_model_get_fitted_formula (const MODEL *pmod, int xvar, 512 const DATASET *dset); 513 514 void gretl_model_set_name (MODEL *pmod, const char *name); 515 516 const char *gretl_model_get_name (const MODEL *pmod); 517 518 double gretl_model_get_scalar (MODEL *pmod, 519 ModelDataIndex idx, 520 DATASET *dset, 521 int *err); 522 523 int gretl_model_get_series (double *x, MODEL *pmod, 524 const DATASET *dset, 525 ModelDataIndex idx); 526 527 gretl_matrix *gretl_model_get_matrix (MODEL *pmod, 528 ModelDataIndex idx, 529 int *err); 530 531 double 532 gretl_model_get_data_element (MODEL *pmod, int idx, const char *s, 533 const DATASET *dset, int *err); 534 535 int gretl_model_serialize (const MODEL *pmod, SavedObjectFlags flags, 536 PRN *prn); 537 538 #ifdef FULL_XML_HEADERS 539 540 int attach_model_tests_from_xml (MODEL *pmod, xmlNodePtr node); 541 542 MODEL *gretl_model_from_XML (xmlNodePtr node, xmlDocPtr doc, 543 const DATASET *dset, 544 int *err); 545 #endif 546 547 #endif /* GRETL_MODEL_H */ 548