Skip to contents

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

Usage

# S3 method for vlmc
predict(object, newdata, type = c("raw", "probs"), final_pred = TRUE, ...)

# S3 method for vlmc_cpp
predict(object, newdata, type = c("raw", "probs"), final_pred = TRUE, ...)

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.

Value

A vector of predictions if type="raw" or a matrix of state probabilities if type="probs".

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