Note
Click here to download the full example code
Estimate a multivariate ARMA processΒΆ
The objective of the Use Case is to estimate a multivariate ARMA model from a stationary time series using the maximum likelihood estimator and a centered normal white noise. The data can be a unique time series or several time series collected in a process sample.
We estimate thanks to the ARMALikelihoodFactory object and its method build, acting on a time series or on a sample of time series. It produces a result of type ARMA. Note that no evaluation of selection criteria such as AIC and BIC is done.
The synthetic data is generated from the 2-d ARMA model:
with E the white noise:
from __future__ import print_function
import openturns as ot
ot.Log.Show(ot.Log.NONE)
Create a 2-d ARMA process
p = 2
q = 1
dim = 2
# Tmin , Tmax and N points for TimeGrid
dt = 1.0
size = 400
timeGrid = ot.RegularGrid(0.0, dt, size)
# white noise
cov = ot.CovarianceMatrix([[0.1, 0.0], [0.0, 0.2]])
whiteNoise = ot.WhiteNoise(ot.Normal([0.0] * dim, cov), timeGrid)
# AR/MA coefficients
ar = ot.ARMACoefficients(p, dim)
ar[0] = ot.SquareMatrix([[-0.5, -0.1], [-0.4, -0.5]])
ar[1] = ot.SquareMatrix([[0.0, 0.0], [-0.25, 0.0]])
ma = ot.ARMACoefficients(q, dim)
ma[0] = ot.SquareMatrix([[-0.4, 0.0], [0.0, -0.4]])
# ARMA model creation
arma = ot.ARMA(ar, ma, whiteNoise)
arma
ARMA(X_{0,t} - 0.5 X_{0,t-1} - 0.1 X_{1,t-1} = E_{0,t} - 0.4 E_{0,t-1}
X_{1,t} - 0.4 X_{0,t-1} - 0.5 X_{1,t-1} - 0.25 X_{0,t-2} = E_{1,t} - 0.4 E_{1,t-1}, E_t ~ Normal(mu = [0,0], sigma = [0.316228,0.447214], R = [[ 1 0 ]
[ 0 1 ]]))
Create a realization
timeSeries = ot.TimeSeries(arma.getRealization())
Estimate the process from the previous realization
factory = ot.ARMALikelihoodFactory(p, q, dim)
factory.setInitialConditions(ar, ma, cov)
arma_est = ot.ARMA(factory.build(timeSeries))
print('Estimated ARMA= ', arma_est)
Out:
Estimated ARMA= ARMA(X_{0,t} - 0.497699 X_{0,t-1} - 0.248351 X_{1,t-1} + 0.0761218 X_{0,t-2} + 0.0862422 X_{1,t-2} = E_{0,t} - 0.40865 E_{0,t-1} - 0.0493545 E_{1,t-1}
X_{1,t} - 0.342356 X_{0,t-1} - 0.753569 X_{1,t-1} - 0.0749028 X_{0,t-2} + 0.0364504 X_{1,t-2} = E_{1,t} + 0.0303603 E_{0,t-1} - 0.620184 E_{1,t-1}, E_t ~ Normal(mu = [0,0], sigma = [0.31048,0.444706], R = [[ 1 -0.0821208 ]
[ -0.0821208 1 ]]))
Total running time of the script: ( 0 minutes 3.716 seconds)