# Source code for naginterfaces.library.examples.tsa.multi_inputmod_ex

```#!/usr/bin/env python3
"``naginterface.library.tsa.multi_inputmod`` Python Example."

# NAG Copyright 2017-2019.

# pylint: disable=invalid-name

from naginterfaces.library import tsa

[docs]def main():
"""
Example for :func:`naginterfaces.library.tsa.multi_inputmod_estim` and
:func:`naginterfaces.library.tsa.multi_inputmod_forecast_state`.

Multivariate time series: estimation of multi-input model and forecasting.

>>> main()
naginterfaces.library.tsa.multi_inputmod Python Example Results.
Multivariate time series: estimate and forecast.
Begin estimation.
Begin forecasting.
The forecast values and their standard errors:
No.   Value   Std error
1   97.306    4.788
2  101.785    6.328
3  103.812    7.145
4  102.073    7.360
Forecast components z(t):
Series No.: 1:
[175.413, 177.712, 179.373, 178.372]
Output noise n(t):
[-78.10695358 -75.92741605 -75.56034026 -76.29929963]
"""

print('naginterfaces.library.tsa.multi_inputmod Python Example Results.')
print('Multivariate time series: estimate and forecast.')

print('Begin estimation.')

# Orders vector of the ARIMA model for the output noise component:
mr = [1, 0, 0, 0, 0, 1, 4]
# There is one input series. Here are the transfer function model orders:
mt = [
[1, 0],
[0, 0],
[1, 0],
[3, 0],
]
# Multi-input model parameters:
para = [0., 0., 2., 0.5, 0.]
# Original undifferenced series:
xxy = [
[8.075, 105.],
[7.819, 119.],
[7.366, 119.],
[8.113, 109.],
[7.380, 117.],
[7.134, 135.],
[7.222, 126.],
[7.768, 112.],
[7.386, 116.],
[6.965, 122.],
[6.478, 115.],
[8.105, 115.],
[8.060, 122.],
[7.684, 138.],
[7.580, 135.],
[7.093, 125.],
[6.129, 115.],
[6.026, 108.],
[6.679, 100.],
[7.414, 96.],
[7.112, 107.],
[7.762, 115.],
[7.645, 123.],
[8.639, 122.],
[7.667, 128.],
[8.080, 136.],
[6.678, 140.],
[6.739, 122.],
[5.569, 102.],
[5.049, 103.],
[5.642, 89.],
[6.808, 77.],
[6.636, 89.],
[8.241, 94.],
[7.968, 104.],
[8.044, 108.],
[7.791, 119.],
[7.024, 126.],
[6.102, 119.],
[6.053, 103.],
]
# Marginal likelihood:
kef = 3
# Maximum required iterations:
nit = 20

mim_estim = tsa.multi_inputmod_estim(
mr, mt, para, xxy,
kef=kef, nit=nit,
)

print('Begin forecasting.')

# Input series for the forecast:
xxyn = [
[6.923, 0.],
[6.939, 0.],
[6.705, 0.],
[6.914, 0.],
]
# Orders for the input series:
mrx = [
[2, 0],
[0, 0],
[2, 0],
[0, 0],
[1, 0],
[1, 0],
[4, 0],
]
# Parameters for the input series:
parx = [
[1.6743, 0.],
[-0.9505, 0.],
[1.4605, 0.],
[-0.4862, 0.],
[0.8993, 0.],
]
# Estimated residual variances:
rmsxy = [0.1720, 22.9256]

mim_f = tsa.multi_inputmod_forecast_state(
mim_estim.sttf, mr, mt, mim_estim.para, xxyn, mrx, parx, rmsxy, kzef=1,
)

print('The forecast values and their standard errors:')
print('No.   Value   Std error')
for i, v in enumerate(mim_f.fva):
print('{:3d}  {:7.3f}  {:7.3f}'.format(i+1, v, mim_f.fsd[i]))
print('Forecast components z(t):')
for i in range(mim_f.xxyn.shape[1] - 1):
print('Series No.: {:d}:'.format(i + 1))
print(
'[' +
', '.join(
['{:7.3f}']*mim_f.xxyn.shape[0]
).format(*mim_f.xxyn[:, i]) +
']'
)
print('Output noise n(t):')
print(mim_f.xxyn[:, -1])

if __name__ == '__main__':
import doctest
import sys
sys.exit(
doctest.testmod(
None, verbose=True, report=False,
optionflags=doctest.REPORT_NDIFF,
).failed
)
```