• Tidak ada hasil yang ditemukan

Institutional Repository | Satya Wacana Christian University: Penerapan Model Aparch untuk Volatilitas Returns Kurs Beli EUR dan JPY terhadap IDR Periode 2009-2014

N/A
N/A
Protected

Academic year: 2018

Membagikan "Institutional Repository | Satya Wacana Christian University: Penerapan Model Aparch untuk Volatilitas Returns Kurs Beli EUR dan JPY terhadap IDR Periode 2009-2014"

Copied!
28
0
0

Teks penuh

(1)
(2)

Lampiran 1 : Kode MATLAB untuk model-model khusus APARCH Berdistribusi Normal

1.1.Kode Utama

1.1.1.

Kode Utama ARCH

function [ Hasil ] = MCMC_ARCH_RW_adapt(R)

%%%%% Function : Distribusi posterior dari parameter model GARCH %%%%% Inputs :

%%%%% R : returns

%%%%% its_MCMC : banyak iterasi MCMC

%%%%% RW_step : suatu skalar yang merupakan variansi untuk distribusi proposal dalam proses Random Walk

%%%%% Outputs :

%%%%% post_theta_RW : Posterior MCMC untuk omega, alfa, beta, gamma, dan

%%%%% delta

%%%%% post_theta_RW_adapt : Posterior MCMC untuk Omega,Alpha,Beta, Gamma, Delta dengan proses adaptive (selama burn-in)

%%%%% post_like_RW : Log-likelihood dari posterior

%%%%% post_like_RW_adapt : Log-likelihood posterior dari proses adaptive

%%%%% Ditampilkan juga hasil test diagnosa if(nargin<4)

graph = 1; if(nargin<3)

RW_step = 1; if(nargin<2)

its_MCMC = 15000; end

end end

%%%% Returns simpan dalam variabel T T = max(size(R));

if(T~=size(R,1)) R = R';

end

R2 = R.*R;

%%%%%%%%%% Dipilih nilai awal

theta0 = [0.1 0.2]; theta_RW_adapt = theta0;

like_current = ARCH_likelihood_adapt(R,R2,theta0); like_current_RW_adapt = like_current;

%%%%%%%%%% Batas-batas dari prior : Omega ~ U[0,wka] ; alpha ~ U[0,1] ;

%%%%%%%%%% beta|alpha ~ U[0,1-alpha], delta ~ [0,10], gamma ~ [-1,1] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wka = 10; burn_in = 5000;

(3)

%%%%%%%%%%% Proses Random Walk dengan adaptative selama burn-in %%%%%%%%%%% Lihat Atchadé and Rosenthal (2005)

RW_step_adapt = [0.005 0.005]'; theta = zeros(N,2); min_max_var = [1e-5 10]; eta = 0.6;

%%MCMC

accept_adapt = ones(1,2); thetaProp = zeros(1,2); thetaAcc = zeros(1,2); tic

for i=1:its_MCMC

thetaProp = thetaProp + 1; theta_prop = theta_RW_adapt; for q=1:5

theta_prop(q) = theta_RW_adapt(q) + sqrt(RW_step_adapt(q))*randn();

test = 0; if(q==1) %omega

if(theta_prop(q)>0 && theta_prop(q)<wka) test = 1;

end % alfa else

if(theta_prop(q)>0 && theta_prop(q)<1) test = 1;

end end

if(test==1)

[log_like_move] = ARCH_likelihood_adapt(R,R2,theta_prop); prior_lama = -log(wka) - log(1-theta_RW_adapt(2));

prior_baru = -log(wka) - log(1-theta_prop(2)); if(exp(log_like_move+prior_baru-like_current_RW_adapt-prior_lama)>rand())

like_current_RW_adapt = log_like_move; theta_RW_adapt(q) = theta_prop(q); accept_adapt(q) = accept_adapt(q)+1; thetaAcc(q) = thetaAcc(q) + 1; else

theta_prop(q) = theta_RW_adapt(q); end

else

theta_prop(q) = theta_RW_adapt(q); end

RW_step_adapt(q) = max(min_max_var(1),RW_step_adapt(q) + (accept_adapt(q)/i - 0.44)/(i^eta));

if(RW_step_adapt(q)>min_max_var(2))

RW_step_adapt(q) = min_max_var(2); end

(4)

if mod(i,100) == 0

thetaProp = zeros(1,2); thetaAcc = zeros(1,2); end

%theta_RW_adapt

% simpan w, a, b, del if i>burn_in

theta(i-burn_in,:) = theta_RW_adapt;

post_like(i-burn_in,1) = like_current_RW_adapt; end

% Start timer after burn-in if i == burn_in

disp('Burn-in complete, now drawing posterior samples.') end

end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo Hasil.post_theta = theta;

Hasil.post_like = post_like; Hasil.post_step = theta_RW_adapt; MP = mean(Hasil.post_theta);

SP = std(Hasil.post_theta);

% ===== Integrated Autocorrelation Time (IACT) ========================

% Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel

% yang independen (seberapa cepat konvergensi simulasi) resultsIAT = IACT(Hasil.post_theta);

IAT = [resultsIAT.iact]; % ===== Uji Konvergensi Geweke

============================================ idraw1 = round(.1*N);

resultCV = momentg(Hasil.post_theta(1:idraw1,:)); meansa = [resultCV.pmean];

nsea = [resultCV.nse1]; idraw2 = round(.5*N)+1;

resultCV = momentg(Hasil.post_theta(idraw2:N,:)); meansb = [resultCV.pmean];

nseb = [resultCV.nse1];

CD = (meansa - meansb)./sqrt(nsea+nseb); onetail = 1-normcdf(abs(CD),0,1);

pV = 2*onetail;

% ===== 95% Highest Posterior Density (HPD) Interval ======================

resultsHPD = HPD(Hasil.post_theta,0.05); LB = [resultsHPD.LB];

(5)

% ===== Numerical Standard Error (NSE) ==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];

%====================== Mengatur hasil pencetakan =========================

%--- Statistik Parameter: in.cnames = char('w','a');

in.rnames = char('Parameter','Mean','SD','LB','UB','IACT','NSE','G-CD','p-Value');

in.fmt = '%16.6f';

tmp = [MP; SP; LB; UB; IAT; NSEd; CD; pV];

fprintf(1,'Estimasi menggunakan MCMC dan Uji Diagnosa\n'); % cetak hasil

mprint(tmp,in);

1.1.2.

Kode Utama GARCH

function [ Hasil ] = MCMC_GARCH_RW_adapt(R)

%%%%% Function : Distribusi posterior dari parameter model GARCH %%%%% Inputs :

%%%%% R : returns

%%%%% its_MCMC : banyak iterasi MCMC

%%%%% RW_step : suatu skalar yang merupakan variansi untuk distribusi proposal dalam proses Random Walk

%%%%% Outputs :

%%%%% post_theta_RW : Posterior MCMC untuk omega, alfa, beta, gamma, dan

%%%%% delta

%%%%% post_theta_RW_adapt : Posterior MCMC untuk Omega,Alpha,Beta, Gamma, Delta dengan proses adaptive (selama burn-in)

%%%%% post_like_RW : Log-likelihood dari posterior

%%%%% post_like_RW_adapt : Log-likelihood posterior dari proses adaptive

%%%%% Ditampilkan juga hasil test diagnosa if(nargin<4)

graph = 1; if(nargin<3)

RW_step = 1; if(nargin<2)

its_MCMC = 15000; end

end end

%%%% Returns simpan dalam variabel T T = max(size(R));

if(T~=size(R,1)) R = R';

end

(6)

%%%%%%%%%% Dipilih nilai awal

theta0 = [0.1 0.2 0.3]; theta_RW_adapt = theta0;

like_current = GARCH_likelihood_adapt(R,R2,theta0); like_current_RW_adapt = like_current;

%%%%%%%%%% Batas-batas dari prior : Omega ~ U[0,wka] ; alpha ~ U[0,1] ;

%%%%%%%%%% beta|alpha ~ U[0,1-alpha], delta ~ [0,10], gamma ~ [-1,1] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wka = 10; burn_in = 5000;

N = its_MCMC-burn_in; post_like = zeros(N,1);

%%%%%%%%%%% Proses Random Walk dengan adaptative selama burn-in %%%%%%%%%%% Lihat Atchadé and Rosenthal (2005)

RW_step_adapt = [0.005 0.005 0.005]'; theta = zeros(N,3);

min_max_var = [1e-5 10]; eta = 0.6;

%%MCMC

accept_adapt = ones(1,3); thetaProp = zeros(1,3); thetaAcc = zeros(1,3); tic

for i=1:its_MCMC

thetaProp = thetaProp + 1; theta_prop = theta_RW_adapt; for q=1:5

theta_prop(q) = theta_RW_adapt(q) + sqrt(RW_step_adapt(q))*randn();

test = 0; if(q==1) %omega

if(theta_prop(q)>0 && theta_prop(q)<wka) test = 1;

end

% alfa dan beta else

if(theta_prop(q)>0 && sum(theta_prop(2:3))<1 && theta_prop(q)<1) test = 1;

end end

if(test==1)

[log_like_move] = GARCH_likelihood_adapt(R,R2,theta_prop); prior_lama = -log(wka) - log(1-theta_RW_adapt(2));

prior_baru = -log(wka) - log(1-theta_prop(2)); if(exp(log_like_move+prior_baru-like_current_RW_adapt-prior_lama)>rand())

(7)

theta_RW_adapt(q) = theta_prop(q); accept_adapt(q) = accept_adapt(q)+1; thetaAcc(q) = thetaAcc(q) + 1; else

theta_prop(q) = theta_RW_adapt(q); end

else

theta_prop(q) = theta_RW_adapt(q); end

RW_step_adapt(q) = max(min_max_var(1),RW_step_adapt(q) + (accept_adapt(q)/i - 0.44)/(i^eta));

if(RW_step_adapt(q)>min_max_var(2))

RW_step_adapt(q) = min_max_var(2); end

end

if mod(i,100) == 0

thetaProp = zeros(1,3); thetaAcc = zeros(1,3); end

%theta_RW_adapt % simpan w, a, b if i>burn_in

theta(i-burn_in,:) = theta_RW_adapt;

post_like(i-burn_in,1) = like_current_RW_adapt; end

% Start timer after burn-in if i == burn_in

disp('Burn-in complete, now drawing posterior samples.') end

end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo Hasil.post_theta = theta;

Hasil.post_like = post_like; Hasil.post_step = theta_RW_adapt; MP = mean(Hasil.post_theta);

SP = std(Hasil.post_theta);

% ===== Integrated Autocorrelation Time (IACT) ========================

% Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel

% yang independen (seberapa cepat konvergensi simulasi) resultsIAT = IACT(Hasil.post_theta);

IAT = [resultsIAT.iact]; % ===== Uji Konvergensi Geweke

============================================ idraw1 = round(.1*N);

resultCV = momentg(Hasil.post_theta(1:idraw1,:)); meansa = [resultCV.pmean];

(8)

idraw2 = round(.5*N)+1;

resultCV = momentg(Hasil.post_theta(idraw2:N,:)); meansb = [resultCV.pmean];

nseb = [resultCV.nse1];

CD = (meansa - meansb)./sqrt(nsea+nseb); onetail = 1-normcdf(abs(CD),0,1);

pV = 2*onetail;

% ===== 95% Highest Posterior Density (HPD) Interval ======================

resultsHPD = HPD(Hasil.post_theta,0.05); LB = [resultsHPD.LB];

UB = [resultsHPD.UB];

% ===== Numerical Standard Error (NSE) ==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];

%====================== Mengatur hasil pencetakan =========================

%--- Statistik Parameter: in.cnames = char('w','a');

in.rnames = char('Parameter','Mean','SD','LB','UB','IACT','NSE','G-CD','p-Value');

in.fmt = '%16.6f';

tmp = [MP; SP; LB; UB; IAT; NSEd; CD; pV];

fprintf(1,'Estimasi menggunakan MCMC dan Uji Diagnosa\n'); % cetak hasil

mprint(tmp,in);

1.1.3.

Kode Utama TARCH

function [ Hasil ] = MCMC_TARCH_RW_adapt(R)

%%%%% Function : Distribusi posterior dari parameter model GARCH %%%%% Inputs :

%%%%% R : returns

%%%%% its_MCMC : banyak iterasi MCMC

%%%%% RW_step : suatu skalar yang merupakan variansi untuk distribusi proposal dalam proses Random Walk

%%%%% Outputs :

%%%%% post_theta_RW : Posterior MCMC untuk omega, alfa, beta, gamma, dan

%%%%% delta

%%%%% post_theta_RW_adapt : Posterior MCMC untuk Omega,Alpha,Beta, Gamma, Delta dengan proses adaptive (selama burn-in)

%%%%% post_like_RW : Log-likelihood dari posterior

%%%%% post_like_RW_adapt : Log-likelihood posterior dari proses adaptive

(9)

if(nargin<4) graph = 1; if(nargin<3)

RW_step = 1; if(nargin<2)

its_MCMC = 15000; end

end end

%%%% Returns simpan dalam variabel T T = max(size(R));

if(T~=size(R,1)) R = R';

end

R2 = R.*R;

%%%%%%%%%% Dipilih nilai awal

theta0 = [0.1 0.2 0.1 0.1]; theta_RW_adapt = theta0;

like_current = TARCH_likelihood_adapt(R,R2,theta0); like_current_RW_adapt = like_current;

%%%%%%%%%% Batas-batas dari prior : Omega ~ U[0,wka] ; alpha ~ U[0,1] ;

%%%%%%%%%% beta|alpha ~ U[0,1-alpha], delta ~ [0,10], gamma ~ [-1,1] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wka = 10; burn_in = 5000;

N = its_MCMC-burn_in; post_like = zeros(N,1);

%%%%%%%%%%% Proses Random Walk dengan adaptative selama burn-in %%%%%%%%%%% Lihat Atchadé and Rosenthal (2005)

RW_step_adapt = [0.003 0.001 0.002 0.004]'; theta = zeros(N,4);

min_max_var = [1e-5 10]; eta = 0.6;

%%MCMC

accept_adapt = ones(1,4); thetaProp = zeros(1,4); thetaAcc = zeros(1,4); tic

for i=1:its_MCMC

thetaProp = thetaProp + 1; theta_prop = theta_RW_adapt; for q=1:5

theta_prop(q) = theta_RW_adapt(q) + sqrt(RW_step_adapt(q))*randn();

test = 0;

pos = theta(2) - 0.5*theta(4) - theta(3); if(q==1) %omega

(10)

end

elseif q==4 %gamma

if(theta_prop(q)>=-1 && theta_prop(q)<=1 && pos<1) test = 1;

end

% alfa dan beta else

if(theta_prop(q)>0 && sum(theta_prop(2:3))<1 && theta_prop(q)<1) test = 1;

end end

if(test==1)

[log_like_move] = TARCH_likelihood_adapt(R,R2,theta_prop); prior_lama = -log(wka) - log(1-theta_RW_adapt(2));

RW_step_adapt(q) = max(min_max_var(1),RW_step_adapt(q) + (accept_adapt(q)/i - 0.44)/(i^eta));

post_like(i-burn_in,1) = like_current_RW_adapt; end

% Start timer after burn-in if i == burn_in

disp('Burn-in complete, now drawing posterior samples.') end

end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo Hasil.post_theta = theta;

(11)

MP = mean(Hasil.post_theta); SP = std(Hasil.post_theta);

% ===== Integrated Autocorrelation Time (IACT) ========================

% Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel

% yang independen (seberapa cepat konvergensi simulasi) resultsIAT = IACT(Hasil.post_theta);

IAT = [resultsIAT.iact]; % ===== Uji Konvergensi Geweke

============================================ idraw1 = round(.1*N);

resultCV = momentg(Hasil.post_theta(1:idraw1,:)); meansa = [resultCV.pmean];

nsea = [resultCV.nse1]; idraw2 = round(.5*N)+1;

resultCV = momentg(Hasil.post_theta(idraw2:N,:)); meansb = [resultCV.pmean];

nseb = [resultCV.nse1];

CD = (meansa - meansb)./sqrt(nsea+nseb); onetail = 1-normcdf(abs(CD),0,1);

pV = 2*onetail;

% ===== 95% Highest Posterior Density (HPD) Interval ======================

resultsHPD = HPD(Hasil.post_theta,0.05); LB = [resultsHPD.LB];

UB = [resultsHPD.UB];

% ===== Numerical Standard Error (NSE) ==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];

%====================== Mengatur hasil pencetakan =========================

%--- Statistik Parameter:

in.cnames = char('w','a',’b’. 'y');

in.rnames = char('Parameter','Mean','SD','LB','UB','IACT','NSE','G-CD','p-Value');

in.fmt = '%16.6f';

tmp = [MP; SP; LB; UB; IAT; NSEd; CD; pV];

fprintf(1,'Estimasi menggunakan MCMC dan Uji Diagnosa\n'); % cetak hasil

mprint(tmp,in);

1.1.4.

Kode Utama TS-GARCH

(12)

%%%%% Function : Distribusi posterior dari parameter model GARCH %%%%% Inputs :

%%%%% R : returns

%%%%% its_MCMC : banyak iterasi MCMC

%%%%% RW_step : suatu skalar yang merupakan variansi untuk distribusi proposal dalam proses Random Walk

%%%%% Outputs :

%%%%% post_theta_RW : Posterior MCMC untuk omega, alfa, beta, gamma, dan

%%%%% delta

%%%%% post_theta_RW_adapt : Posterior MCMC untuk Omega,Alpha,Beta, Gamma, Delta dengan proses adaptive (selama burn-in)

%%%%% post_like_RW : Log-likelihood dari posterior

%%%%% post_like_RW_adapt : Log-likelihood posterior dari proses adaptive

%%%%% Ditampilkan juga hasil test diagnosa if(nargin<4)

graph = 1; if(nargin<3)

RW_step = 1; if(nargin<2)

its_MCMC = 15000; end

end end

%%%% Returns simpan dalam variabel T T = max(size(R));

if(T~=size(R,1)) R = R';

end

R2 = R.*R;

%%%%%%%%%% Dipilih nilai awal

theta0 = [0.1 0.2 0.3]; theta_RW_adapt = theta0;

like_current = TSGARCH_likelihood_adapt(R,R2,theta0); like_current_RW_adapt = like_current;

%%%%%%%%%% Batas-batas dari prior : Omega ~ U[0,wka] ; alpha ~ U[0,1] ;

%%%%%%%%%% beta|alpha ~ U[0,1-alpha], delta ~ [0,10], gamma ~ [-1,1] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wka = 10; burn_in = 5000;

N = its_MCMC-burn_in; post_like = zeros(N,1);

%%%%%%%%%%% Proses Random Walk dengan adaptative selama burn-in %%%%%%%%%%% Lihat Atchadé and Rosenthal (2005)

RW_step_adapt = [0.005 0.005 0.005]'; theta = zeros(N,3);

(13)

%%MCMC

accept_adapt = ones(1,3); thetaProp = zeros(1,3); thetaAcc = zeros(1,3); tic

for i=1:its_MCMC

thetaProp = thetaProp + 1; theta_prop = theta_RW_adapt; for q=1:5

theta_prop(q) = theta_RW_adapt(q) + sqrt(RW_step_adapt(q))*randn();

test = 0;

pos = theta(2) - 0.5*theta(4) - theta(3); if(q==1) %omega

if(theta_prop(q)>0 && theta_prop(q)<wka && pos<1) test = 1;

end

% alfa dan beta else

if(theta_prop(q)>0 && sum(theta_prop(2:3))<1 && theta_prop(q)<1) test = 1;

end end

if(test==1)

[log_like_move] =

TSGARCH_likelihood_adapt(R,R2,theta_prop);

prior_lama = -log(wka) - log(1-theta_RW_adapt(2)); prior_baru = -log(wka) - log(1-theta_prop(2)); if(exp(log_like_move+prior_baru-like_current_RW_adapt-prior_lama)>rand())

like_current_RW_adapt = log_like_move; theta_RW_adapt(q) = theta_prop(q); accept_adapt(q) = accept_adapt(q)+1; thetaAcc(q) = thetaAcc(q) + 1; else

theta_prop(q) = theta_RW_adapt(q); end

else

theta_prop(q) = theta_RW_adapt(q); end

RW_step_adapt(q) = max(min_max_var(1),RW_step_adapt(q) + (accept_adapt(q)/i - 0.44)/(i^eta));

if(RW_step_adapt(q)>min_max_var(2))

RW_step_adapt(q) = min_max_var(2); end

end

if mod(i,100) == 0

thetaProp = zeros(1,3); thetaAcc = zeros(1,3); end

(14)

% simpan w, a, b, del if i>burn_in

theta(i-burn_in,:) = theta_RW_adapt;

post_like(i-burn_in,1) = like_current_RW_adapt; end

% Start timer after burn-in if i == burn_in

disp('Burn-in complete, now drawing posterior samples.') end

end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo Hasil.post_theta = theta;

Hasil.post_like = post_like; Hasil.post_step = theta_RW_adapt; MP = mean(Hasil.post_theta);

SP = std(Hasil.post_theta);

% ===== Integrated Autocorrelation Time (IACT) ========================

% Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel

% yang independen (seberapa cepat konvergensi simulasi) resultsIAT = IACT(Hasil.post_theta);

IAT = [resultsIAT.iact]; % ===== Uji Konvergensi Geweke

============================================ idraw1 = round(.1*N);

resultCV = momentg(Hasil.post_theta(1:idraw1,:)); meansa = [resultCV.pmean];

nsea = [resultCV.nse1]; idraw2 = round(.5*N)+1;

resultCV = momentg(Hasil.post_theta(idraw2:N,:)); meansb = [resultCV.pmean];

nseb = [resultCV.nse1];

CD = (meansa - meansb)./sqrt(nsea+nseb); onetail = 1-normcdf(abs(CD),0,1);

pV = 2*onetail;

% ===== 95% Highest Posterior Density (HPD) Interval ======================

resultsHPD = HPD(Hasil.post_theta,0.05); LB = [resultsHPD.LB];

UB = [resultsHPD.UB];

% ===== Numerical Standard Error (NSE) ==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];

(15)

========================= %--- Statistik Parameter: in.cnames = char('w','a','b');

in.rnames = char('Parameter','Mean','SD','LB','UB','IACT','NSE','G-CD','p-Value');

in.fmt = '%16.6f';

tmp = [MP; SP; LB; UB; IAT; NSEd; CD; pV];

fprintf(1,'Estimasi menggunakan MCMC dan Uji Diagnosa\n'); % cetak hasil

mprint(tmp,in);

1.1.5.

Kode Utama GJR-GARCH

function [ Hasil ] = MCMC_GJR_RW_adapt(R)

%%%%% Function : Distribusi posterior dari parameter model GARCH %%%%% Inputs :

%%%%% R : returns

%%%%% its_MCMC : banyak iterasi MCMC

%%%%% RW_step : suatu skalar yang merupakan variansi untuk distribusi proposal dalam proses Random Walk

%%%%% Outputs :

%%%%% post_theta_RW : Posterior MCMC untuk omega, alfa, beta, gamma, dan

%%%%% delta

%%%%% post_theta_RW_adapt : Posterior MCMC untuk Omega,Alpha,Beta, Gamma, Delta dengan proses adaptive (selama burn-in)

%%%%% post_like_RW : Log-likelihood dari posterior

%%%%% post_like_RW_adapt : Log-likelihood posterior dari proses adaptive

%%%%% Ditampilkan juga hasil test diagnosa if(nargin<4)

graph = 1; if(nargin<3)

RW_step = 1; if(nargin<2)

its_MCMC = 15000; end

end end

%%%% Returns simpan dalam variabel T T = max(size(R));

if(T~=size(R,1)) R = R';

end

R2 = R.*R;

%%%%%%%%%% Dipilih nilai awal

theta0 = [0.1 0.3 0.1 -0.6]; theta_RW_adapt = theta0;

(16)

like_current_RW_adapt = like_current;

%%%%%%%%%% Batas-batas dari prior : Omega ~ U[0,wka] ; alpha ~ U[0,1] ;

%%%%%%%%%% beta|alpha ~ U[0,1-alpha], delta ~ [0,10], gamma ~ [-1,1] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wka = 10; burn_in = 5000;

N = its_MCMC-burn_in; post_like = zeros(N,1);

%%%%%%%%%%% Proses Random Walk dengan adaptative selama burn-in %%%%%%%%%%% Lihat Atchadé and Rosenthal (2005)

RW_step_adapt = [0.005 0.005 0.005 0.005]'; theta = zeros(N,4);

min_max_var = [1e-5 10]; eta = 0.6;

%%MCMC

accept_adapt = ones(1,4); thetaProp = zeros(1,4); thetaAcc = zeros(1,4); tic

for i=1:its_MCMC

thetaProp = thetaProp + 1; theta_prop = theta_RW_adapt; for q=1:5

theta_prop(q) = theta_RW_adapt(q) + sqrt(RW_step_adapt(q))*randn();

test = 0;

pos = theta(2) - 0.5*theta(4) - theta(3); if(q==1) %omega

if(theta_prop(q)>0 && theta_prop(q)<wka && pos<1) test = 1;

end

elseif q==4 %gamma

if(theta_prop(q)>=-1 && theta_prop(q)<=1 && pos<1) test=1;

end

% alfa dan beta else

if(theta_prop(q)>0 && pos<1 && theta_prop(q)<1) test = 1;

end end

if(test==1)

[log_like_move] = GJR_likelihood_adapt(R,R2,theta_prop); prior_lama = -log(wka) - log(1-theta_RW_adapt(2));

prior_baru = -log(wka) - log(1-theta_prop(2)); if(exp(log_like_move+prior_baru-like_current_RW_adapt-prior_lama)>rand())

(17)

accept_adapt(q) = accept_adapt(q)+1; thetaAcc(q) = thetaAcc(q) + 1; else

theta_prop(q) = theta_RW_adapt(q); end

else

theta_prop(q) = theta_RW_adapt(q); end

RW_step_adapt(q) = max(min_max_var(1),RW_step_adapt(q) + (accept_adapt(q)/i - 0.44)/(i^eta));

if(RW_step_adapt(q)>min_max_var(2))

RW_step_adapt(q) = min_max_var(2); end

end

if mod(i,100) == 0

thetaProp = zeros(1,4); thetaAcc = zeros(1,4); end

%theta_RW_adapt % simpan w, a, b, y if i>burn_in

theta(i-burn_in,:) = theta_RW_adapt;

post_like(i-burn_in,1) = like_current_RW_adapt; end

% Start timer after burn-in if i == burn_in

disp('Burn-in complete, now drawing posterior samples.') end

end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo Hasil.post_theta = theta;

Hasil.post_like = post_like; Hasil.post_step = theta_RW_adapt; MP = mean(Hasil.post_theta);

SP = std(Hasil.post_theta);

% ===== Integrated Autocorrelation Time (IACT) ========================

% Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel

% yang independen (seberapa cepat konvergensi simulasi) resultsIAT = IACT(Hasil.post_theta);

IAT = [resultsIAT.iact]; % ===== Uji Konvergensi Geweke

============================================ idraw1 = round(.1*N);

resultCV = momentg(Hasil.post_theta(1:idraw1,:)); meansa = [resultCV.pmean];

(18)

idraw2 = round(.5*N)+1;

resultCV = momentg(Hasil.post_theta(idraw2:N,:)); meansb = [resultCV.pmean];

nseb = [resultCV.nse1];

CD = (meansa - meansb)./sqrt(nsea+nseb); onetail = 1-normcdf(abs(CD),0,1);

pV = 2*onetail;

% ===== 95% Highest Posterior Density (HPD) Interval ======================

resultsHPD = HPD(Hasil.post_theta,0.05); LB = [resultsHPD.LB];

UB = [resultsHPD.UB];

% ===== Numerical Standard Error (NSE) ==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];

%====================== Mengatur hasil pencetakan =========================

%--- Statistik Parameter:

in.cnames = char('w','a','b','y');

in.rnames = char('Parameter','Mean','SD','LB','UB','IACT','NSE','G-CD','p-Value');

in.fmt = '%16.6f';

tmp = [MP; SP; LB; UB; IAT; NSEd; CD; pV];

fprintf(1,'Estimasi menggunakan MCMC dan Uji Diagnosa\n'); % cetak hasil

mprint(tmp,in);

1.1.6.

Kode Utama NARCH

function [ Hasil ] = MCMC_NARCH_RW_adapt(R)

%%%%% Function : Distribusi posterior dari parameter model GARCH %%%%% Inputs :

%%%%% R : returns

%%%%% its_MCMC : banyak iterasi MCMC

%%%%% RW_step : suatu skalar yang merupakan variansi untuk distribusi proposal dalam proses Random Walk

%%%%% Outputs :

%%%%% post_theta_RW : Posterior MCMC untuk omega, alfa, beta, gamma, dan

%%%%% delta

%%%%% post_theta_RW_adapt : Posterior MCMC untuk Omega,Alpha,Beta, Gamma, Delta dengan proses adaptive (selama burn-in)

%%%%% post_like_RW : Log-likelihood dari posterior

%%%%% post_like_RW_adapt : Log-likelihood posterior dari proses adaptive

(19)

graph = 1; if(nargin<3)

RW_step = 1; if(nargin<2)

its_MCMC = 15000; end

end end

%%%% Returns simpan dalam variabel T T = max(size(R));

if(T~=size(R,1)) R = R';

end

R2 = R.*R;

%%%%%%%%%% Dipilih nilai awal

theta0 = [0.1 0.3 -0.6]; theta_RW_adapt = theta0;

like_current = NARCH_likelihood_adapt(R,R2,theta0); like_current_RW_adapt = like_current;

%%%%%%%%%% Batas-batas dari prior : Omega ~ U[0,wka] ; alpha ~ U[0,1] ;

%%%%%%%%%% beta|alpha ~ U[0,1-alpha], delta ~ [0,10], gamma ~ [-1,1] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wka = 10; burn_in = 5000;

N = its_MCMC-burn_in; post_like = zeros(N,1);

%%%%%%%%%%% Proses Random Walk dengan adaptative selama burn-in %%%%%%%%%%% Lihat Atchadé and Rosenthal (2005)

RW_step_adapt = [0.005 0.005 0.005]'; theta = zeros(N,3);

min_max_var = [1e-5 10]; eta = 0.6;

%%MCMC

accept_adapt = ones(1,3); thetaProp = zeros(1,3); thetaAcc = zeros(1,3); tic

for i=1:its_MCMC

thetaProp = thetaProp + 1; theta_prop = theta_RW_adapt; for q=1:5

theta_prop(q) = theta_RW_adapt(q) + sqrt(RW_step_adapt(q))*randn();

test = 0;

pos = theta(2) - 0.5*theta(4) - theta(3); if(q==1) %omega

if(theta_prop(q)>0 && theta_prop(q)<wka && pos<1) test = 1;

(20)

elseif q==3 %delta

if(theta_prop(q)>=-1 && theta_prop(q)<=10) test=1;

end % alfa else

if(theta_prop(q)>0 && theta_prop(q)<1) test = 1;

end end

if(test==1)

[log_like_move] = NARCH_likelihood_adapt(R,R2,theta_prop); prior_lama = -log(wka) - log(1-theta_RW_adapt(2));

prior_baru = -log(wka) - log(1-theta_prop(2)); if(exp(log_like_move+prior_baru-like_current_RW_adapt-prior_lama)>rand())

like_current_RW_adapt = log_like_move; theta_RW_adapt(q) = theta_prop(q); accept_adapt(q) = accept_adapt(q)+1; thetaAcc(q) = thetaAcc(q) + 1; else

theta_prop(q) = theta_RW_adapt(q); end

else

theta_prop(q) = theta_RW_adapt(q); end

RW_step_adapt(q) = max(min_max_var(1),RW_step_adapt(q) + (accept_adapt(q)/i - 0.44)/(i^eta));

if(RW_step_adapt(q)>min_max_var(2))

RW_step_adapt(q) = min_max_var(2); end

end

if mod(i,100) == 0

thetaProp = zeros(1,3); thetaAcc = zeros(1,3); end

%theta_RW_adapt % simpan w, a, del if i>burn_in

theta(i-burn_in,:) = theta_RW_adapt;

post_like(i-burn_in,1) = like_current_RW_adapt; end

% Start timer after burn-in if i == burn_in

disp('Burn-in complete, now drawing posterior samples.') end

end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo Hasil.post_theta = theta;

(21)

MP = mean(Hasil.post_theta); SP = std(Hasil.post_theta);

% ===== Integrated Autocorrelation Time (IACT) ========================

% Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel

% yang independen (seberapa cepat konvergensi simulasi) resultsIAT = IACT(Hasil.post_theta);

IAT = [resultsIAT.iact]; % ===== Uji Konvergensi Geweke

============================================ idraw1 = round(.1*N);

resultCV = momentg(Hasil.post_theta(1:idraw1,:)); meansa = [resultCV.pmean];

nsea = [resultCV.nse1]; idraw2 = round(.5*N)+1;

resultCV = momentg(Hasil.post_theta(idraw2:N,:)); meansb = [resultCV.pmean];

nseb = [resultCV.nse1];

CD = (meansa - meansb)./sqrt(nsea+nseb); onetail = 1-normcdf(abs(CD),0,1);

pV = 2*onetail;

% ===== 95% Highest Posterior Density (HPD) Interval ======================

resultsHPD = HPD(Hasil.post_theta,0.05); LB = [resultsHPD.LB];

UB = [resultsHPD.UB];

% ===== Numerical Standard Error (NSE) ==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];

%====================== Mengatur hasil pencetakan =========================

%--- Statistik Parameter: in.cnames = char('w','a','del');

in.rnames = char('Parameter','Mean','SD','LB','UB','IACT','NSE','G-CD','p-Value');

in.fmt = '%16.6f';

tmp = [MP; SP; LB; UB; IAT; NSEd; CD; pV];

fprintf(1,'Estimasi menggunakan MCMC dan Uji Diagnosa\n'); % cetak hasil

mprint(tmp,in);

1.1.7.

Kode Utama APARCH

(22)

%%%%% Function : Distribusi posterior dari parameter model GARCH %%%%% Inputs :

%%%%% R : returns

%%%%% its_MCMC : banyak iterasi MCMC

%%%%% RW_step : suatu skalar yang merupakan variansi untuk distribusi proposal dalam proses Random Walk

%%%%% Outputs :

%%%%% post_theta_RW : Posterior MCMC untuk omega, alfa, beta, gamma, dan

%%%%% delta

%%%%% post_theta_RW_adapt : Posterior MCMC untuk Omega,Alpha,Beta, Gamma, Delta dengan proses adaptive (selama burn-in)

%%%%% post_like_RW : Log-likelihood dari posterior

%%%%% post_like_RW_adapt : Log-likelihood posterior dari proses adaptive

%%%%% Ditampilkan juga hasil test diagnosa if(nargin<4)

graph = 1; if(nargin<3)

RW_step = 1; if(nargin<2)

its_MCMC = 15000; end

end end

%%%% Returns simpan dalam variabel T T = max(size(R));

if(T~=size(R,1)) R = R';

end

R2 = R.*R;

%%%%%%%%%% Dipilih nilai awal

theta0 = [0.5 0.1 0.1 0.1 1]; theta_RW_adapt = theta0;

like_current = APARCH_likelihood_adapt(R,R2,theta0); like_current_RW_adapt = like_current;

%%%%%%%%%% Batas-batas dari prior : Omega ~ U[0,wka] ; alpha ~ U[0,1] ;

%%%%%%%%%% beta|alpha ~ U[0,1-alpha], delta ~ [0,10] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wka = 10; burn_in = 5000;

N = its_MCMC-burn_in; post_like = zeros(N,1);

%%%%%%%%%%% Proses Random Walk dengan adaptative selama burn-in %%%%%%%%%%% Lihat Atchadé and Rosenthal (2005)

RW_step_adapt = [0.003 0.001 0.001 0.003 0.003]'; theta = zeros(N,5);

(23)

%%MCMC

accept_adapt = ones(1,5); thetaProp = zeros(1,5); thetaAcc = zeros(1,5); tic

for i=1:its_MCMC

thetaProp = thetaProp + 1; theta_prop = theta_RW_adapt; for q=1:5

if(theta_prop(q)>0 && theta_prop(q)<wka && pos<1) test = 1;

end

elseif q==4 %gamma

if(theta_prop(q)>=-1 && theta_prop(q)<=1 && pos<1) test=1;

end

elseifq==5 %delta

if(theta_prop(q)>0 && theta_prop(q)<5 && pos<1) test=1;

end

% alfa dan beta else

if(theta_prop(q)>0 && pos<1 && theta_prop(q)<1) test = 1;

end end

if(test==1)

[log_like_move] = APARCH_likelihood_adapt(R,R2,theta_prop); prior_lama = -log(wka) - log(1-theta_RW_adapt(2));

RW_step_adapt(q) = max(min_max_var(1),RW_step_adapt(q) + (accept_adapt(q)/i - 0.44)/(i^eta));

if(RW_step_adapt(q)>min_max_var(2))

RW_step_adapt(q) = min_max_var(2); end

(24)

if mod(i,100) == 0

thetaProp = zeros(1,5); thetaAcc = zeros(1,5); end

%theta_RW_adapt

% simpan w, a, b, del if i>burn_in

theta(i-burn_in,:) = theta_RW_adapt;

post_like(i-burn_in,1) = like_current_RW_adapt; end

% Start timer after burn-in if i == burn_in

disp('Burn-in complete, now drawing posterior samples.') end

end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo Hasil.post_theta = theta;

Hasil.post_like = post_like; Hasil.post_step = theta_RW_adapt; MP = mean(Hasil.post_theta);

SP = std(Hasil.post_theta);

% ===== Integrated Autocorrelation Time (IACT) ========================

% Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel

% yang independen (seberapa cepat konvergensi simulasi) resultsIAT = IACT(Hasil.post_theta);

IAT = [resultsIAT.iact]; % ===== Uji Konvergensi Geweke

============================================ idraw1 = round(.1*N);

resultCV = momentg(Hasil.post_theta(1:idraw1,:)); meansa = [resultCV.pmean];

nsea = [resultCV.nse1]; idraw2 = round(.5*N)+1;

resultCV = momentg(Hasil.post_theta(idraw2:N,:)); meansb = [resultCV.pmean];

nseb = [resultCV.nse1];

CD = (meansa - meansb)./sqrt(nsea+nseb); onetail = 1-normcdf(abs(CD),0,1);

pV = 2*onetail;

% ===== 95% Highest Posterior Density (HPD) Interval ======================

resultsHPD = HPD(Hasil.post_theta,0.05); LB = [resultsHPD.LB];

UB = [resultsHPD.UB];

(25)

==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];

%====================== Mengatur hasil pencetakan =========================

%--- Statistik Parameter:

in.cnames = char('w','a','b','y','del');

in.rnames = char('Parameter','Mean','SD','LB','UB','IACT','NSE','G-CD','p-Value');

in.fmt = '%16.6f';

tmp = [MP; SP; LB; UB; IAT; NSEd; CD; pV];

fprintf(1,'Estimasi menggunakan MCMC dan Uji Diagnosa\n'); % cetak hasil

mprint(tmp,in);

1.2.Kode Likelihood

1.2.1.

Kode Likelihood ARCH

function [log_likelihood] = ARCH_likelihood_adapt(R,R2,theta) T = max(size(R2));

sigmadel = zeros(T,1);

sigmadel(1) = theta(1) /(1 - theta(2)); log_likelihood =

-0.5*(log(2*pi)+log(sigmadel(1))+R2(1)/sigmadel(1)); for i=2:T

sigmadel(i) = theta(1) + theta(2)*(abs(R(i-1))^2); log_likelihood = log_likelihood

-0.5*(log(2*pi)+log(sigmadel(i))+R2(i)/sigmadel(i)); end

1.2.2.

Kode Likelihood GARCH

function [log_likelihood] = GARCH_likelihood_adapt(R,R2,theta) T = max(size(R2));

sigmadel = zeros(T,1);

sigmadel(1) = theta(1) /(1 - theta(2) - theta(3)); log_likelihood =

-0.5*(log(2*pi)+log(sigmadel(1))+R2(1)/sigmadel(1)); for i=2:T

sigmadel(i) = theta(1) + theta(2)*(abs(R(i-1))^2) + theta(3)*(sigmadel(i-1)^2);

log_likelihood = log_likelihood

-0.5*(log(2*pi)+log(sigmadel(i))+R2(i)/sigmadel(i)); end

1.2.3.

Kode Likelihood TARCH

function [log_likelihood] = TARCH_likelihood_adapt(R,R2,theta) T = max(size(R2));

sigmadel = zeros(T,1);

(26)

log_likelihood =

-0.5*(log(2*pi)+log(sigmadel(1)^2)+R2(1)/sigmadel(1)^2); for i=2:T

sigmadel(i) = theta(1) + theta(2)*(abs(R(i-1)) - theta(4)*R(i-1)) + theta(3)*(sigmadel(i-1));

log_likelihood = log_likelihood

-0.5*(log(2*pi)+log(sigmadel(i)^2)+R2(i)/sigmadel(i)^2); end

1.2.4.

Kode Likelihood TS-GARCH

Function [log_likelihood] =TSGARCH_likelihood_adapt(R,R2,theta) T = max(size(R2));

sigmadel = zeros(T,1);

sigmadel(1) = theta(1) /(1 - theta(2) - theta(3)); log_likelihood =

-0.5*(log(2*pi)+log(sigmadel(1))+R2(1)/sigmadel(1)); for i=2:T

sigmadel(i) = theta(1) + theta(2)*(abs(R(i-1))) + theta(3)*(sigmadel(i-1));

log_likelihood = log_likelihood

-0.5*(log(2*pi)+log(sigmadel(i))+R2(i)/sigmadel(i)); end

1.2.5.

Kode Likelihood GJR-GARCH

function [log_likelihood] = GJR_likelihood_adapt(R,R2,theta) T = max(size(R2));

sigmadel = zeros(T,1);

sigmadel(1) = theta(1) /(1 - theta(2) - 0.5*theta(4)) - theta(3)); log_likelihood = -0.5*(log(2*pi)+log(sigmadel(1))+R2(1)/sigmadel(1));

for i=2:T

sigmadel(i) = theta(1) + theta(2)*((abs(R(i-1)) - theta(4)*R(i-1))^2) + theta(3)*((sigmadel(i-1))^2); log_likelihood = log_likelihood

-0.5*(log(2*pi)+log(sigmadel(i))+R2(i)/sigmadel(i)); end

1.2.6.

Kode Likelihood NARCH

function [log_likelihood] = NARCH_likelihood_adapt(R,R2,theta) T = max(size(R2));

sigmadel = zeros(T,1);

sigmadel(1) = theta(1) /(1 - theta(2)); sigma2(1) = sigmadel(1) \^(2/theta(3)); log_likelihood =

-0.5*(log(2*pi)+log(sigmadel(1))+R2(1)/sigmadel(1)); for i=2:T

sigmadel(i) = theta(1) + theta(2)*(abs(R(i-1)))^theta(3); sigma2(i) = sigmadel(i)^(2/theta(3);

log_likelihood = log_likelihood

(27)

1.2.7.

Kode Likelihood APARCH

function [log_likelihood] = APARCH_likelihood_adapt(R,R2,theta) T = max(size(R2));

sigma2 = zeros(T,1);

sigmadel(1) = theta(1) /(1 - theta(2)*(1-theta(4))^(theta(5)) - theta(3));

sigma2(1) = sigmadel(1)^(2/theta(5));

log_likelihood = -0.5*(log(2*pi)+log(sigma2(1))+R2(1)/sigma2(1)); for i=2:T

sigmadel(i) = theta(1) + theta(2)*((abs(R(i-1)) - theta(4)*R(i-1))^theta(5)) ...

+ theta(3)*((sigmadel(i-1))^theta(5)); sigma2(i) = sigmadel(i)^(2/theta(5)); log_likelihood = log_likelihood

-0.5*(log(2*pi)+log(sigma2(i))+R2(i)/sigma2(i)); end

1.3.Kode Pendukung

(28)

Referensi

Dokumen terkait