• 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

Adapun sisanya untuk bagian anak-anak, yaitu satu anak laki-laki (bagiannya sama dengan bagian dua anak perempuan), sementara dua anak perempuan masing-masing

Pf,MENANC LELANG!. Nt6a

Mata bor helix kecil ( Low helix drills ) : mata bor dengan sudut helix lebih kecil dari ukuran normal berguna untuk mencegah pahat bor terangkat ke atas

Disemprotkan ( Jet Application of Fluid ), pada proses pendinginan dengan cara ini cairan pendingin disemprotkan langsung ke daerah pemotongan (pertemuan antara

Direktur Program Pascasarjana Universitas Negeri Yogyakarta dengan ini menyatakan bahwa mahasiswa program pascasarjana berikut ini adalah mahasiswa yang sedang aktif

Berdasarkan Surat Penetapan Pelaksana Pengadaan Langsung Nomor Nomor : 050/10 PnL-14/7/C.B.036/409.108/2015, tanggal 15 Mei 2015, untuk Pekerjaan Peningkatan Saluran Irigasi

Hasil penelitian menunjukkan bahwa persepsi siswa terhadap layanan bimbingan dan konseling 

MALANG - Fakultas Keguruan dan Ilmu Pendidikan (FKIP) Universitas Muhammadiyah Malang (UMM) kini ditunjuk sebagai penyelenggara program pendidikan guru dalam jabatan.. Misinya