Моделирование многомерных данных GARCH в MATLAB - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь смоделировать многомерные данные GARCH в MATLAB, используя набор инструментов Кевина Шепперда.

Документация, которую он дает с кодом, очень легкая, поэтому мне было интересно, имел ли кто-то опыт с этим.

Вот документация.

function [data, Ht] = bekk_simulate(T,k,parameters,p,o,q,type)
% Simulation of symmetric and asymmetric BEKK(p,o,q) multivariate volatility models
%
% USAGE:
%  [DATA,HT] = bekk_simulate(T,K,PARAMETERS,P,O,Q,TYPE)
%
% INPUTS:
%   T          - Either a scalar containing the length of the series to simulate, or a T by K matrix 
%                  of simulated random variables.  The default is to use standard normals.  Providing 
%                  a T by K matrix allows other distributions to be used.
%   PARAMETERS - Vector of parameters.  The form of the parameters depends on the TYPE.  
%                  'Scalar':
%                  [CC' a(1) ... a(p) g(1) ... g(o) b(1) ... b(q)]'  (all scalars)
%                  'Diagonal' 
%                  [CC' diag(A(:,:,1))' ... diag(A(:,:,p))' diag(G(:,:,1))' ... diag(G(:,:,o))' diag(B(:,:,1))' ... diag(B(:,:,p))']'
%                  'Full' 
%                  [CC' f(A(:,:,1)) ... f(A(:,:,p)) f(G(:,:,1)) ... f(G(:,:,o)) f(B(:,:,1)) ... f(B(:,:,q))]'
%                  where CC = chol2vec(C')' and f(M) = M(:)'
%   P          - Positive, scalar integer representing the number of symmetric innovations
%   O          - Non-negative, scalar integer representing the number of asymmetric innovations
%   Q          - Non-negative, scalar integer representing the number of conditional covariance lags
%   TYPE       - String, one of :
%                  'Scalar' (Default) 
%                  'Diagonal'
%                  'Full'
%
% OUTPUTS:
%   DATA   - A T by K matrix of simulated data
%   HT     - A [K K T] dimension matrix of conditional covariances
%
% COMMENTS:
%   The dynamics of a BEKK are given by 
%   
%   H(:,:,t) = C*C' +
%       A(:,:,1)'*OP(:,:,t-1)*A(:,:,1) + ... + A(:,:,p)'*OP(:,:,t-1)*A(:,:,p) +
%       G(:,:,1)'*OPA(:,:,t-1)*G(:,:,1) + ... + G(:,:,o)'*OPA(:,:,t-1)*G(:,:,o) +
%       B(:,:,1)'*G(:,:,t-1)*B(:,:,1) + ... + B(:,:,q)'*OP(:,:,t-1)*B(:,:,q)
%
%   where in the scalar model A(:,:,i) = a(i)*eye(K) (similarly for G and B).
%
%  EXAMPLES:
%    % Scalar with A.^2=.05, G.^2=.1 and B.^2=.88
%    CCp = [1 .5;.5 4];
%    parameters = [chol2vec(chol(CCp)');sqrt([.05,.10,.88])']
%    [data,Ht] = bekk_simulate(1000,2,parameters,1,1,1,'Scalar')
%    % Diagonal 
%    parameters = [chol2vec(chol(CCp)');sqrt([.05 .07 .93 .88])']
%    [data,Ht] = bekk_simulate(1000,2,parameters,1,0,1,'Diagonal')
%
% See also BEKK

Допустим, я оцениваю модель GARCH, я сделал это в RATS и хочу сгенерировать некоторые данные на основе этой спецификации, как я могу сделать это, используя вышеуказанную функцию:

5.  C(1,1)                        0.997031034  0.508107063      1.96225  0.04973386
6.  C(2,1)                        1.733801614  0.123673427     14.01919  0.00000000
7.  C(2,2)                       -1.176292837  0.086098995    -13.66210  0.00000000
8.  A(1,1)                        0.298475449  0.046993702      6.35139  0.00000000
9.  A(1,2)                       -0.124095879  0.070112013     -1.76997  0.07673281
10. A(2,1)                        0.061551419  0.031864938      1.93163  0.05340461
11. A(2,2)                        0.355969936  0.039672897      8.97262  0.00000000
12. B(1,1)                        1.147042406  0.035509033     32.30283  0.00000000
13. B(1,2)                        0.741209244  0.037170906     19.94058  0.00000000

Из документации я бы предположил, что то, что у меня есть, заполнено, и я мог бы просто смоделировать данные с помощью этого ввода:

C = [0.997 1.734 -1.176];
A = [0.298 -0.124 0.062 0.356];
B = [1.147 0.741 -0.400 0.468];
parameters =[C A(:)' B(:)' ]'; %this is for the BEKK(1,1)
    [errors, Ht] = bekk_simulate(nobs,k,parameters,1,0,1,'Full');

Тогда я, очевидно, заполнил бы недостающие вещи, которые мне нужны для запуска функции.

Коллега задал вопрос о том, должен ли я сначала получить квадратный корень для параметров?

...