random_arma
Generates a time series from a specific ARMA model.
Synopsis
#include <imsls.h>
float *imsls_f_random_arma(int n_observations, int p, float ar[], int q, float ma[], …, 0)
The type double function is imsls_d_random_arma.
Required Arguments
int n_observations (Input)
Number of observations to be generated. Parameter n_observations must be greater than or equal to one.
int p (Input)
Number of autoregressive parameters. Parameter p must be greater than or equal to zero.
float ar[] (Input)
Array of length p containing the autoregressive parameters.
int q (Input)
Number of moving average parameters. Parameter q must be greater than or equal to zero.
float ma[] (Input)
Array of length q containing the moving average parameters.
Return Value
An array of length n_observations containing the generated time series.
Synopsis with Optional Arguments
#include <imsls.h>
float *imsls_f_random_arma (int n_observations, int p, float ar[], int q, float ma[],
IMSLS_ARMA_CONSTANT, float constant,
IMSLS_VAR_NOISE, float *a_variance, or
IMSLS_INPUT_NOISE, float *a_input,
IMSLS_OUTPUT_NOISE, float **a_return,
IMSLS_OUTPUT_NOISE_USER, float a_return[],
IMSLS_NONZERO_ARLAGS, int *ar_lags,
IMSLS_NONZERO_MALAGS, int *ma_lags,
IMSLS_INITIAL_W, float *w_initial,
IMSLS_ACCEPT_REJECT_METHOD,
IMSLS_RETURN_USER, float w[],
0)
Optional Arguments
IMSLS_ARMA_CONSTANT, float constant (Input)
Overall constant. See Description.
Default: constant = 0.
IMSLS_VAR_NOISE, float a_variance (Input)
If IMSLS_VAR_NOISE is specified (and IMSLS_INPUT_NOISE is not specified) the noise at will be generated from a normal distribution with mean 0 and variance a_variance.
Default: a_variance = 1.0
or
IMSLS_INPUT_NOISE, float *a_input (Input)
If IMSLS_INPUT_NOISE is specified, the user will provide an array of length n_observations + max (ma_lags[i]) containing the random noises. If this option is specified, then IMSLS_VAR_NOISE should not be specified (a warning message will be issued and the option IMSLS_VAR_NOISE will be ignored).
IMSLS_OUTPUT_NOISE, float **a_return (Output)
An address of a pointer to an internally allocated array of length n_observations + max (ma_lags[i]) containing the random noises.
IMSLS_OUTPUT_NOISE_USER, float a_return[] (Output)
Storage for array a_return is provided by user. See IMSLS_OUTPUT_NOISE.
IMSLS_NONZERO_ARLAGS, int ar_lags[] (Input)
An array of length p containing the order of the nonzero autoregressive parameters.
Default: ar_lags = [1, 2, ..., p]
IMSLS_NONZERO_MALAGS, int ma_lags (Input)
An array of length q containing the order of the nonzero moving average parameters.
Default: ma_lags = [1, 2, ..., q]
IMSLS_INITIAL_W, float w_initial[] (Input)
Array of length max (ar_lags[i]) containing the initial values of the time series.
Default: all the elements in w_initial = constant/(1 − ar [0] − ar [1] − … − ar [p − 1])
IMSLS_ACCEPT_REJECT_METHOD, (Input)
If IMSLS_ACCEPT_REJECT_METHOD is specified, the random noises will be generated from a normal distribution using an acceptance/rejection method. If IMSLS_ACCEPT_REJECT_METHOD is not specified, the random noises will be generated using an inverse normal CDF method. This argument will be ignored if IMSLS_INPUT_NOISE is specified.
IMSLS_RETURN_USER, float r[] (Output)
User-supplied array of length n_observations containing the generated time series.
Description
Function imsls_f_random_arma simulates an ARMA(p, q) process, {Wt}, for t = 1, 2, ..., n (with n = n_observations, p = p, and q = q). The model is
Let μ be the mean of the time series {Wt}. The overall constant θ0 (constant) is
Time series whose innovations have a nonnormal distribution may be simulated by providing the appropriate innovations in a_input and start values in w_initial.
The time series is generated according to the following model:
X[i] = constant + ar[0] ∙ X[i − ar_lags[0] ] + … +
ar[p − 1] ∙ X[i − ar_lags[p − 1] ] +
A[i] − ma[0] ∙ A[i − ma_lags[0] ] − … −
ma[q − 1] ∙ A[i − ma_lags[q − 1] ]
where the constant is related to the mean of the series,
as follows:
and where
X[t] = W[t], t = 0, 1, …, n_observations − 1
and
W[t] = w_initial[t + p], t = −p, −p + 1, …, −2, −1
and A is either a_input (if IMSLS_INPUT_NOISE is specified) or a_return (otherwise).
Examples
Example 1
In this example, imsls_f_random_arma is used to generate a time series of length five, using an ARMA model with three autoregressive parameters and two moving average parameters.
#include <imsls.h>
int main()
{
int n_random = 5;
int np = 3;
float phi[3] = {0.5, 0.25, 0.125};
int nq = 2;
float theta[2] = {-0.5, -0.25};
float *r;
imsls_random_seed_set(123457);
r = imsls_f_random_arma(n_random, np, phi, nq, theta,
0);
imsls_f_write_matrix("ARMA random deviates:", 1, n_random, r,
IMSLS_NO_COL_LABELS,
0);
}
Output
ARMA random deviates:
0.863 0.809 1.904 0.110 2.266
Example 2
In this example, a time series of length 5 is generated using an ARMA model with 3 autoregressive parameters and 2 moving average parameters. The start values are 0.1, 0.05 and 0.0375. Constant and noise are also input.
#include <imsls.h>
int main()
{
int n_random = 5;
int np = 3;
float phi[3] = {0.5, 0.25, 0.125};
int nq = 2;
float theta[2] = {-0.5, -0.25};
float wi[3] = {0.1, 0.05, 0.0375};
float theta0 = 1.0;
float avar = 0.1;
float *r;
imsls_random_seed_set(123457);
r = imsls_f_random_arma(n_random, np, phi, nq, theta,
IMSLS_ACCEPT_REJECT_METHOD,
IMSLS_INITIAL_W, wi,
IMSLS_ARMA_CONSTANT, theta0,
IMSLS_VAR_NOISE, avar,
0);
imsls_f_write_matrix("ARMA random deviates:", 1, n_random, r,
IMSLS_NO_COL_LABELS,
0);
}
Output
ARMA random deviates:
1.403 2.220 2.286 2.888 2.832
Warning Errors
IMSLS_RNARM_NEG_VAR |
VAR(a) = “a_variance” = #, VAR(a) must be greater than 0. The absolute value of # is used for VAR(a). |
IMSLS_RNARM_IO_NOISE |
Both IMSLS_INPUT_NOISE and IMSLS_OUTPUT_NOISE are specified. IMSLS_INPUT_NOISE is used. |