' ***select group b(base)_(baskettype)*** for basket
group latam_5 brl clp cop mxn pen
' set window size
!window = 730
' set step size
!step = 1
' get size of workfile
!length = @obsrange
'calculate number of rolls
!nrolls = @floor((!length-!window)/!step)
'redundant series for catching start and end points
series ser = 1   
%start = @otod(@ifirst(ser))   
%end = @otod(@ilast(ser))
'vector to store eigenvalue proportions
vector(!nrolls) evalpc1
vector(!nrolls) evalpc2
'vector to store eigenvalues
vector(!nrolls) ev1roll
vector(!nrolls) ev2roll
'matrix to store eigenvalue proportions
vector(!nrolls) evec1
vector(!nrolls) evec2
vector(!nrolls) evec3
vector(!nrolls) evec4
vector(!nrolls) evec5

' variable keeping track of how many rolls we've done
!j=0
'move sample !step obs at a time
for !i = 1 to !length-!window+1-!step step !step
!j=!j+1
' set sample for estimation period         
%first = @otod(@dtoo(%start)+!i-2)
%last = @otod(@dtoo(%start)+!i+!window-2)
smpl {%first} {%last}      
' set sample to estimation period
' smpl @first @first+!i+!window-2

' ***change basket name*** principle component estimation - first 3 pcs
latam_5.pcomp(cor, eigval=eval, eigvec=evec) pc1 pc2 pc3
' store eigenvalue proportions which are rolling
!cumpc1 = eval(1)/@sum(eval)
evalpc1(!i) = !cumpc1
!cumpc2 = eval(2)/@sum(eval)
evalpc2(!i) = !cumpc2
' store eigenvals which are rolling
ev1roll(!I) = eval(1)
ev2roll(!I) = eval(2)
' store eigenvec (loadings) which are rolling
evec1(!i) = evec(1,1)
evec2(!i) = evec(2,1)
evec3(!i) = evec(3,1)
evec4(!i) = evec(4,1)
evec5(!i) = evec(5,1)

next
' reset sample size
smpl @first @first+!i+!window-2


