Reintroduction of AR and GARCH processes in MATLAB

161 views Asked by At

I am trying reintroduce autocorrelation and heteroskedasticity to my simulated residuals. My simulated (standardized) residuals have the dimension (horizon, nTrials, nIndices). In order to calculate today's mean / variance (i.e. t), I need to use the last periods mean /variance (i.e. t-1) as an input. This is where I am stuck, I can't get this part of the code to run. I try to specify the use of last periods value by {t-1} (for example in R_{t-1}), but I receive the error message that R_ is undefined.

I would be very happy about any hints on where I am going wrong here.

Carolin

for i=1:nIndices
  for j=1:nTrials
        for t=1:horizon
        R_t       = AA_alpha(i,:) + AA_beta(i,:) * R_{t-1} + sqrt(h_{t-1}) * Z(t,j,i);
        h_t       = AA_alpha1(i,:)+AA_GARCH(i,:)*variances(j,i)+AA_ARCH(i,:)*Z({t-1},j,i) + AA_LEVERAGE*ZCopy{t-1}  
        TR_t      = TR_{t-1} * exp(R_t);
        end
    end
end
1

There are 1 answers

2
Jean-Paul On BEST ANSWER

I think you are a bit confused about how matrix indexing works in Matlab.

If understood correctly, you have a variable TR_t with which you want to store the value for time t. You then try to do the following:

TR_t      = TR_{t-1} * exp(R_t);

I will try to explain in words what you are doing here:

Set scalar 'TR_t' as follows:
> Take cell matrix 'TR_' and take cell t-1
> Then multiply with exp(R_t)

There are multiple problems with this statement. First of all, the variable TR_ doesn't exist because you named it TR_t. Second of all, you are trying to index this scalar as if it is a cell matrix.

Before proceeding, I suggest you carefully study the Matrix Indexing Article and try again.

But just to help you understand what is going on quicker, here is a rewritten version of your code with explanation so you can follow what I'm doing.

// Variables that should already contain values before the loop starts
//**************************************************************************************
// >NAME<        >INITIALISATION EXAMPLE<              >DIMENSION<
//**************************************************************************************
AA_LEVERAGE = ?  //zeros(1,1);                         // Should be a scalar
ZCopy       = ?  //zeros(1, horizon);                  // (1 x horizon)
variances   = ?  //zeros(nTrials, nIndices);           // (nTrials x nIndices) 
AA_alpha    = ?  //zeros(nIndices, horizon);           // (nIndices x horizon)
AA_alpha1   = ?  //zeros(nIndices, horizon);           // (nIndices x horizon)
AA_beta     = ?  //zeros(nIndices, horizon);           // (nIndices x horizon)
AA_GARCH    = ?  //zeros(nIndices, horizon);           // (nIndices x horizon)
AA_ARCH     = ?  //zeros(nIndices, horizon);           // (nIndices x horizon)
Z           = ?  //zeros(nIndices, nTrials, horizon);  // (nIndices x nTrials x horizon)
SAVE_R      = zeros(nIndices, nTrials, horizon);       // (nIndices x nTrials x horizon)
SAVE_h      = zeros(nIndices, nTrials, horizon);       // (nIndices x nTrials x horizon)
SAVE_TR     = zeros(nIndices, nTrials, horizon);       // (nIndices x nTrials x horizon)

//**************************************************************************************
// START OF PROGRAM
//**************************************************************************************

for i=1:1:nIndices               // For i number of indices  (increment 1)
  for j=1:1:nTrials              // For j number of trials   (increment 1)

        R  = zeros(1,horizon);   // Re-initialise empty matrix (1 x horizon)
        h  = zeros(1,horizon);   // Re-initialise empty matrix (1 x horizon)
        TR = zeros(1,horizon);   // Re-initialise empty matrix (1 x horizon)

        for t=2:1:horizon        // For t number of horizons (increment 1) (start at 2)

           // Assumes R(1,1) is known
           R(1,t)  = AA_alpha(i,:)+AA_beta(i,:)*R(1,t-1)+sqrt(h(1,t-1))*Z(i,j,t);

           // Assumes ZCopy(1,1) is known
           h(1,t)  = AA_alpha1(i,:)+AA_GARCH(i,:)*variances(j,i)+AA_ARCH(i,:)*...
                     Z(i,j,t-1)+AA_LEVERAGE*ZCopy(1,t-1); 

           // Assumes TR(1,1) is known
           TR(1,t) = TR(1,t-1)*exp(R(1,t));
        end

        // Save matrices R, h and TR before end of inner loop otherwise ..              
        //  .. their information will be lost

        // For example, you can store their values as follows:
        SAVE_R(i,j,:)  = R(1,:);
        SAVE_h(i,j,:)  = h(1,:);
        SAVE_TR(i,j,:) = TR(1,:);

    end
end

// If all variables initialised correctly, should produce output
// Written for StackOverflow question: http://stackoverflow.com/questions/30789390/

I hope that helps with your understanding of how Matlab works. If you want help with your code in general, consider posting your code on Code Review Stack Exchange to get constructive criticism and suggestions for making your code better and cleaner.