File: arma_priv.h

package info (click to toggle)
gretl 2019a-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 53,708 kB
  • sloc: ansic: 367,137; sh: 4,416; makefile: 2,636; cpp: 2,499; xml: 580; perl: 364
file content (171 lines) | stat: -rw-r--r-- 7,202 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/* 
 *  gretl -- Gnu Regression, Econometrics and Time-series Library
 *  Copyright (C) 2001 Allin Cottrell and Riccardo "Jack" Lucchetti
 * 
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */

#ifndef ARMA_PRIV_H
#define ARMA_PRIV_H

typedef enum {
    ARMA_SEAS   = 1 << 0, /* includes seasonal component */
    ARMA_DSPEC  = 1 << 1, /* input list includes differences */
    ARMA_XDIFF  = 1 << 2, /* ARIMA: exogenous regressors are differenced */
    ARMA_LBFGS  = 1 << 3, /* using L-BFGS-B with native exact ML */
    ARMA_VECH   = 1 << 4, /* using vech representation when computing
			     variance matrix of state for Kalman filter */
    ARMA_NAOK   = 1 << 5, /* allow missing observations */
    ARMA_NAS    = 1 << 6, /* sample contains NAs */
    ARMA_LEV    = 1 << 7, /* doing ARIMA via levels formulation */
    ARMA_YDIFF  = 1 << 8, /* ainfo->y contains differenced y */
    ARMA_AVGLL  = 1 << 9, /* passing average likelihood option to Kalman */
    ARMA_CML0   = 1 << 10, /* initialize exact ML via CML? */
    ARMA_STDX   = 1 << 11  /* exogenous regressors standardized */
} PrivFlags;

typedef enum {
    INI_USER = 1,
    INI_HR,
    INI_SMALL,
    INI_NLS,
    INI_OLS
} IniMethod;

typedef struct arma_info_ arma_info;

struct arma_info_ {
    int yno;            /* ID of dependent variable */
    ArmaFlags flags;    /* specification flags */
    PrivFlags pflags;   /* "private" flags for estimation */
    int *alist;         /* copy of incoming list */
    const int *pqspec;  /* auxiliary list with specific AR, MA lags */
    char *pmask;        /* specific AR lags included */
    char *qmask;        /* specific MA lags included */
    double ll;          /* log-likelihood */
    IniMethod init;     /* initialization method */
    int ifc;            /* specification includes a constant? */
    int p;              /* max non-seasonal AR order */
    int d;              /* non-seasonal difference */
    int q;              /* max non-seasonal MA order */
    int P;              /* seasonal AR order */
    int D;              /* seasonal difference */
    int Q;              /* seasonal MA order */
    int np;             /* total non-seasonal AR lags */
    int nq;             /* total non-seasonal MA lags */
    int maxlag;         /* longest lag in model */
    int nexo;           /* number of other regressors (ARMAX) */
    int nc;             /* total number of coefficients */
    int t1;             /* starting observation */
    int t2;             /* ending observation */
    int pd;             /* periodicity of data */
    int T;              /* number of valid observations in sample */
    int fullT;          /* total obs (possibly including interior NAs) */
    int r0;             /* size of ARMA state vector */
    int fncount;        /* count of function evaluations */
    int grcount;        /* count of gradient evaluations */
    double *y;          /* dependent variable (possibly differenced) */
    double *e;          /* forecast errors */
    const double **Z;   /* virtual dataset */
    double yscale;      /* scale factor for y */
    double yshift;      /* shift factor for y */
    int *xlist;         /* list of regressors (ARMAX) */
    int *misslist;      /* list of missing observations */
    gretl_matrix *xstats; /* mean and std dev of regressors */
    gretl_matrix *dX;   /* differenced regressors (ARIMAX) */
    gretl_matrix *G;    /* score matrix */
    gretl_matrix *V;    /* covariance matrix */
    int n_aux;          /* number of auxiliary arrays */
    double **aux;       /* auxiliary arrays */
    PRN *prn;           /* verbose printer */
};

#define arma_by_x12a(a)        ((a)->flags & ARMA_X12A)
#define arma_exact_ml(a)       ((a)->flags & ARMA_EXACT)
#define arma_least_squares(a)  ((a)->flags & ARMA_LS)

#define set_arma_least_squares(a) ((a)->flags |= ARMA_LS)

#define arma_has_seasonal(a)   ((a)->pflags & ARMA_SEAS)
#define arma_is_arima(a)       ((a)->pflags & ARMA_DSPEC)
#define arma_xdiff(a)          ((a)->pflags & ARMA_XDIFF)
#define arma_lbfgs(a)          ((a)->pflags & ARMA_LBFGS)
#define arma_using_vech(a)     ((a)->pflags & ARMA_VECH)
#define arma_na_ok(a)          ((a)->pflags & ARMA_NAOK)
#define arma_missvals(a)       ((a)->pflags & ARMA_NAS)
#define arima_levels(a)        ((a)->pflags & ARMA_LEV)
#define arima_ydiff(a)         ((a)->pflags & ARMA_YDIFF)
#define arma_avg_ll(a)         ((a)->pflags & ARMA_AVGLL)
#define arma_cml_init(a)       ((a)->pflags & ARMA_CML0)
#define arma_stdx(a)           ((a)->pflags & ARMA_STDX)    

#define set_arma_has_seasonal(a)  ((a)->pflags |= ARMA_SEAS)
#define set_arma_is_arima(a)      ((a)->pflags |= ARMA_DSPEC)
#define unset_arma_is_arima(a)    ((a)->pflags &= ~ARMA_DSPEC)
#define set_arma_use_vech(a)      ((a)->pflags |= ARMA_VECH)
#define set_arma_na_ok(a)         ((a)->pflags |= ARMA_NAOK)
#define set_arma_missvals(a)      ((a)->pflags |= ARMA_NAS)
#define set_arima_levels(a)       ((a)->pflags |= ARMA_LEV)
#define set_arma_avg_ll(a)        ((a)->pflags |= ARMA_AVGLL)
#define set_arima_ydiff(a)        ((a)->pflags |= ARMA_YDIFF)
#define unset_arima_ydiff(a)      ((a)->pflags &= ~ARMA_YDIFF)
#define set_arma_cml_init(a)      ((a)->pflags |= ARMA_CML0)
#define set_arma_stdx(a)          ((a)->pflags |= ARMA_STDX)

#define AR_included(a,i) (a->pmask == NULL || a->pmask[i] == '1')
#define MA_included(a,i) (a->qmask == NULL || a->qmask[i] == '1')

int flip_poly (double *theta, arma_info *ainfo,
	       int ar, int seasonal);

int maybe_correct_MA (arma_info *ainfo,
		      double *theta,
		      double *Theta);

void maybe_set_yscale (arma_info *ainfo);

int hr_arma_init (double *coeff, const DATASET *dset,
		  arma_info *ainfo);

int ar_arma_init (double *coeff, const DATASET *dset,
		  arma_info *ainfo, MODEL *pmod,
		  gretlopt opt);

int arma_by_ls (const double *coeff, const DATASET *dset,
		arma_info *ainfo, MODEL *pmod);

int bhhh_arma (double *theta, const DATASET *dset,
	       arma_info *ainfo, MODEL *pmod,
	       gretlopt opt);

int cml_arma_init (double *theta, const DATASET *dset,
		   arma_info *ainfo, gretlopt opt);

void transform_arma_const (double *b, arma_info *ainfo);

int arma_list_y_position (arma_info *ainfo);

int arma_model_add_roots (MODEL *pmod, arma_info *ainfo,
			  const double *coeff);

void write_arma_model_stats (MODEL *pmod, arma_info *ainfo,
			     const DATASET *dset);

int arima_difference (arma_info *ainfo, const DATASET *dset, 
		      int fullX);

void arima_difference_undo (arma_info *ainfo, const DATASET *dset);

#endif /* ARMA_PRIV_H */