This function sets and checks the specification of controls for the fHMM package.

## Arguments

- controls
A list of controls. Either none, all, or selected parameters can be specified. Unspecified parameters are set to default values (the values in brackets). If

`hierarchy = TRUE`

, parameters with a`(*)`

must be a vector of length 2, where the first entry corresponds to the coarse-scale and the second entry to the fine-scale layer.`hierarchy`

(`FALSE`

): A boolean, set to`TRUE`

for an hierarchical HMM.`states`

`(*)`

(`2`

): The number of states of the underlying Markov chain.`sdds`

`(*)`

(`"t(df = Inf)"`

): Specifying the state-dependent distribution, one of the`"t"`

(the t-distribution) or`"gamma"`

(the gamma distribution). To fix one or more parameter values, write e.g.`"t(df = Inf)"`

or`"gamma(mu = 0, sigma = 1)"`

, respectively. To fix different values of one parameter for different states, separate by "|", e.g.`"t(mu = -1|1)"`

.`horizon`

`(*)`

(`100`

): A numeric, specifying the length of the time horizon. The first entry of`horizon`

is ignored if`data`

is specified.`period`

(`"m"`

): Only relevant if`hierarchy = TRUE`

and`horizon[2] = NA`

. In this case, it specifies a flexible, periodic fine-scale time horizon and can be one of`"w"`

for a week,`"m"`

for a month,`"q"`

for a quarter,`"y"`

for a year.

`data`

(`NA`

): A list of controls specifying the data. If`data = NA`

, data gets simulated. Otherwise:`file`

`(*)`

: A character, the path to a .csv-file with financial data, which must have a column named`date_column`

(with dates) and`data_column`

(with financial data).`date_column`

`(*)`

(`"Date"`

): A character, the name of the column in`file`

with dates. Can be`NA`

in which case consecutive integers are used as time points.`data_column`

`(*)`

(`"Close"`

): A character, the name of the column in`file`

with financial data.`from`

(`NA`

): A character of the format`"YYYY-MM-DD"`

, setting a lower data limit. No lower limit if`from = NA`

. Ignored if`controls$data$date_column`

is`NA`

.`to`

(`NA`

): A character of the format`"YYYY-MM-DD"`

, setting an upper data limit. No upper limit if`from = NA`

. Ignored if`controls$data$date_column`

is`NA`

.`logreturns`

`(*)`

(`FALSE`

): A boolean, if`TRUE`

the data is transformed to log-returns.`merge`

(`function(x) mean(x)`

): Only relevant if`hierarchy = TRUE`

. In this case, a function, which merges a numeric vector of fine-scale data`x`

into one coarse-scale observation. For example,`merge = function(x) mean(x)`

defines the mean of the fine-scale data as the coarse-scale observation,`merge = function(x) mean(abs(x))`

for the mean of the absolute values,`merge = function(x) (abs(x))`

for the sum of of the absolute values,`merge = function(x) (tail(x,1)-head(x,1))/head(x,1)`

for the relative change of the first to the last fine-scale observation.

`fit`

: A list of controls specifying the model fitting:`runs`

(`100`

): An integer, setting the number of optimization runs.`origin`

(`FALSE`

): A boolean, if`TRUE`

the optimization is initialized at the true parameter values. Only for simulated data. If`origin = TRUE`

, this sets`run = 1`

and`accept = 1:5`

.`accept`

(`1:3`

): An integer (vector), specifying which optimization runs are accepted based on the output code of`nlm`

.`gradtol`

(`1e-6`

): A positive numeric value, passed on to`nlm`

.`iterlim`

(`200`

): A positive integer, passed on to`nlm`

.`print.level`

(`0`

): One of`0`

,`1`

, and`2`

, passed on to`nlm`

.`steptol`

(`1e-6`

): A positive numeric value, passed on to`nlm`

.

## Examples

```
### HMM controls
controls <- list(
states = 2,
sdds = "t(mu = 0, sigma = 1, df = 1)",
horizon = 400,
fit = list("runs" = 50)
)
set_controls(controls)
#> fHMM controls:
#> * hierarchy: FALSE
#> * data type: simulated
#> * number of states: 2
#> * sdds: t(mu = 0, sigma = 1, df = 1)
#> * number of runs: 50
### HHMM controls
controls <- list(
hierarchy = TRUE
)
set_controls(controls)
#> fHMM controls:
#> * hierarchy: TRUE
#> * data type: simulated
#> * number of states: 2 2
#> * sdds: t() t()
#> * number of runs: 100
```