# GAfit: Genetic algorithm for preliminary estimation of GMAR, StMAR,... In uGMAR: Estimate Univariate Gaussian and Student's t Mixture Autoregressive Models

## Description

`GAfit` estimates specified GMAR, StMAR, or G-StMAR model using a genetic algorithm. The employed genetic algorithm is designed to find starting values for gradient based methods.

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22``` ```GAfit( data, p, M, model = c("GMAR", "StMAR", "G-StMAR"), restricted = FALSE, constraints = NULL, parametrization = c("intercept", "mean"), conditional = TRUE, ngen = 200, popsize, smart_mu = min(100, ceiling(0.5 * ngen)), mu_scale, sigma_scale, initpop = NULL, regime_force_scale = 1, red_criteria = c(0.05, 0.01), to_return = c("alt_ind", "best_ind"), minval, seed = NULL, ... ) ```

## Arguments

 `data` a numeric vector or class `'ts'` object containing the data. `NA` values are not supported. `p` a positive integer specifying the autoregressive order of the model. `M` For GMAR and StMAR models:a positive integer specifying the number of mixture components. For G-StMAR models:a size (2x1) integer vector specifying the number of GMAR type components `M1` in the first element and StMAR type components `M2` in the second element. The total number of mixture components is `M=M1+M2`. `model` is "GMAR", "StMAR", or "G-StMAR" model considered? In the G-StMAR model, the first `M1` components are GMAR type and the rest `M2` components are StMAR type. `restricted` a logical argument stating whether the AR coefficients φ_{m,1},...,φ_{m,p} are restricted to be the same for all regimes. `constraints` specifies linear constraints imposed to each regime's autoregressive parameters separately. For non-restricted models:a list of size (pxq_{m}) constraint matrices C_{m} of full column rank satisfying φ_{m}=C_{m}ψ_{m} for all m=1,...,M, where φ_{m}=(φ_{m,1},...,φ_{m,p}) and ψ_{m}=(ψ_{m,1},...,ψ_{m,q_{m}}). For restricted models:a size (pxq) constraint matrix C of full column rank satisfying φ=Cψ, where φ=(φ_{1},...,φ_{p}) and ψ=ψ_{1},...,ψ_{q}. The symbol φ denotes an AR coefficient. Note that regardless of any constraints, the autoregressive order is always `p` for all regimes. Ignore or set to `NULL` if applying linear constraints is not desired. `parametrization` is the model parametrized with the "intercepts" φ_{m,0} or "means" μ_{m} = φ_{m,0}/(1-∑φ_{i,m})? `conditional` a logical argument specifying whether the conditional or exact log-likelihood function should be used. `ngen` a positive integer specifying the number of generations to be ran through in the genetic algorithm. `popsize` a positive even integer specifying the population size in the genetic algorithm. Default is `10*d` where `d` is the number of parameters. `smart_mu` a positive integer specifying the generation after which the random mutations in the genetic algorithm are "smart". This means that mutating individuals will mostly mutate fairly close (or partially close) to the best fitting individual so far. `mu_scale` a real valued vector of length two specifying the mean (the first element) and standard deviation (the second element) of the normal distribution from which the μ_{m} mean-parameters are generated in random mutations in the genetic algorithm. Default is `c(mean(data), sd(data))`. Note that the genetic algorithm optimizes with mean-parametrization even when `parametrization=="intercept"`, but input (in `initpop`) and output (return value) parameter vectors may be intercept-parametrized. `sigma_scale` a positive real number specifying the standard deviation of the (zero mean, positive only by taking absolute value) normal distribution from which the component variance parameters are generated in the random mutations in the genetic algorithm. Default is `var(stats::ar(data, order.max=10)\$resid, na.rm=TRUE)`. `initpop` a list of parameter vectors from which the initial population of the genetic algorithm will be generated from. The parameter vectors should be of form... For non-restricted models: Size (M(p+3)+M-M1-1x1) vector θ=(υ_{1},...,υ_{M}, α_{1},...,α_{M-1},ν) where υ_{m}=(φ_{m,0},φ_{m},σ_{m}^2) φ_{m}=(φ_{m,1},...,φ_{m,p}), m=1,...,M ν=(ν_{M1+1},...,ν_{M}) M1 is the number of GMAR type regimes. In the GMAR model, M1=M and the parameter ν dropped. In the StMAR model, M1=0. If the model imposes linear constraints on the autoregressive parameters: Replace the vectors φ_{m} with the vectors ψ_{m} that satisfy φ_{m}=C_{m}ψ_{m} (see the argument `constraints`). For restricted models: Size (3M+M-M1+p-1x1) vector θ=(φ_{1,0},...,φ_{M,0},φ, σ_{1}^2,...,σ_{M}^2,α_{1},...,α_{M-1},ν), where φ=(φ_{1},...,φ_{p}) contains the AR coefficients, which are common for all regimes. If the model imposes linear constraints on the autoregressive parameters: Replace the vector φ with the vector ψ that satisfies φ=Cψ (see the argument `constraints`). Symbol φ denotes an AR coefficient, σ^2 a variance, α a mixing weight, and ν a degrees of freedom parameter. If `parametrization=="mean"`, just replace each intercept term φ_{m,0} with the regimewise mean μ_m = φ_{m,0}/(1-∑φ_{i,m}). In the G-StMAR model, the first `M1` components are GMAR type and the rest `M2` components are StMAR type. Note that in the case M=1, the mixing weight parameters α are dropped, and in the case of StMAR or G-StMAR model, the degrees of freedom parameters ν have to be larger than 2. If not specified (or `NULL` as is default), the initial population will be drawn randomly. `regime_force_scale` a non-negative real number specifying how much should natural selection favor individuals with less regimes that have almost all mixing weights (practically) at zero (see `red_criteria`), i.e., with less "redundant regimes". Set to zero for no favoring or large number for heavy favoring. Without any favoring the genetic algorithm gets more often stuck in an area of the parameter space where some regimes are wasted, but with too much favoring the best genes might never mix into the population and the algorithm might converge poorly. Default is `1` and it gives 2x larger surviving probability weights for individuals with no wasted regimes compared to individuals with one wasted regime. Number `2` would give 3x larger probabilities etc. `red_criteria` a length 2 numeric vector specifying the criteria that is used to determine whether a regime is redundant or not. Any regime `m` which satisfies `sum(mixing_weights[,m] > red_criteria) < red_criteria*n_obs` will be considered "redundant". One should be careful when adjusting this argument (set `c(0, 0)` to fully disable the 'redundant regime' features from the algorithm). `to_return` should the genetic algorithm return the best fitting individual which has the least "redundant" regimes (`"alt_ind"`) or the individual which has the highest log-likelihood in general (`"best_ind"`) but might have more wasted regimes? `minval` a real number defining the minimum value of the log-likelihood function that will be considered. Values smaller than this will be treated as they were `minval` and the corresponding individuals will never survive. The default is `-(10^(ceiling(log10(length(data))) + 1) - 1)`, and one should be very careful if adjusting this. `seed` a single value, interpreted as an integer, or NULL, that sets seed for the random number generator in the beginning of the function call. If calling `GAfit` from `fitGSMAR`, use the argument `seeds` instead of passing the argument `seed`. `...` We currently use this to catch deprecated arguments.

## Details

The core of the genetic algorithm is mostly based on the description by Dorsey and Mayer (1995). It utilizes a slightly modified version of the individually adaptive crossover and mutation rates described by Patnaik and Srinivas (1994) and employs (50%) fitness inheritance discussed by Smith, Dike and Stegmann (1995). Large (in absolute value) but stationary AR parameter values are generated with the algorithm proposed by Monahan (1984).

By "redundant" or "wasted" regimes we mean regimes that have the time varying mixing weights basically at zero for all t. The model with redundant regimes would have approximately the same log-likelihood value without the redundant regimes and there is no purpose to have redundant regimes in the model.

## Value

Returns estimated parameter vector with the form described in `initpop`.

## References

• Dorsey R. E. and Mayer W. J. 1995. Genetic algorithms for estimation problems with multiple optima, nondifferentiability, and other irregular features. Journal of Business & Economic Statistics, 13, 53-66.

• Kalliovirta L., Meitz M. and Saikkonen P. 2015. Gaussian Mixture Autoregressive model for univariate time series. Journal of Time Series Analysis, 36, 247-266.

• Meitz M., Preve D., Saikkonen P. 2021. A mixture autoregressive model based on Student's t-distribution. Communications in Statistics - Theory and Methods, doi: 10.1080/03610926.2021.1916531

• Monahan J.F. 1984. A Note on Enforcing Stationarity in Autoregressive-Moving Average Models. Biometrica 71, 403-404.

• Patnaik L.M. and Srinivas M. 1994. Adaptive Probabilities of Crossover and Mutation in Genetic Algorithms. Transactions on Systems, Man and Cybernetics 24, 656-667.

• Smith R.E., Dike B.A., Stegmann S.A. 1995. Fitness inheritance in genetic algorithms. Proceedings of the 1995 ACM Symposium on Applied Computing, 345-350.

• Virolainen S. 2021. A mixture autoregressive model based on Gaussian and Student's t-distributions. Studies in Nonlinear Dynamics & Econometrics, doi: 10.1515/snde-2020-0060

## Examples

 ```1 2 3 4 5 6``` ```## These are long running examples # Preliminary estimation of GMAR p=1, M=2, model with the genetic algorithm # using only 100 generations (200 is recommended): pars12_ga <- GAfit(data=simudata, p=1, M=2, model="GMAR", ngen=100, seed=1) pars12_ga # Returns a parameter vector, not a class 'gsmar' object. ```

uGMAR documentation built on Jan. 24, 2022, 5:10 p.m.