' PROGRAM DETAILS
' Title: Eviews algorithm only template
' Description: US NAIRU
' Programmer: Tim Watson
' Status:
' Creation data: 13 October 2012
' Revision details:
' Description: 
' Revision date:
' Programmer:
' File location: 
' Input data:
' Program:
' Subroutines:
' Output data:
' 
' end program details
' SET UP DEFAULT OUTPUT PATH
'___________________________________________________________________________________________________________________________________________________________________________

%path = @runpath
cd %path
' end default path 
'___________________________________________________________________________________________________________________________________________________________________________
' LOCATION OF OUTPUT DATA/ EVIEWS WORKFILE
'___________________________________________________________________________________________________________________________________________________________________________
' INPUT DATA FILES XLS
%USNAIRU_DATA_XLS = "USNAIRU_Data.xls" 
' INPUT DATA FILES WF1
%USNAIRU_WF1 = "USNAIRU.WF1"
 
' INPUT DATA LOCATION XLS
%PATH_USNAIRU_DATA_XLS = "..\EP\" + %USNAIRU_Data_XLS
' INPUT DATA LOCATION WF1
%PATH_USNAIRU_WF1 = "..\EP\" + %USNAIRU_WF1
 
' OUTPUT DATA FILES XLS
%USNAIRU_XLS = "USNAIRU.XLS"
' OUTPUT DATA FILES WF1
%USNAIRU_WF1 = "USNAIRU.wf1"
 
'OUTPUT DATA LOCATION XLS
%PATH_USNAIRU_XLS = "..\OUTPUT\" + %USNAIRU_XLS 
' OUTPUT DATA LOCATION WF1
%PATH_USNAIRU_WF1 = "..\OUTPUT\" + %USNAIRU_WF1 
 
' CLOSE WORKFILE 
close %USNAIRU_WF1
' end file location
'___________________________________________________________________________________________________________________________________________________________________________
'
' WORKFILE PARAMETERS
'___________________________________________________________________________________________________________________________________________________________________________
' WORKFILE START DATE
%wfstart = "1959:1"
' WORKFILE END DATE
%wfend = "2016:1"
 
' end workfile parameters
'___________________________________________________________________________________________________________________________________________________________________________
'
' CREATE WORKFILE
'___________________________________________________________________________________________________________________________________________________________________________
' CREATE WORKFILE FROM EXCEL
wfcreate(wf=%USNAIRU_WF1, page=test) q %WFSTART %WFEND CPI CPIX PCE PCEX U LTU LF RGDP IMPS SIE NIX VF post90 
'
'' READ FROM XLS FILE USING READ
read(b2, s=USNAIRU_Data, t) %PATH_USNAIRU_data_XLS 100
 
'' DELETE UNWANTED SERIES
delete ser*
 
'' SAVE WORKFILE
wfsave %USNAIRU_WF1
 
' CREATE WORKFILE FROM EVIEWS WORKFILE
'wfopen %PATH_USNAIRU_WF1 
'pagecopy(wf= %MYUSNAIRU_WF1 , smpl=@first @last ) 
' CLOSE EXISTING WORKFILE
'close %USNAIRU_WF1
' SAVE WORKFILE
'wfsave %PATH_USNAIRU_WF1
' end create workfile
'___________________________________________________________________________________________________________________________________________________________________________
' CREATE SAMPLE PARAMETERS
'___________________________________________________________________________________________________________________________________________________________________________
' FULL DATA SAMPLE
sample ssall %wfstart %wfend
' ESTIMATION SAMPLE
'%dataend = "2005:2"
' FORECAST SAMPLE
'%fcstend = "2009:2"
' end sample
'___________________________________________________________________________________________________________________________________________________________________________
' DATA CONSTRUCTION
'___________________________________________________________________________________________________________________________________________________________________________
'Specify full sample
smpl ssall
'Create relative price
'Create log and dlog variables
series lcpi = log(cpi)
series dlcpi = (lcpi-lcpi(-1))
series ddlcpi= dlcpi-dlcpi(-1)
series d4lcpi=(lcpi-lcpi(-4))
series dd4lcpi=d4lcpi-d4lcpi(-1)*100

series lcpix = log(cpix)
series dlcpix = (lcpix-lcpix(-1))
series ddlcpix= dlcpix-dlcpix(-1)
series d4lcpix=(lcpix-lcpix(-4))
series dd4lcpix=d4lcpix-d4lcpix(-1)
series lpce = log(pce)

series dlpce = (lpce-lpce(-1))
series ddlpce= dlpce-dlpce(-1)
series d4lpce=(lpce-lpce(-4))
series dd4lpce=d4lpce-d4lpce(-1)
series lpcex = log(pcex)
series dlpcex = (lpcex-lpcex(-1))
series ddlpcex= dlpcex-dlpcex(-1)
series d4lpcex=(lpcex-lpcex(-4))
series dd4lpcex=d4lpcex-d4lpcex(-1)

series lnulc = log(nulc)
series dlnulc= (lnulc-lnulc(-1))
series ddlnulc= dlnulc-dlnulc(-1)
series d4lnulc=(lnulc-lnulc(-4))
series dd4lnulc=d4lnulc-d4lnulc(-1)

series lipd = log(ipd)
series dlipd= (lipd-lipd(-1))
series ddlipd= dlipd-dlipd(-1)
series d4lipd=(lipd-lipd(-4))
series dd4lipd=d4lipd-d4lipd(-1)

series lenf_cpi=log(cpi)-log(cpix)
series dlenf_cpi=(lenf_cpi-lenf_cpi(-1))
series ddlenf_cpi=dlenf_cpi-dlenf_cpi(-1)
series d4lenf_cpi=(lenf_cpi-lenf_cpi(-4))
series dd4lenf_cpi=d4lenf_cpi-d4lenf_cpi(-1)

series lenf_pce=log(pce)-log(pcex)
series dlenf_pce=(lenf_pce-lenf_pce(-1))
series ddlenf_pce=dlenf_pce-dlenf_pce(-1)
series d4lenf_pce=(lenf_pce-lenf_pce(-4))
series dd4lenf_pce=d4lenf_pce-d4lenf_pce(-1)

series limps =log(imps)
series dlimps=limps-limps(-1)
series ddlimps=dlimps-dlimps(-1)
series d4limps=limps-limps(-4)
series dd4limps=d4limps-d4limps(-1)

series dimps_cpi= dlimps-dlcpi
series ddimps_cpi= ddlimps-ddlcpi
series d4imps_cpi= d4limps-d4lcpi
series dd4imps_cpi= (dd4limps-dd4lcpi)*100

series dimps_cpix= dlimps-dlcpix
series ddimps_cpix= ddlimps-ddlcpix
series d4imps_cpix= d4limps-d4lcpix
series dd4imps_cpix= dd4limps-dd4lcpix

series dimps_pce= dlimps-dlpce
series ddimps_pce= ddlimps-ddlpce
series d4imps_pce= d4limps-d4lpce
series dd4imps_pce= dd4limps-dd4lpce
series dimps_pcex= dlimps-dlpcex
series ddimps_pcex= ddlimps-ddlpcex
series d4imps_pcex= d4limps-d4lpcex
series dd4imps_pcex= dd4limps-dd4lpcex

series dimps_nulc= dlimps-dlnulc
series ddimps_nulc= ddlimps-ddlnulc
series d4imps_nulc= d4limps-d4lnulc
series dd4imps_nulc= dd4limps-dd4lnulc
series dimps_ipd= dlimps-dlipd
series ddimps_ipd= ddlimps-ddlipd
series d4imps_ipd= d4limps-d4lipd
series dd4imps_ipd= dd4limps-dd4lipd

series prod = rgdp/lf
series lprod= log(rgdp/lf)
hpf(1600) lprod prod_hp
series prodgap= lprod-prod_hp

series lgdp = log(rgdp)
series dY=log(rgdp)-log(rgdp(-1))
series d4Y=log(rgdp)-log(rgdp(-4))
hpf(1600) d4Y D4Y_hp1600
series ygap= D4Y-D4Y_hp1600

series u = u/100
series lu = log((1-u)/u)
series lvf = log(vf/u)

series ltu = ltu
series stu = u-ltu

hpf(1600) u u_hp1600
hpf(100) u u_hp100

series speedlimit1=log(u)-log(u(-1))
series speedlimit4=log(u)-log(u(-4))


' end of data construction
 
' DATA ANALYSIS (unit root tests, etc...)
'augmented dickey fuller tests
uroot(adf,const,dif=0, info=aic,save=adf_dlcpi) dlcpi
uroot(adf,const,dif=0, info=aic,save=adf_dlcpix) dlcpix
'uroot(adf,const,dif=0, info=aic,save=adf_dlpce) dlpce
'uroot(adf,const,dif=0, info=aic,save=adf_dlpcex) dlpcex
uroot(adf,const,dif=0, info=aic,save=adf_d4lcpi) d4lcpi
'uroot(adf,const,dif=0, info=aic,save=adf_d4lcpix) d4lcpix
'uroot(adf,const,dif=0, info=aic,save=adf_d4lpce) d4lpce
'uroot(adf,const,dif=0, info=aic,save=adf_d4lpcex) d4lpcex
uroot(adf,const,dif=0, info=aic,save=adf_u) u
'uroot(adf,const,dif=0, info=aic,save=adf_ltu) ltu
'uroot(adf,const,dif=0, info=aic,save=adf_stu) stu
uroot(adf,none,dif=0, info=aic,save=adf_d4lenf) d4lenf_cpi
uroot(adf,none,dif=0, info=aic,save=adf_dimps_cpi) dimps_cpi
uroot(adf,none,dif=0, info=aic,save=adf_d4imps_cpi) d4imps_cpi
uroot(adf,none,dif=0, info=aic,save=adf_ddlcpi) ddlcpi
uroot(adf,none,dif=0, info=aic,save=adf_ddlcpix) ddlcpix
uroot(adf,none,dif=0, info=aic,save=adf_dd4lcpi) dd4lcpi
'group g *
'g.drop resid 
'group adf_1 dlcpi dlcpix dlpce dlpcex d4lcpi d4lcpix d4lpce d4lpcex u ltu stu 
'for !i=1 to adf_1.@count 'loop through every series in the first group
'%name = adf_1.@seriesname(!i) 'grab the current series name
'uroot(adf, const, dif=0,info=aic,save=adf_1output) {%name}
'ADF(1,1+!i)=%name
'ADF(2, 1+!i)= level1(3,1)'
'uroot(adf, trend, dif=0,save=level2) {%name}
'ADF(3, 1+!i)= level2(3,1)
'next
 
' Zivot Andrews (1992) unit root tests
 
'lee S (2003) unit root tests
 
' end of data analysis
'___________________________________________________________________________________________________________________________________________________________________________ 
' MODEL ESTIMATION
'___________________________________________________________________________________________________________________________________________________________________________

'mankiw ball (2002) nairu

smpl "1960:1" "2011:4" 

coef (100) MB

equation eq_mbnairu.ls(cov=hac) dd4lcpi=MB(1)+MB(2)*u

series mbu = u+(dd4lcpi/MB(2))

hpf(1000) mbu mbu_hp1000
hpf(100) mbu mbu_hp100
hpf(1600) mbu mbu_hp1600

'preliminary beveridge curve estimation
 
smpl "1960:1" "2011:4"

coef(20) B1

equation eq_b1.ls d(lu)=B1(1)*d(lvf)

eq_b1.makeresid resid_b1
 
' Dickens (2009) BC/ Phillips curve NAIRU
' Initialise variance of NAIRU

smpl "1960:1" "2011:4"

coef(20) ARNU

coef(10) SIGMA

equation eq_varianceU.ls u_hp1600 = ARNU(1)+ARNU(2)*u_hp1600(-1)

!Sigma8= eq_varianceU. @se
SIGMA(8) = !SIGMA8

' Initialise CPI parameters

smpl "1960:1" "2011:4" 

coef(100) IPC

equation eq_CPIPC.ls dlcpi=IPC(2)*((u-u_hp1600)/u)+IPC(6)*dlcpi(-1)+ IPC(7)*dlcpi(-2)+ IPC(8)*dlcpi(-3)+(IPC(9))*dlcpi(-4)+ (IPC(10))*dlcpi(-5)+ (IPC(11))*dlcpi(-6) +(IPC(12))*dlcpi(-7)+(IPC(13))*dlcpi(-8)+ (IPC(14))*dlcpi(-9)+ (IPC(15))*dlcpi(-10)+ (IPC(16))*dlcpi(-11)+ (1-IPC(6)-IPC(7)-IPC(8)-IPC(9)-IPC(10)-IPC(11)-IPC(12)-IPC(13)-IPC(14)-IPC(15)-IPC(16))*dlcpi(-12)

!Sigma1 = eq_CPIPC. @se
SIGMA(1) = !sigma1

' Initialise beveridge curve parameters

smpl "1960:1" "2011:4" 
coef(20) BC

equation eq_bc.ls lu=BC(1)+BC(2)*lvf+BC(3)*u_hp1600

'equation eq_bc.ls d(lu)=BC(1)*d(lvf)
!Sigma2 = eq_bc. @se
'!Sigma2 = 0
SIGMA(2) = !sigma2

' State space model with 1 signal equation 
smpl "1960:1" "2011:4" 
sspace SS_ALL
'set nairu starting value equal to the unemployment rate in Q1 of the sample period

vector(1) prior_nairu = @elem(u_hp1600,"1960:1")

SS_all.append @mprior prior_nairu

SS_all.append @signal dlcpi=IPC(2)*((u-nairu)/u)+IPC(6)*dlcpi(-1)+ IPC(7)*dlcpi(-2)+ IPC(8)*dlcpi(-3)+(IPC(9))*dlcpi(-4)+ (IPC(10))*dlcpi(-5)+ (IPC(11))*dlcpi(-6) +(IPC(12))*dlcpi(-7)+(IPC(13))*dlcpi(-8)+ (IPC(14))*dlcpi(-9)+ (IPC(15))*dlcpi(-10)+ (IPC(16))*dlcpi(-11)+ (1-IPC(6)-IPC(7)-IPC(8)-IPC(9)-IPC(10)-IPC(11)-IPC(12)-IPC(13)-IPC(14)-IPC(15)-IPC(16))*dlcpi(-12)+[var=sigma(1)^2]

SS_all.append @signal lu=BC(1)+BC(2)*lvf+BC(3)*(nairu)+[var=sigma(2)^2]

'SS_all.append @signal d(lu)=BC(1)*d(lvf)+[var=sigma(2)^2]

SS_all.append @state nairu=nairu(-1)+[var=!SIGMA8^2]

'Estimation of parameters using maximum likelihood
SS_all.ml

'Estimate of NAIRU using Kalman Filter
SS_all.makestates(t=filt) nairu_kf
SS_all.makestates(t=filtse) nairu_kfse
'Estimate of NAIRU using Kalman Smoother
SS_all.makestates(t=smooth) nairu_ks
SS_all.makestates(t=smoothse) nairu_ksse

'NAIRU
'smpl ssall

smpl "1960:1" "2011:4" 
series nairu = nairu_ks
series ugap= (u-nairu)

series nairu_plus2sd = nairu+2*nairu_ksse
series nairu_minus2sd = nairu-2*nairu_ksse

group g1 nairu  nairu_plus2sd nairu_minus2sd
g1.line

group g2 u nairu
g2.line

' SIMULATION/FORECAST MODEL
 
' SIMULATION/FORECAST PARAMETERS
 
' SAVE MODEL WORKFILE/EXPORT RESULTS
 

'end of save/data export
 
' END OF PROGRAM
