GAfit: Genetic algorithm for preliminary estimation of GMAR, StMAR,...

View source: R/geneticAlgorithm.R

GAfitR Documentation

Genetic algorithm for preliminary estimation of GMAR, StMAR, or G-StMAR model

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

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 \phi_{m,1},...,\phi_{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 \phi_{m}=C_{m}\psi_{m} for all m=1,...,M, where \phi_{m}=(\phi_{m,1},...,\phi_{m,p}) and \psi_{m}=(\psi_{m,1},...,\psi_{m,q_{m}}).

For restricted models:

a size (pxq) constraint matrix C of full column rank satisfying \phi=C\psi, where \phi=(\phi_{1},...,\phi_{p}) and \psi=\psi_{1},...,\psi_{q}.

The symbol \phi 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" \phi_{m,0} or "means" \mu_{m} = \phi_{m,0}/(1-\sum\phi_{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 \mu_{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 \theta=(\upsilon_{1},...,\upsilon_{M}, \alpha_{1},...,\alpha_{M-1},\nu) where

  • \upsilon_{m}=(\phi_{m,0},\phi_{m},\sigma_{m}^2)

  • \phi_{m}=(\phi_{m,1},...,\phi_{m,p}), m=1,...,M

  • \nu=(\nu_{M1+1},...,\nu_{M})

  • M1 is the number of GMAR type regimes.

In the GMAR model, M1=M and the parameter \nu dropped. In the StMAR model, M1=0.

If the model imposes linear constraints on the autoregressive parameters: Replace the vectors \phi_{m} with the vectors \psi_{m} that satisfy \phi_{m}=C_{m}\psi_{m} (see the argument constraints).

For restricted models:

Size (3M+M-M1+p-1x1) vector \theta=(\phi_{1,0},...,\phi_{M,0},\phi, \sigma_{1}^2,...,\sigma_{M}^2,\alpha_{1},...,\alpha_{M-1},\nu), where \phi=(\phi_{1},...,\phi_{p}) contains the AR coefficients, which are common for all regimes.

If the model imposes linear constraints on the autoregressive parameters: Replace the vector \phi with the vector \psi that satisfies \phi=C\psi (see the argument constraints).

Symbol \phi denotes an AR coefficient, \sigma^2 a variance, \alpha a mixing weight, and \nu a degrees of freedom parameter. If parametrization=="mean", just replace each intercept term \phi_{m,0} with the regimewise mean \mu_m = \phi_{m,0}/(1-\sum\phi_{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 \alpha are dropped, and in the case of StMAR or G-StMAR model, the degrees of freedom parameters \nu 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[1]) < red_criteria[2]*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(2), 247-266.

    • Meitz M., Preve D., Saikkonen P. 2023. A mixture autoregressive model based on Student's t-distribution. Communications in Statistics - Theory and Methods, 52(2), 499-515.

    • 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. 2022. A mixture autoregressive model based on Gaussian and Student's t-distributions. Studies in Nonlinear Dynamics & Econometrics, 26(4) 559-580.

Examples


## 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 Aug. 19, 2023, 5:10 p.m.