Sample objects in a rolling regression
Posted: Fri May 29, 2015 5:29 am
Hi Guys
I am trying to estimate a rolling regression with a moving window of 126 observations and a step size of 20.6. I have tried the code below and it is giving me results. However, when storing the coefficients, for each coefficient, it gives me the same value for all the 115 iterations. I think that the error is related to the way I have used my sample objects in a loop but I am failing to correct that. May you please help me on how to solve this problem. The code is as follows:
I have also attached the work file.Thank you.
I am trying to estimate a rolling regression with a moving window of 126 observations and a step size of 20.6. I have tried the code below and it is giving me results. However, when storing the coefficients, for each coefficient, it gives me the same value for all the 115 iterations. I think that the error is related to the way I have used my sample objects in a loop but I am failing to correct that. May you please help me on how to solve this problem. The code is as follows:
Code: Select all
'run rolling regression
' set window size
!window = 126
' set step size
!step = 20.6
' get size of workfile
!length = @obsrange
' declare equation for estimation
equation eq1
'calculate number of rolls
!nrolls = @round((!length-!window)/!step)
'matrix to store coefficient estimates
matrix(9,!nrolls) coefmat ' where 9 is the number of coefficients
matrix(9,!nrolls) tmat
'variable keeping track of how many rolls we've done
!j=0
' move sample !step obs at a time
for !i = 1 to !window
!j=!j+1
' set sample to estimation period
smpl @first+!i-1 @first+!i-1+!window
' estimate equation
sample s0 @first+1 @first+!window
sample s1 @first+!window+!step @last
smpl @all
' declare coef vectors to use in ARCH likelihood
coef(4) beta = 0
coef(3) alpha = 0
coef(1) dof = 0
coef(1) mu = 0
' get starting values
equation eq1.arch(1,1,ged,archm=sd,backcast=1) y c y(-1)
eq1.makegarch garchm
equation eq1.arch(1,1,ged,archm=sd,backcast=1) y c garchm*y(-1) y(-1)
beta(1) = eq1.c(1)
beta(2) = eq1.c(2)
beta(3) = eq1.c(3)
beta(4) = eq1.c(4)
alpha(1) = eq1.c(5)
alpha(2) = eq1.c(6)
alpha(3) = eq1.c(7)
dof(1) = eq1.c(8)
mu(1) = eq1.@se^2
' set presample values of expressions in logl
series sig2 = mu(1)
series resid = resid
' set up GARCH likelihood
logl ll1
ll1.append @logl logl
ll1.append @byeqn
ll1.append resid = y - beta(2) - beta(1)*sig2 - beta(3)*sig2*y(-1)- beta(4)*y(-1)
ll1.append sig2 = alpha(1)+ alpha(2)*resid(-1)^2 + alpha(3)*sig2(-1)
ll1.append z = resid/@sqrt(sig2)
ll1.append logl = log(@dged(z,dof(1))) - log(sig2)/2
' declare coef vectors to use in ARCH likelihood
coef(4) beta = 0
coef(1) thresh = 0
coef(3) alpha = 0
coef(1) dof = 0
coef(1) mu = 0
' get starting values
eq1.arch(1,1,thrsh=1,archm=sd,ged,backcast=1) y c y(-1)
eq1.makegarch garchm
eq1.arch(1,1,thrsh=1,archm=sd,ged,backcast=1) y c garchm*y(-1) y(-1)
beta(1) = eq1.c(1)
beta(2) = eq1.c(2)
beta(3) = eq1.c(3)
beta(4) = eq1.c(4)
alpha(1) = eq1.c(5)
alpha(2) = eq1.c(6)
thresh(1) = eq1.c(7)
alpha(3) = eq1.c(8)
dof(1) = eq1.c(9)
mu(1) = eq1.@se^2
' set presample values of expressions in logl
series sig2 = mu(1)
series resid = resid
' set up GARCH likelihood
logl ll1
ll1.append @logl logl
ll1.append @byeqn
ll1.append resid = y - beta(2) - beta(1)*sig2 - beta(3)*sig2*y(-1)- beta(4)*y(-1)
ll1.append sig2 = alpha(1)+ alpha(2)*resid(-1)^2 + alpha(3)*sig2(-1) + thresh(1)*resid(-1)^2*(resid(-1)<0)
ll1.append z = resid/@sqrt(sig2)
ll1.append logl = log(@dged(z,dof(1))) - log(sig2)/2
' estimate and display results
smpl s1
ll1.ml(showopts, m=1000, c=1e-5)
show ll1.output
delete s0 s1
'store coefficients
colplace(coefmat,eq1.@coefs,!j)
colplace(tmat,eq1.@tstats,!j)
next
show coefmat
show tmat