2017-07-06 5 views
1

Ich brauche eine Schätzungsprozedur für n Zeitreihe (n Vektoren von T Beobachtungen). Ich habe die Formel, um meine Variable zu bewerten (mit einer for-Schleife), aber ich muss diese n mal wiederholen (die Anzahl der Vektoren).Doppel für Schleife MATLAB

h0 = var(residuals); 
ht=zeros(T,n); ht(T,1)=h0; 
for i=2:T 
    ht(i) = theta(1) + theta(2)*residuals(i-1)^2 + theta(3)*ht(i-1); 
end   

Also diese Schleife berechnet ht für alle Beobachtungen in Serie, aber ich brauche eine andere für Schleife, die mir diese Formel für alle der Serie zu verwenden, hilft.


Edit: Dies ist, was ich auf der Grundlage der unten Antwort getan haben:

function ht = VarEQ(theta,residuals)  
    [T,n] = size(residuals) 
    for k=1:n 
     h0 = var(residuals(:,k)); 
     ht=zeros(T,n); ht(1,k)=h0;  
     for i=2:T 
      ht(i,k) = theta(1,k) + theta(2,k)*residuals(i-1,k)^2 + theta(3,k)*ht(i-1,k); 
     end 
    end 
end 

Aktuelles Problem: Jetzt ht ist alle Spalten von Null und nur die letzte Spalte der korrekten Werte .


Variables

var ist ein 1xN Zeilenvektor der Varianzen. Mit k möchte ich nur den Skalar für jeden Rest.

theta ist eine 3xn-Matrix von Parametern.

residuals ist eine Txn-Matrix.

+0

Woher kommt das 'n'? – Adriaan

+0

n und T sind [T, n] = Größe (Residuen) –

Antwort

1

Dies scheint einfach gegeben, was Sie bereits eingerichtet haben:

function ht = VarEQ(theta,residuals)  
    [T,n] = size(residuals) 
    ht=zeros(T,n); % Initialise matrix OUTSIDE loop so it isn't over-written! 
    for k=1:n  % additional loop for series 1 to n 
     ht(1,k) = var(residuals(:,k));;  
     for i = 2:T 
      % Ensure you are referencing the kth series 
      ht(i,k) = theta(1,k) + theta(2,k)*residuals(i-1,k)^2 + theta(3,k)*ht(i-1,k); 
     end 
    end 
end 

Hinweis: zuvor alle Spalten von ht waren die gleichen, weil theta und residuals das gleiche für jede Serie waren!

Mit Ihrem aktualisierten Code und dem aktualisierten Code in dieser Antwort wurde das behoben.

+0

Bitte bearbeiten Sie Ihre Frage, um neuen Code und Informationen wie das, was in Kommentaren unklar ist, einzuschließen ... Wir brauchen auch Details darüber, welche Daten/Größen für 'var' sind , 'residents',' theta' ... – Wolfie

+1

Ihr 'ht' ist nur Nullen, weil Sie es als alle Nullen jeder Schleife definieren! Setzen Sie 'ht = Nullen (T, n);' ** vor ** die Schleife, wie in meinem Beispiel oben. Siehe meine bearbeitete Antwort. – Wolfie