Dear all,
I am trying to build a model with some variables.
Then, inside the model, I would like to create the maximum of the lags of one of the variables. However, @rmax only works with groups and in the model objects groups are not allowed. I am stuck right now. Could you help me?
Thanks
Models and groups
Moderators: EViews Gareth, EViews Jason, EViews Moderator, EViews Matt
-
- Fe ddaethom, fe welon, fe amcangyfrifon
- Posts: 13319
- Joined: Tue Sep 16, 2008 5:38 pm
Re: Models and groups
Could you go in to more detail? I don't understand what you're trying to do.
Follow us on Twitter @IHSEViews
Re: Models and groups
Hi Gareth. I'll try.
I would to like to replicate a variable akin to the net of Hamilton. That is, if x is my variable, the code for Eviews would be something similar to:
group mygroup x(-1) x(-2)...
series net = @recode(x-@rmax(mygroup)>0,x-@rmax(mygroup),0)
I do not have a problem with this (I have done correctly in my program). However, it is different when I build a model.
If I have a model with some equation and I would like to forecast y, and it depends of net, I also need a forecast of net, that should be done in the object model with solve. However, "model" does not accept groups, so I cannot create "mygroup" inside or append it.
Also, I cannot write something similar to:
series net = @recode(x-@rmax( x(-1) x(-2)....)
Because @rmax only works with groups.
I hope this helps.
Thank you!
I would to like to replicate a variable akin to the net of Hamilton. That is, if x is my variable, the code for Eviews would be something similar to:
group mygroup x(-1) x(-2)...
series net = @recode(x-@rmax(mygroup)>0,x-@rmax(mygroup),0)
I do not have a problem with this (I have done correctly in my program). However, it is different when I build a model.
If I have a model with some equation and I would like to forecast y, and it depends of net, I also need a forecast of net, that should be done in the object model with solve. However, "model" does not accept groups, so I cannot create "mygroup" inside or append it.
Also, I cannot write something similar to:
series net = @recode(x-@rmax( x(-1) x(-2)....)
Because @rmax only works with groups.
I hope this helps.
Thank you!
-
- EViews Developer
- Posts: 563
- Joined: Thu Apr 25, 2013 7:48 pm
Re: Models and groups
Hello,
You can use nested calls to @pmax as a replacement for @rmax. For example,
You can use nested calls to @pmax as a replacement for @rmax. For example,
Code: Select all
net = x - @pmax(x(-1), @pmax(x(-2), @pmax(x(-3), ...)))
Re: Models and groups
One additional (and I hope last) problem.
I have created a code but it runs very, very slow. I have been trying to understand why, but I have been unable to. Could you help me?
This is the loop part, which is the part in which the program is very low. In case that is necessary I can provide more.
scalar nboot = 1000
scalar nhist = 50
scalar ndraws = 100
scalar h = 8
scalar p = 6
for !boot=0 to nboot
if !boot>0 then
'Initial conditions
smpl {primera} {ultima}
xraw.resample(block=p,dropna,suffix=xrawres)
yraw.resample(block=p,dropna,suffix=yrawres)
'
smpl {dstartsample} {dstartsample}+p-1
genr x = xrawres
genr y = yrawres
series xplus = @recode(x>0, x, 0)
smpl {bstartsample} {bendsample}
uxbase.resample(dropna,suffix=uxres)
uybase.resample(dropna,suffix=uyres)
genr xpath = uxres
genr ypath = uyres
'Solve the model with the boot
bootasymm.scenario(n,a="_b") "scenario boot"
bootasymm.addassign(c) @stochastic
y_a = ypath
x_a = xpath
bootasymm.solve
bootasymm.scenario(d) "scenario boot"
''''
genr x = x_b
genr y = y_b
genr xplus = xplus_b
endif
''''Estimating the model: boostrapped data.
'''''X regression
'Estimations
equation xeq.ls x c y(-1 to -{p}) x(-1 to -{p})
'Residuals
genr ux = resid
'X std
scalar sigmax = @stdev(ux)
'''Y regression
equation yeq.ls y c y(-1 to -{p}) x(0 to -{p}) xplus(0 to -{p})
'Residuals
genr uy = resid
'''''Model define
model asymvar xeq yeq
asymvar.append xplus = @recode(x>0 , x , 0)
asymvar.append @identity ly = ly(-1) + y
'''Save the bootstrapped data
smpl {dstartsample} {dendsample}
genr xboot = x
genr yboot = y
for !hist = 1 to nhist
'Resample for initial conditions
smpl {dstartsample} {dendsample}
xboot.resample(block=p,dropna,suffix=xbootres)
yboot.resample(block=p,dropna,suffix=ybootres)
smpl {ultima}+1-p {ultima}
genr x = xbootres
genr y = ybootres
series xplus = @recode(x>0,x,0)
''''''
for !draw=1 to ndraws
'Resample residuals
smpl {bstartsample} {bendsample}
ux.resample(dropna,suffix=uxres)
uy.resample(dropna,suffix=uyres)
smpl {hstartssample} {hendsample}
genr xpath = 0
genr ypath = 0
for !j=1 to h
xpath(bend+!j) = uxres(bend-!j)
ypath(bend+!j) = uyres(bend-!j)
next
'This is the base
asymvar.scenario(n, a="_2") "scenario 2"
asymvar.addassign(c) @stochastic
y_a = ypath
x_a =xpath
asymvar.solve
''''
for !i = 1 to 2
scalar delta = !i*sigmax
'Resolve the model for +delta
asymvar.scenario(n, a="_3") "scenario 3"
xpath(bend+1) = delta
x_a =xpath
asymvar.solve
'Resolve the model for minus delta
asymvar.scenario(n, a="_4") "scenario 4"
xpath(bend+1) = -delta
x_a =xpath
asymvar.solve
'Sum of the plus and minus responses.
vector vly_2 = @convert(ly_2)
vector vly_3 = @convert(ly_3)
vector vly_4 = @convert(ly_4)
for !j=1 to h
gap(!j) = vly_4(!j)+vly_3(!j)-2*vly_2(!j)
next
'
if !boot>0 then
testboot_!i = testboot_!i+gap
else
test_!i = test_!i + gap
endif
asymvar.scenario(d) "scenario 3"
asymvar.scenario(d) "scenario 4"
next
asymvar.scenario(d) "scenario 2"
next
next
if !boot>0 then
for !i=1 to 2
testboot_!i = testboot_!i/(nhist*ndraws)
sumirf_!i = sumirf_!i + testboot_!i
matrix testboottrans_!i = @transpose(testboot_!i)
sumirfsq_!i = sumirfsq_!i + testboot_!I*testboottrans_!i
next
endif
next
I have created a code but it runs very, very slow. I have been trying to understand why, but I have been unable to. Could you help me?
This is the loop part, which is the part in which the program is very low. In case that is necessary I can provide more.
scalar nboot = 1000
scalar nhist = 50
scalar ndraws = 100
scalar h = 8
scalar p = 6
for !boot=0 to nboot
if !boot>0 then
'Initial conditions
smpl {primera} {ultima}
xraw.resample(block=p,dropna,suffix=xrawres)
yraw.resample(block=p,dropna,suffix=yrawres)
'
smpl {dstartsample} {dstartsample}+p-1
genr x = xrawres
genr y = yrawres
series xplus = @recode(x>0, x, 0)
smpl {bstartsample} {bendsample}
uxbase.resample(dropna,suffix=uxres)
uybase.resample(dropna,suffix=uyres)
genr xpath = uxres
genr ypath = uyres
'Solve the model with the boot
bootasymm.scenario(n,a="_b") "scenario boot"
bootasymm.addassign(c) @stochastic
y_a = ypath
x_a = xpath
bootasymm.solve
bootasymm.scenario(d) "scenario boot"
''''
genr x = x_b
genr y = y_b
genr xplus = xplus_b
endif
''''Estimating the model: boostrapped data.
'''''X regression
'Estimations
equation xeq.ls x c y(-1 to -{p}) x(-1 to -{p})
'Residuals
genr ux = resid
'X std
scalar sigmax = @stdev(ux)
'''Y regression
equation yeq.ls y c y(-1 to -{p}) x(0 to -{p}) xplus(0 to -{p})
'Residuals
genr uy = resid
'''''Model define
model asymvar xeq yeq
asymvar.append xplus = @recode(x>0 , x , 0)
asymvar.append @identity ly = ly(-1) + y
'''Save the bootstrapped data
smpl {dstartsample} {dendsample}
genr xboot = x
genr yboot = y
for !hist = 1 to nhist
'Resample for initial conditions
smpl {dstartsample} {dendsample}
xboot.resample(block=p,dropna,suffix=xbootres)
yboot.resample(block=p,dropna,suffix=ybootres)
smpl {ultima}+1-p {ultima}
genr x = xbootres
genr y = ybootres
series xplus = @recode(x>0,x,0)
''''''
for !draw=1 to ndraws
'Resample residuals
smpl {bstartsample} {bendsample}
ux.resample(dropna,suffix=uxres)
uy.resample(dropna,suffix=uyres)
smpl {hstartssample} {hendsample}
genr xpath = 0
genr ypath = 0
for !j=1 to h
xpath(bend+!j) = uxres(bend-!j)
ypath(bend+!j) = uyres(bend-!j)
next
'This is the base
asymvar.scenario(n, a="_2") "scenario 2"
asymvar.addassign(c) @stochastic
y_a = ypath
x_a =xpath
asymvar.solve
''''
for !i = 1 to 2
scalar delta = !i*sigmax
'Resolve the model for +delta
asymvar.scenario(n, a="_3") "scenario 3"
xpath(bend+1) = delta
x_a =xpath
asymvar.solve
'Resolve the model for minus delta
asymvar.scenario(n, a="_4") "scenario 4"
xpath(bend+1) = -delta
x_a =xpath
asymvar.solve
'Sum of the plus and minus responses.
vector vly_2 = @convert(ly_2)
vector vly_3 = @convert(ly_3)
vector vly_4 = @convert(ly_4)
for !j=1 to h
gap(!j) = vly_4(!j)+vly_3(!j)-2*vly_2(!j)
next
'
if !boot>0 then
testboot_!i = testboot_!i+gap
else
test_!i = test_!i + gap
endif
asymvar.scenario(d) "scenario 3"
asymvar.scenario(d) "scenario 4"
next
asymvar.scenario(d) "scenario 2"
next
next
if !boot>0 then
for !i=1 to 2
testboot_!i = testboot_!i/(nhist*ndraws)
sumirf_!i = sumirf_!i + testboot_!i
matrix testboottrans_!i = @transpose(testboot_!i)
sumirfsq_!i = sumirfsq_!i + testboot_!I*testboottrans_!i
next
endif
next
-
- EViews Developer
- Posts: 563
- Joined: Thu Apr 25, 2013 7:48 pm
Re: Models and groups
Hello,
I don't see anything in your code that would specifically impair performance, there's simply a large number of iterations to be executed. In case you weren't already doing so, running the program in quiet mode may yield a modest performance improvement. Programs that execute a lot of individually simple code lines, as your program does, generally benefit the most from quiet mode since the overhead of updating EViews' GUI is removed.
I don't see anything in your code that would specifically impair performance, there's simply a large number of iterations to be executed. In case you weren't already doing so, running the program in quiet mode may yield a modest performance improvement. Programs that execute a lot of individually simple code lines, as your program does, generally benefit the most from quiet mode since the overhead of updating EViews' GUI is removed.
Who is online
Users browsing this forum: No registered users and 38 guests