Page 2 of 8

Re: Gregory-Hansen Cointegration Test

Posted: Mon Oct 05, 2009 5:31 pm
by wolly77
It works well now! Thanks a lot QMS Gareth! thanks also to trubador!

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 1:13 am
by wolly77
Sorry, I have a problem when I run the code selecting regime shift (that is, selecting 4 in the part "call greghansen(log_pce_r_pc,independents,4,"aic",8)"). Eviews gives this message of error: "Near Singular Matrix in "Do_ghc.ls Y C (@trend>35-2) G".

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 1:45 am
by trubador
Again you should post your workfile along with the code. "Near Singular Matrix" is a very common error, so it is difficult to determine the problem without seeing the original files.

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 1:54 am
by wolly77
Here is the workfile with my code. Thanks.
Another question: if the potential structural break is at the end of sample (that is, 2004q1), GH test can ascertain it?

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 3:12 am
by trubador
You should group your variables outside the program (in the command line for instance). Otherwise, each time you run the code with different independent variables it adds these variables into the same group (e.g. independents), which ultimately leads to singularity. Therefore, I suggest you to form your group of variables first and run the code later with supplying the name of the group as input. Please do not forget to generate a new group when you decide to work with a different set of variables.

In the command line type the following one at a time:

Code: Select all

group independents
independents.add log_ylyt_r log_stnw_r log_nstnw_r fedf_n


Then in the program window simply call the subroutine:

Code: Select all

call greghansen(log_pce_r_pc,independents,4,"aic",8)
....


Regarding to your second question, please note that the analysis is based on sequentially generating dummy and trend variables and the trimming parameter adjusts your sample to allow this type of analysis. In the code above, the parameter is set to 0.15, which means 15% of observations from both ends will not be checked for a break. If your sample is large enough, you can lower the value of this parameter without any loss of generality. However, you should keep in mind that doing so might lead to a/n meaningless/infeasible trend variable.

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 5:51 am
by wolly77
I have tried to create independently the independents group in the line command and then recall it in the program as you suggested. But it appears the same error of near singluar matrix. If you have a little time you can prove. Thanks.
I have also tried to reduce the trimming (I have simply change the line command: "!trim = 0.15" with "!trim = 0.05") but the same message error appears ("near singular matrix in do.ghc.ls Y C G (@trend>23-2)).

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 6:31 am
by trubador
There are missing observations in your variables. Re-sizing the range of your workfile to 1952Q2 2012Q1 would do I guess.

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 6:39 am
by wolly77
I have tried to reduce the sample to 1955q1 2009q2, but the same error appears.

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 7:54 am
by trubador
Resizing the sample will not work. You should adjust the range altogether, which means there should be no missing values in your variables in the beginning. Of course, this is just a workaround for now to help you make some progress on your study. I'll try to figure out something else, if the problem is really caused by these missing values.

Re: Gregory-Hansen Cointegration Test

Posted: Tue Oct 06, 2009 3:32 pm
by wolly77
I have generated a new workfile in eviews without NA at the beginning as suggested by trubador. The code now works well. Thanks a lot trubador!

Re: Gregory-Hansen Cointegration Test

Posted: Tue Nov 03, 2009 6:14 am
by shweta712
hello sir
i am completely new to e-views.was trying to run the gregory hansen code in eviews 5 but the software reports this error:
@CMIN is an illegal or reserved name in vector min_t_lag = @cmin(GHtest)..
also if u can refer me some link whr i can read more details about reading codes!!
thank you

Re: Gregory-Hansen Cointegration Test

Posted: Tue Nov 03, 2009 10:21 am
by trubador
That is because the function is not supported in earlier versions of EViews. Please try the modified version below. For more information on the use of EViews' programming features, please refer to the manual and the examples listed in EViews' directory...

Code: Select all

'Gregory-Hansen Cointegration Test
'Reference: Gregory, A. W. and Hansen, B. E. (1996). "Residual-Based Tests for Cointegration in Models with Regime Shifts", Journal of Econometrics, Vol. 70, pp. 99-126.

call greghansen(y,x,2,"aic",6)

' ----------------------------------------------------------------------------------------------------
' Arguments
'-----------------------------------------------------------------------------------------------------
'series Y                 ' dependent variable
'group G                 ' group of independent variable(s) (including single series)
'scalar Model         ' 2 = Level Shift, 3 = Level Shift with Trend, 4 = Regime Shift
'scalar Maxlag       ' Maximum number of lags for unit root testing
'string %Criterion  ' Selection criteria for unit root testing (i.e. aic / sic / hqc)
' ----------------------------------------------------------------------------------------------------

subroutine greghansen(series Y, group G, scalar Model, string %Criterion, scalar Maxlag)
smpl @all
!trim = 0.15
!maxlag = Maxlag

!n = @obs(y)
!nindep = G.@count

!lower = @round(@obs(Y)*!trim)
!upper = @round(@obs(Y)*(1-!trim))
matrix(!upper-!lower+1,4) GHtest

equation ghc

Table GHZ
GHZ(1,1) =  "THE GREGORY-HANSEN"
GHZ(2,1) = "COINTEGRATION TEST"
if Model=2 then GHZ(3,1) = "MODEL 2: Level Shift"
else if Model =3 then GHZ(3,1) = "MODEL 3: Level Shift with Trend"
   else if Model = 4 then GHZ(3,1) = "MODEL 4: Regime Shift"
   endif
endif
endif
GHZ(5,1) = "ADF Procedure"
GHZ(7,1) = "t-stat"
GHZ(8,1) = "Lag"
GHZ(9,1) = "Break"
GHZ(11,1) = "Phillips Procedure"
GHZ(13,1) = "Za-stat"
GHZ(14,1) = "Za-break"
GHZ(15,1) = "Zt-stat"
GHZ(16,1) = "Zt-break"

for !ref = 2 to 4
  GHZ.setwidth(!ref) 15
next

GHZ.setlines(a4:b4) +d
GHZ.setlines(a6:b6) +d
GHZ.setlines(a10:b10) +d
GHZ.setlines(a12:b12) +d

for !i = !lower to !upper

  if Model=2 then
   'MODEL 2 - C: LEVEL SHIFT MODEL
     ghc.ls Y c G (@trend>!i-2)
     ghc.makeresid res
     uroot(adf, none, info={%criterion}, maxlag=!maxlag, save=level) res
     GHtest(!i-!lower+1,1) = level(3,1)
     GHtest(!i-!lower+1,2) = level(2,1)
     call phillips(res)   
     GHtest(!i-!lower+1,3) = !Za
     GHtest(!i-!lower+1,4) = !Zt
 
   else if Model=3 then
   'MODEL 3 - C/T: LEVEL SHIFT WITH TREND MODEL
     ghc.ls Y c @trend G (@trend>!i-2)
     ghc.makeresid res
     uroot(adf, none, info={%criterion}, maxlag=!maxlag, save=level) res
     GHtest(!i-!lower+1,1) = level(3,1)
     GHtest(!i-!lower+1,2) = level(2,1)
     call phillips(res)   
     GHtest(!i-!lower+1,3) = !Za
     GHtest(!i-!lower+1,4) = !Zt
   
   else if Model = 4 then
   'MODEL 4 - C/S: REGIME SHIFT MODEL
       for !g = 1 to !nindep
         G.add (@trend>!i-2)*G(!g)
       next
     ghc.ls Y c (@trend>!i-2) G
     ghc.makeresid res
     uroot(adf, none, info={%criterion}, maxlag=!maxlag, save=level) res
     GHtest(!i-!lower+1,1) = level(3,1)
     GHtest(!i-!lower+1,2) = level(2,1)
     call phillips(res)   
     GHtest(!i-!lower+1,3) = !Za
     GHtest(!i-!lower+1,4) = !Zt
       for !g = G.@count to !nindep+1 step -1
        %name = G.@seriesname(!g)
         G.drop {%name}
       next
     endif
    endif
   endif
next

 vector(3) break
  !i =1
    while !i<=!upper-!lower+1
      if GHtest(!i,1) = @min(@columnextract(GHtest,1)) then
        break(1) = !i
      endif
      if GHtest(!i,3) = @min(@columnextract(GHtest,3)) then
        break(2) = !i
      endif
      if GHtest(!i,4) = @min(@columnextract(GHtest,4)) then
        break(3) = !i
       endif
    !i = !i+1
    wend

     GHZ(7,2) = @min(@columnextract(GHtest,1))
     GHZ(8,2) = GHtest(break(1),2)
     GHZ(13,2) = @min(@columnextract(GHtest,3))
     GHZ(15,2) = @min(@columnextract(GHtest,4))

     GHZ(9,2) = @otod(break(1) + !lower - 2)
     GHZ(14,2) = @otod(break(2) + !lower - 2)
     GHZ(16,2) = @otod(break(3) + !lower - 2)

     show GHZ

delete res level GHtest break
endsub

subroutine phillips(series y) 'MATLAB code of this routine is available at Bruce E. Hansen's website: http://www.ssc.wisc.edu/~bhansen/progs/joe_96.html
!n = @obs(y)
equation eq1.ls y y(-1)
!be = eq1.@coefs(1)
series ue = y - !be*y(-1)

'Bandwidth selection
!nu = @obs(ue)
equation eq2.ls ue ue(-1)
!bu = eq2.@coefs(1)
series uu = ue - !bu*ue(-1)
!su = @sumsq(uu)/@obs(uu)
!a2 = (4*!bu^2*!su/(1-!bu)^8)/(!su/(1-!bu)^4)
!bw =1.3221*((!a2*!nu)^0.2)
     
!pi = @acos(-1)
!j=1
!lemda = 0
     while !j <= !bw
        series temp = ue*ue(-!j)
        !gama =  @sum(temp)/!nu
        !w=(75/(6*!pi*!j/!bw)^2)*(@sin(1.2*!pi*!j/!bw)/(1.2*!pi*!j/!bw)-@cos(1.2*!pi*!j/!bw))
        !lemda=!lemda+!w*!gama
        !j=!j+1
     wend
     
series temp = y*y(-1) - !lemda
!p = @sum(temp)/@sumsq(y(-1))
!Za = !n*(!p-1)
!Zt = (!p-1)/@sqrt((2*!lemda + @sumsq(ue)/!nu)/(@sumsq(y(-1))))
smpl @all
delete eq1 eq2 ue uu temp
endsub

Re: Gregory-Hansen Cointegration Test

Posted: Sun Nov 08, 2009 4:59 pm
by Kinga
Hello,

I would like to test cointegration with two unknow regime shifts, as Abdulnasser Hatemi-J(2008) "Testing cointegration with two unknown regime shifts with an application to financial market integration". The program code (Gregory -Hansen Cointegration Test) you provided above tests for one unknown regime shift. My programming skills are very poor therefore I would appreciate your help me to update the above code.

I would appreciate your response.

Kinga

Re: Gregory-Hansen Cointegration Test

Posted: Wed Dec 16, 2009 11:10 am
by margalef
Dear Mr. Trubador and Mr. Gareth, I'm a researcher in Brazil and found this code very useful for my studies. I started making the corrections for earlier versions as presented by Mr. Gareth and everything run alright. I used 1 dep. variable against 3 indep. variables. Well, my difficulty is that I want to run the test using just 1 dependent variable against 1 independent variable, or even 2 independents variables, but the program even returns the results for 1 dep. against 3 indeps. So I have two questions: (a) how to perform the test in such a way(s); and (b) why the test do not perform the Wald statistics? Thank you very much in advance. Margalef.

Re: Gregory-Hansen Cointegration Test

Posted: Mon Feb 01, 2010 10:48 pm
by gordeza
Hi Trubador,
I need some help on the G-H cointegration. Is there any way to get the coefficients of the Gregory-Hansen cointegration? I mean coefficients such as those included in Eviews' Johansen's cointegrating equation.
Thanks in advance.
Gordeza