' =========== ARDL unit root test =============
' *** This program using n=10,000 bootstrap replication to generate bootstrap critical values.
' *** Declare your variables and testing period. Put them between the " ". For example, "GDP".
' Declare your variables.
%dependent = "rmalaysia" 
%independent1 = "rus"
' Declare your testing period.
%firstperiod = "1993M08"
%lastperiod = "2022m02"
' Declare your regression type, whether it is no-intercept, intercept or trend.
' If no-intercept, regtype = n; If intercept, regtype = i; If trend, regtype = t
%regtype = "i"
' Declare your workfile data type. It can be annual, semi-annual,quarterly, monthly, weekly, daily, or undated.
' For annual, put "a"; for semi-annual, put "s"; for quarterly, put "q"; for monthly, put "m"; for weekly, put "w"; for daily, put "d"; for undated, put "u".
%datatype = "m"
' If you wish to manually declare the lag length for ARDL(p,q), put "M". Otherwise, put "A" and let the program search for the optimal lag length. 
%selfspec = "A"
' If you put "M" for %selfspec, set your equation maximum lag length. Maximum up to 10 lags. 
!maxlag = 10
' If you put "A" for %selfspec, set your prefer lag lengths for dy and dx.
' The lag length p for dy.
!fix_p = 9
' The lag length q for dx.
!fix_q= 2
' Number of bootstrap replication. Recomended replication number = 1000 or 2000 or 5000 or 10000.
!nrep_b = 5000

' =================== Program start here =========================
' ========= DO NOT CHANGE ANYTHING START FROM HERE! ==========
' *** Quiet mode.
mode quiet

pagecopy(page=ARDLurt_{%dependent}) {%dependent} {%independent1}
rndseed 12345						' Seed to generate random numbers.

genr y = {%dependent}
genr dy = d(y)
genr x1 = {%independent1}
genr dx1 = d(x1)

table(!maxlag+2, !maxlag+2) table_aic_y
setcell(table_aic_y, 1, 1, "ARDL(p,q)")
for !a=1 to !maxlag+1
setcell(table_aic_y, 1, 1+!a, @str(!a-1))
next

for !b=1 to !maxlag+1
setcell(table_aic_y, 1+!b, 1, @str(!b-1))
next

scalar opt_aic_y = na

vector(!nrep_b) tstat_b_dist = na
vector(!nrep_b) fstat_b_dist = na

		if %regtype = "n" then					' Case for regression without intercept.
			include .\ardlurt02_none
else 	if %regtype = "i" then						' Case for regression with intercept only.
			include .\ardlurt03_intercept	
else	if %regtype = "t" then						' Case for regression with intercept and trend.
			include .\ardlurt04_trend				
endif
endif
endif

' ================================ End of Bootstrap =================================
vector(4) critical_value_y = na
vector(4) critical_value_x = na
%smplperiod = %firstperiod + " : " + %lastperiod
smpl @all
!k = 1
for %1 0.90 0.95 0.975 0.99
critical_value_x(!k) = @quantile(fstat_b_dist, %1)
!k = !k + 1
next

!m = 1
for %2 0.10 0.05 0.025 0.01
critical_value_y(!m) = @quantile(tstat_b_dist, %2)
!m = !m + 1
next


table(11,5) table_result
setcell(table_result, 1, 1, "ARDL Unit Root Test.")
setcell(table_result, 2, 1, "Dependent variable:")
setcell(table_result, 2, 2, %dependent)
setcell(table_result, 3, 1, "Independent variable:")
setcell(table_result, 3, 2, %independent1)
setcell(table_result, 4, 1, "Regression:")
if %regtype = "n" then
setcell(table_result, 4, 2, "None")
else
if %regtype = "i" then
setcell(table_result, 4, 2, "Intercept")
else
if %regtype = "t" then
setcell(table_result, 4, 2, "Trend")
endif
endif
endif
setcell(table_result, 3, 4, "Sample:")
setcell(table_result, 3, 5, %smplperiod)
setcell(table_result, 4, 4, "Optimal Model:")
setcell(table_result, 4, 5, "ARDL(" + @str(!opt_p) + ", " + @str(!opt_q) + ")")
setcell(table_result, 5, 4, "Akaike info criterion:")
setcell(table_result, 5, 5, opt_aic_y)
setcell(table_result, 6, 4, "Bootstrap replication")
setcell(table_result, 6, 5, !nrep_b)

setcell(table_result, 5, 1, "t-statistic:")
setcell(table_result, 6, 1, "F-statistic:")
setcell(table_result, 5, 2, tstat_y)
setcell(table_result, 6, 2, fstat_y)

setcell(table_result, 8, 1, "Sig. Level")
setcell(table_result, 8, 2, "0.100")
setcell(table_result, 8, 3, "0.050")
setcell(table_result, 8, 4, "0.025")
setcell(table_result, 8, 5, "0.010")

setcell(table_result, 9, 1, "t-critical value")
setcell(table_result, 10, 1, "F-critical value")

for !t=1 to 4
table_result(9, !t+1) = critical_value_y(!t)
next

for !t=1 to 4
table_result(10, !t+1) = critical_value_x(!t)
next

show table_result

stop


