Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_rand_times_garch_asym1 (g05pd)

## Purpose

nag_rand_times_garch_asym1 (g05pd) generates a given number of terms of a type I AGARCH(p,q)$\text{AGARCH}\left(p,q\right)$ process (see Engle and Ng (1993)).

## Syntax

[ht, et, r, state, ifail] = g05pd(dist, num, ip, iq, theta, gamma, df, fcall, r, state, 'lr', lr)
[ht, et, r, state, ifail] = nag_rand_times_garch_asym1(dist, num, ip, iq, theta, gamma, df, fcall, r, state, 'lr', lr)

## Description

A type I AGARCH(p,q)$\text{AGARCH}\left(p,q\right)$ process can be represented by:
 q p ht = α0 + ∑ αi(εt − i + γ)2 + ∑ βiht − i,  t = 1,2, … ,T; i = 1 i = 1
$ht = α0 + ∑i=1q αi ( εt-i + γ ) 2 + ∑i=1p βi ht-i , t=1,2,…,T ;$
where εt ψt1 = N (0,ht) ${\epsilon }_{t}\mid {\psi }_{t-1}=N\left(0,{h}_{t}\right)$ or εt ψt1 = St (df,ht) ${\epsilon }_{t}\mid {\psi }_{t-1}={S}_{t}\left(\mathit{df},{h}_{t}\right)$. Here St${S}_{t}$ is a standardized Student's t$t$-distribution with df$\mathit{df}$ degrees of freedom and variance ht${h}_{t}$, T$T$ is the number of observations in the sequence, εt${\epsilon }_{t}$ is the observed value of the GARCH(p,q)$\text{GARCH}\left(p,q\right)$ process at time t$t$, ht${h}_{t}$ is the conditional variance at time t$t$, and ψt${\psi }_{t}$ the set of all information up to time t$t$. Symmetric GARCH sequences are generated when γ$\gamma$ is zero, otherwise asymmetric GARCH sequences are generated with γ$\gamma$ specifying the amount by which positive (or negative) shocks are to be enhanced.
One of the initialization functions nag_rand_init_repeat (g05kf) (for a repeatable sequence if computed sequentially) or nag_rand_init_nonrepeat (g05kg) (for a non-repeatable sequence) must be called prior to the first call to nag_rand_times_garch_asym1 (g05pd).

## References

Bollerslev T (1986) Generalised autoregressive conditional heteroskedasticity Journal of Econometrics 31 307–327
Engle R (1982) Autoregressive conditional heteroskedasticity with estimates of the variance of United Kingdom inflation Econometrica 50 987–1008
Engle R and Ng V (1993) Measuring and testing the impact of news on volatility Journal of Finance 48 1749–1777
Hamilton J (1994) Time Series Analysis Princeton University Press

## Parameters

### Compulsory Input Parameters

1:     dist – string (length ≥ 1)
The type of distribution to use for εt${\epsilon }_{t}$.
dist = 'N'${\mathbf{dist}}=\text{'N'}$
A Normal distribution is used.
dist = 'T'${\mathbf{dist}}=\text{'T'}$
A Student's t$t$-distribution is used.
Constraint: dist = 'N'${\mathbf{dist}}=\text{'N'}$ or 'T'$\text{'T'}$.
2:     num – int64int32nag_int scalar
T$T$, the number of terms in the sequence.
Constraint: num0${\mathbf{num}}\ge 0$.
3:     ip – int64int32nag_int scalar
The number of coefficients, βi${\beta }_{\mathit{i}}$, for i = 1,2,,p$\mathit{i}=1,2,\dots ,p$.
Constraint: ip0${\mathbf{ip}}\ge 0$.
4:     iq – int64int32nag_int scalar
The number of coefficients, αi${\alpha }_{\mathit{i}}$, for i = 1,2,,q$\mathit{i}=1,2,\dots ,q$.
Constraint: iq1${\mathbf{iq}}\ge 1$.
5:     theta(iq + ip + 1${\mathbf{iq}}+{\mathbf{ip}}+1$) – double array
The first element must contain the coefficient αo${\alpha }_{o}$, the next iq elements must contain the coefficients αi${\alpha }_{\mathit{i}}$, for i = 1,2,,q$\mathit{i}=1,2,\dots ,q$. The remaining ip elements must contain the coefficients βj${\beta }_{\mathit{j}}$, for j = 1,2,,p$\mathit{j}=1,2,\dots ,p$.
Constraints:
• i = 2iq + ip + 1 theta(i) < 1.0$\sum _{\mathit{i}=2}^{{\mathbf{iq}}+{\mathbf{ip}}+1}{\mathbf{theta}}\left(\mathit{i}\right)<1.0$;
• theta(i)0.0${\mathbf{theta}}\left(\mathit{i}\right)\ge 0.0$, for i = 2,3,,ip + iq + 1$\mathit{i}=2,3,\dots ,{\mathbf{ip}}+{\mathbf{iq}}+1$.
6:     gamma – double scalar
The asymmetry parameter γ$\gamma$ for the GARCH(p,q)$\text{GARCH}\left(p,q\right)$ sequence.
7:     df – int64int32nag_int scalar
The number of degrees of freedom for the Student's t$t$-distribution.
If dist = 'N'${\mathbf{dist}}=\text{'N'}$, df is not referenced.
Constraint: if dist = 'T'${\mathbf{dist}}=\text{'T'}$, df > 2${\mathbf{df}}>2$.
8:     fcall – logical scalar
If fcall = true${\mathbf{fcall}}=\mathbf{true}$, a new sequence is to be generated, otherwise a given sequence is to be continued using the information in r.
9:     r(lr) – double array
lr, the dimension of the array, must satisfy the constraint lr2 × (ip + iq + 2)${\mathbf{lr}}\ge 2×\left({\mathbf{ip}}+{\mathbf{iq}}+2\right)$.
The array contains information required to continue a sequence if fcall = false${\mathbf{fcall}}=\mathbf{false}$.
10:   state( : $:$) – int64int32nag_int array
Note: the actual argument supplied must be the array state supplied to the initialization routines nag_rand_init_repeat (g05kf) or nag_rand_init_nonrepeat (g05kg).
Contains information on the selected base generator and its current state.

### Optional Input Parameters

1:     lr – int64int32nag_int scalar
Default: The dimension of the array r.
The dimension of the array r as declared in the (sub)program from which nag_rand_times_garch_asym1 (g05pd) is called.
Constraint: lr2 × (ip + iq + 2)${\mathbf{lr}}\ge 2×\left({\mathbf{ip}}+{\mathbf{iq}}+2\right)$.

None.

### Output Parameters

1:     ht(num) – double array
The conditional variances ht${h}_{\mathit{t}}$, for t = 1,2,,T$\mathit{t}=1,2,\dots ,T$, for the GARCH(p,q)$\text{GARCH}\left(p,q\right)$ sequence.
2:     et(num) – double array
The observations εt${\epsilon }_{\mathit{t}}$, for t = 1,2,,T$\mathit{t}=1,2,\dots ,T$, for the GARCH(p,q)$\text{GARCH}\left(p,q\right)$ sequence.
3:     r(lr) – double array
Contains information that can be used in a subsequent call of nag_rand_times_garch_asym1 (g05pd), with fcall = false${\mathbf{fcall}}=\mathbf{false}$.
4:     state( : $:$) – int64int32nag_int array
Note: the actual argument supplied must be the array state supplied to the initialization routines nag_rand_init_repeat (g05kf) or nag_rand_init_nonrepeat (g05kg).
Contains updated information on the state of the generator.
5:     ifail – int64int32nag_int scalar
${\mathrm{ifail}}={\mathbf{0}}$ unless the function detects an error (see [Error Indicators and Warnings]).

## Error Indicators and Warnings

Errors or warnings detected by the function:
ifail = 1${\mathbf{ifail}}=1$
 On entry, dist ≠ 'N'${\mathbf{dist}}\ne \text{'N'}$ or 'T'$\text{'T'}$.
ifail = 2${\mathbf{ifail}}=2$
 On entry, num < 0${\mathbf{num}}<0$.
ifail = 3${\mathbf{ifail}}=3$
 On entry, ip < 0${\mathbf{ip}}<0$.
ifail = 4${\mathbf{ifail}}=4$
 On entry, iq < 1${\mathbf{iq}}<1$.
ifail = 5${\mathbf{ifail}}=5$
On entry, at least one theta(i) < 0.0${\mathbf{theta}}\left(\mathit{i}\right)<0.0$, for i = 2,3,,ip + iq + 1$\mathit{i}=2,3,\dots ,{\mathbf{ip}}+{\mathbf{iq}}+1$.
ifail = 51${\mathbf{ifail}}=51$
On entry, i theta(i)1.0${\sum }_{\mathit{i}}{\mathbf{theta}}\left(\mathit{i}\right)\ge 1.0$, for i = 2,3,,ip + iq + 1$\mathit{i}=2,3,\dots ,{\mathbf{ip}}+{\mathbf{iq}}+1$.
ifail = 7${\mathbf{ifail}}=7$
 On entry, dist = 'T'${\mathbf{dist}}=\text{'T'}$ and df ≤ 2${\mathbf{df}}\le 2$.
ifail = 11${\mathbf{ifail}}=11$
The value of ip or iq is not the same as when r was set up in a previous call.
ifail = 12${\mathbf{ifail}}=12$
 On entry, lr < 2 × (ip + iq + 2)${\mathbf{lr}}<2×\left({\mathbf{ip}}+{\mathbf{iq}}+2\right)$.
ifail = 13${\mathbf{ifail}}=13$
 On entry, state vector was not initialized or has been corrupted.

Not applicable.

None.

## Example

```function nag_rand_times_garch_asym1_example
% Initialize the seed
seed = [int64(1762543)];
% genid and subid identify the base generator
genid = int64(1);
subid =  int64(1);

dist = 'N';
num = 10;
ip = 0;
iq = 3;
theta = [0.8; 0.6; 0.2; 0.1];
gamma = -0.4;
df = int64(0);
fcall = true;
r = zeros(2*(ip+iq+2),1);
% Initialize the generator to a repeatable sequence
[state, ifail] = nag_rand_init_repeat(genid, subid, seed);

% Generate the first realisation
[ht, et, r, state, ifail] = ...
nag_rand_times_garch_asym1(dist, int64(num), int64(ip), int64(iq), theta, gamma, df, fcall, r, state);
% Display the results
if ifail == 0
fprintf('\n Realisation Number 1\n');
fprintf('   I            HT(I)            ET(I)\n');
fprintf('  --------------------------------------\n');
for i=1:num
fprintf('  %2d  %16.4f %16.4f\n', i, ht(i), et(i));
end
else
fprintf('\n nag_rand_times_garch_asym1 exited with ifail = %d \n', ifail);
end

% Generate a second realisation
fcall = false;
[ht, et, r, state, ifail] = ...
nag_rand_times_garch_asym1(dist, int64(num), int64(ip), int64(iq), theta, gamma, df, fcall, r, state);
% Display the results
if ifail == 0
fprintf('\n Realisation Number 2\n');
fprintf('   I            HT(I)            ET(I)\n');
fprintf('  --------------------------------------\n');
for i=1:num
fprintf('  %2d  %16.4f %16.4f\n', i, ht(i), et(i));
end
else
fprintf('\n nag_rand_times_garch_asym1 exited with ifail = %d \n', ifail);
end
```
```

Realisation Number 1
I            HT(I)            ET(I)
--------------------------------------
1            0.9440           0.3389
2            0.8502          -1.1484
3            2.2553           0.9943
4            1.4918           1.0204
5            1.3413          -1.4544
6            2.9757          -0.0326
7            1.6386          -0.3767
8            1.5433           0.9892
9            1.1477          -0.0049
10            1.0281           0.4508

Realisation Number 2
I            HT(I)            ET(I)
--------------------------------------
1            0.8691          -1.5286
2            3.0485          -1.1339
3            2.9558           0.5424
4            1.6547          -2.0734
5            4.7100           0.5153
6            2.0336          -0.8373
7            2.3331          -1.0912
8            2.4417           3.8999
9            8.7473           3.8171
10           10.4783           0.2480

```
```function g05pd_example
% Initialize the seed
seed = [int64(1762543)];
% genid and subid identify the base generator
genid = int64(1);
subid =  int64(1);

dist = 'N';
num = 10;
ip = 0;
iq = 3;
theta = [0.8; 0.6; 0.2; 0.1];
gamma = -0.4;
df = int64(0);
fcall = true;
r = zeros(2*(ip+iq+2),1);
% Initialize the generator to a repeatable sequence
[state, ifail] = g05kf(genid, subid, seed);

% Generate the first realisation
[ht, et, r, state, ifail] = g05pd(dist, int64(num), int64(ip), int64(iq), theta, gamma, df, fcall, r, state);
% Display the results
if ifail == 0
fprintf('\n Realisation Number 1\n');
fprintf('   I            HT(I)            ET(I)\n');
fprintf('  --------------------------------------\n');
for i=1:num
fprintf('  %2d  %16.4f %16.4f\n', i, ht(i), et(i));
end
else
fprintf('\n g05pd exited with ifail = %d \n', ifail);
end

% Generate a second realisation
fcall = false;
[ht, et, r, state, ifail] = g05pd(dist, int64(num), int64(ip), int64(iq), theta, gamma, df, fcall, r, state);
% Display the results
if ifail == 0
fprintf('\n Realisation Number 2\n');
fprintf('   I            HT(I)            ET(I)\n');
fprintf('  --------------------------------------\n');
for i=1:num
fprintf('  %2d  %16.4f %16.4f\n', i, ht(i), et(i));
end
else
fprintf('\n g05pd exited with ifail = %d \n', ifail);
end
```
```

Realisation Number 1
I            HT(I)            ET(I)
--------------------------------------
1            0.9440           0.3389
2            0.8502          -1.1484
3            2.2553           0.9943
4            1.4918           1.0204
5            1.3413          -1.4544
6            2.9757          -0.0326
7            1.6386          -0.3767
8            1.5433           0.9892
9            1.1477          -0.0049
10            1.0281           0.4508

Realisation Number 2
I            HT(I)            ET(I)
--------------------------------------
1            0.8691          -1.5286
2            3.0485          -1.1339
3            2.9558           0.5424
4            1.6547          -2.0734
5            4.7100           0.5153
6            2.0336          -0.8373
7            2.3331          -1.0912
8            2.4417           3.8999
9            8.7473           3.8171
10           10.4783           0.2480

```

Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013