lampiranrepository.uksw.edu/bitstream/123456789/15161/6/t1...lampiran 1 : kode matlab untuk...
TRANSCRIPT
LAMPIRAN
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; 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]'; 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 end
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]; 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.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 R2 = R.*R;
%%%%%%%%%% 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()) 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, 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]; 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'); 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 %%%%% 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.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 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 && 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)); 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,4); thetaAcc = zeros(1,4); 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];
% ===== 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
function [ Hasil ] = MCMC_TSGARCH_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 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); 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; 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 %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];
% ===== Numerical Standard Error (NSE)
==================================== resultsNSE = NSE(Hasil.post_theta); NSEd = [resultsNSE.nse];
%====================== Mengatur hasil pencetakan
=========================
%----- 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; like_current = GJR_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 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()) 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,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]; 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.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 %%%%% 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.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; end
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; 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];
%====================== 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
function [ Hasil ] = MCMC_APARCH_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.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); min_max_var = [1e-5 10]; eta = 0.6;
%%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 theta_prop(q) = theta_RW_adapt(q) +
sqrt(RW_step_adapt(q))*randn(); test = 0; pos = theta(2)*(1-theta(4))^(theta(5)) + 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 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)); 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,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];
% ===== Numerical Standard Error (NSE)
==================================== 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);
sigmadel(1) = theta(1) /(1 - theta(2)*(1-theta(4)) - theta(3));
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 -
0.5*(log(2*pi)+log(sigmadel(i))+R2(i)/sigmadel(i));
end
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
Kode IACT, momentg, HPD, NSE, dan mprint dapat dilihat dalam Nugroho (2014).
Lampiran 2 : Sertifikat Seminar