Gregory-Hansen Cointegration Test

For posting your own programs to share with others

Moderators: EViews Gareth, EViews Moderator

wolly77
Posts: 32
Joined: Mon Oct 05, 2009 4:28 am

Re: Gregory-Hansen Cointegration Test

Postby wolly77 » Mon Oct 05, 2009 5:31 pm

It works well now! Thanks a lot QMS Gareth! thanks also to trubador!

wolly77
Posts: 32
Joined: Mon Oct 05, 2009 4:28 am

Re: Gregory-Hansen Cointegration Test

Postby wolly77 » Tue Oct 06, 2009 1:13 am

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".

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Gregory-Hansen Cointegration Test

Postby trubador » Tue Oct 06, 2009 1:45 am

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.

wolly77
Posts: 32
Joined: Mon Oct 05, 2009 4:28 am

Re: Gregory-Hansen Cointegration Test

Postby wolly77 » Tue Oct 06, 2009 1:54 am

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?
Attachments
my_workfile.wf1
(57.61 KiB) Downloaded 1050 times
prog_gh_prova.prg
(4.88 KiB) Downloaded 1686 times

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Gregory-Hansen Cointegration Test

Postby trubador » Tue Oct 06, 2009 3:12 am

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.

wolly77
Posts: 32
Joined: Mon Oct 05, 2009 4:28 am

Re: Gregory-Hansen Cointegration Test

Postby wolly77 » Tue Oct 06, 2009 5:51 am

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)).
Attachments
prog_gh_prova.prg
(4.8 KiB) Downloaded 794 times
my_workfile.wf1
(50.03 KiB) Downloaded 703 times

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Gregory-Hansen Cointegration Test

Postby trubador » Tue Oct 06, 2009 6:31 am

There are missing observations in your variables. Re-sizing the range of your workfile to 1952Q2 2012Q1 would do I guess.

wolly77
Posts: 32
Joined: Mon Oct 05, 2009 4:28 am

Re: Gregory-Hansen Cointegration Test

Postby wolly77 » Tue Oct 06, 2009 6:39 am

I have tried to reduce the sample to 1955q1 2009q2, but the same error appears.

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Gregory-Hansen Cointegration Test

Postby trubador » Tue Oct 06, 2009 7:54 am

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.

wolly77
Posts: 32
Joined: Mon Oct 05, 2009 4:28 am

Re: Gregory-Hansen Cointegration Test

Postby wolly77 » Tue Oct 06, 2009 3:32 pm

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!

shweta712
Posts: 1
Joined: Thu Oct 29, 2009 11:53 am

Re: Gregory-Hansen Cointegration Test

Postby shweta712 » Tue Nov 03, 2009 6:14 am

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

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Gregory-Hansen Cointegration Test

Postby trubador » Tue Nov 03, 2009 10:21 am

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

Kinga
Posts: 3
Joined: Sun Nov 08, 2009 4:44 pm

Re: Gregory-Hansen Cointegration Test

Postby Kinga » Sun Nov 08, 2009 4:59 pm

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
Attachments
Tests for cointegration with two unknown regime shifts.pdf
(134.04 KiB) Downloaded 1460 times

margalef
Posts: 2
Joined: Tue Dec 15, 2009 3:53 pm

Re: Gregory-Hansen Cointegration Test

Postby margalef » Wed Dec 16, 2009 11:10 am

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.

gordeza
Posts: 10
Joined: Mon Jan 05, 2009 11:10 pm

Re: Gregory-Hansen Cointegration Test

Postby gordeza » Mon Feb 01, 2010 10:48 pm

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


Return to “Program Repository”

Who is online

Users browsing this forum: No registered users and 8 guests