# Next state prediction in a discrete time series for a VLMC

Source:`R/vlmc_predict.R`

, `R/vlmc_predict_cpp.R`

`predict.vlmc.Rd`

This function computes one step ahead predictions for a discrete time series based on a VLMC.

## Arguments

- object
a fitted vlmc object.

- newdata
a time series adapted to the vlmc object.

- type
character indicating the type of prediction required. The default

`"raw"`

returns actual predictions in the form of a new time series. The alternative`"probs"`

returns a matrix of prediction probabilities (see details).- final_pred
if

`TRUE`

(default value), the predictions include a final prediction step, made by computing the context of the full time series. When`FALSE`

this final prediction is not included.- ...
additional arguments.

## Details

Given a time series `X`

, at time step `t`

, a context is computed using
observations from `X[1]`

to `X[t-1]`

(see the dedicated section). The
prediction is then the most probable state for `X[t]`

given this contexts.
Ties are broken according to the natural order in the state space, favouring
"small" values. The time series of predictions is returned by the function
when `type="raw"`

(default case).

When `type="probs"`

, each `X[t]`

is associated to the conditional
probabilities of the next state given the context. Those probabilities are
returned as a matrix of probabilities with column names given by the state
names.

## Extended contexts

As explained in details in `loglikelihood.vlmc()`

documentation and in the
dedicated `vignette("likelihood", package = "mixvlmc")`

, the first initial
values of a time series do not in general have a proper context for a VLMC
with a non zero order. In order to predict something meaningful for those
values, we rely on the notion of extended context defined in the documents
mentioned above. This follows the same logic as using
`loglikelihood.vlmc()`

with the parameter `initial="extended"`

. All vlmc
functions that need to manipulate initial values with no proper context use
the same approach.

## Examples

```
pc <- powerconsumption[powerconsumption$week == 5, ]
dts <- cut(pc$active_power, breaks = c(0, quantile(pc$active_power, probs = c(0.25, 0.5, 0.75, 1))))
model <- vlmc(dts, min_size = 5)
predict(model, dts[1:5])
#> [1] (0,0.458] (0.458,1.34] (0.458,1.34] (0.458,1.34] (0.458,1.34]
#> [6] (0.458,1.34]
#> Levels: (0,0.458] (0.458,1.34] (1.34,2.13] (2.13,7.54]
predict(model, dts[1:5], "probs")
#> (0,0.458] (0.458,1.34] (1.34,2.13] (2.13,7.54]
#> [1,] 0.2500000 0.2500000 0.2500000 0.25000000
#> [2,] 0.1984127 0.6666667 0.1071429 0.02777778
#> [3,] 0.1369048 0.7500000 0.0952381 0.01785714
#> [4,] 0.1369048 0.7500000 0.0952381 0.01785714
#> [5,] 0.1369048 0.7500000 0.0952381 0.01785714
#> [6,] 0.1369048 0.7500000 0.0952381 0.01785714
## C++ backend
pc <- powerconsumption[powerconsumption$week == 5, ]
dts <- cut(pc$active_power, breaks = c(0, quantile(pc$active_power, probs = c(0.25, 0.5, 0.75, 1))))
model <- vlmc(dts, min_size = 5, backend = "C++")
predict(model, dts[1:5])
#> [1] (0,0.458] (0.458,1.34] (0.458,1.34] (0.458,1.34] (0.458,1.34]
#> [6] (0.458,1.34]
#> Levels: (0,0.458] (0.458,1.34] (1.34,2.13] (2.13,7.54]
predict(model, dts[1:5], "probs")
#> (0,0.458] (0.458,1.34] (1.34,2.13] (2.13,7.54]
#> [1,] 0.2500000 0.2500000 0.2500000 0.25000000
#> [2,] 0.1984127 0.6666667 0.1071429 0.02777778
#> [3,] 0.1369048 0.7500000 0.0952381 0.01785714
#> [4,] 0.1369048 0.7500000 0.0952381 0.01785714
#> [5,] 0.1369048 0.7500000 0.0952381 0.01785714
#> [6,] 0.1369048 0.7500000 0.0952381 0.01785714
```