The `{fHMM}`

package allows for multiple hidden Markov
model specifications, including different data transformations,
state-dependent distributions, and a hierarchical model structure. This
vignette^{1}
outlines what and how specifications are possible.

`set_controls`

functionThe `{fHMM}`

philosophy is to start the modeling process
by setting all data, model, and estimation specifications. This is done
by defining a named `list`

of controls and passing it to the
`set_controls()`

function. The function checks the
specifications and returns an `fHMM_controls`

object which
stores all specifications and thereby provides required information for
other `{fHMM}`

functionalities.

For demonstration, we list example specifications using data from the
Deutscher Aktienindex DAX^{2} (Janßen and Rudolph 1992):

```
download_data(symbol = "^GDAXI", file = "dax.csv")
#> Download successful.
#> * symbol: ^GDAXI
#> * from: 1987-12-30
#> * to: 2023-10-12
#> * path: C:\Users\loelschlaeger\AppData\Local\Temp\Rtmp0UK1WS\Rbuild370061d934e\fHMM\vignettes\dax.csv
```

The following lines of code specify a 3-state HMM with
state-dependent t-distributions on the data in the file dax.csv. The
dates are provided in the column called Date and the data in the column
called Close. The `logreturns = TRUE`

line transforms the
index data to log-returns. The `runs = 50`

line sets the
number of numerical optimization runs to 50.

```
controls <- list(
states = 3,
sdds = "t",
data = list(file = "dax.csv",
date_column = "Date",
data_column = "Close",
logreturns = TRUE),
fit = list(runs = 50)
)
set_controls(controls)
#> fHMM controls:
#> * hierarchy: FALSE
#> * data type: empirical
#> * number of states: 3
#> * sdds: t()
#> * number of runs: 50
```

The following specifies a 2-state HMM with state-dependent Gamma
distributions, where the expectation values for state 1 and 2 are fixed
to 0.5 and 2, respectively. The model will be fitted to 500 data points
(`horizon = 500`

), that are going to be simulated from this
model specification.

Specifying hierarchical HMMs is analogously, except that new
parameters can be specified (for example `period`

, see below)
and some parameters now can be specified for both hierarchies.

```
controls <- list(
hierarchy = TRUE,
horizon = c(100, 10),
sdds = c("t(df = 1)", "t(df = Inf)"),
period = "m"
)
set_controls(controls)
#> fHMM controls:
#> * hierarchy: TRUE
#> * data type: simulated
#> * number of states: 2 2
#> * sdds: t(df = 1) t(df = Inf)
#> * number of runs: 100
```

The help page of the `set_controls()`

function provides an
overview of all possible specifications.

Janßen, B., and B. Rudolph. 1992. “Der Deutsche Aktienindex
DAX.” *Knapp Verlag*.