• Tidak ada hasil yang ditemukan

1. Inisialisasi a0, b0, 0, dan z0. 2. Pembangkitan.

N/A
N/A
Protected

Academic year: 2021

Membagikan "1. Inisialisasi a0, b0, 0, dan z0. 2. Pembangkitan."

Copied!
28
0
0

Teks penuh

(1)

23

(2)

24

Lampiran 1. Skema MCMC untuk model ARCH(1) non-central Student-t

1.

Inisialisasi a0, b0,

0, dan z0.

2.

Pembangkitan

.

Distribusi posterior bersyarat untuk

diberikan oleh

.

Dalam kasus ini, bisa dibangkitkan secara langsung dari distribusi normal yaitu

.

dengan

dan

3.

Pembangkitan

.

Distribusi posterior bersyarat untuk diberikan oleh

|

,

(

|

,

,

,

,

)

)

(

z

t

f

IG

z

t t

g

z

t

a

b

R

t 1

R

t

(3)

25

dengan

2

1

,



 

,

2

,...,

,

)

(

2

)

(

,

1

,

2

)

1

(

2 1 2 1 2 2 1

T

t

bR

a

bR

a

R

t

a

a

R

b

t t t t

 

 

.

,...,

2

,

exp

,

1

,

)

1

(

exp

)

,

,

,

,

|

(

2 1 2 1 2 1 2 1 2 1 1 1 1

T

t

z

bR

a

R

t

az

R

b

R

R

b

a

z

g

t t t t t t

Dalam hal ini, posterior zt tidak mengikuti suatu distribusi tertentu, maka parameter zt

dibangkitkan dengan menggunakan metode IC-MH dengan proposalnya yaitu

)

,

(

~

* t t

IG

z

dan rasio penerimaannya yaitu:

 

)

,

,

,

,

|

(

)

,

,

,

,

|

(

,

1 1 * * t t t t t t t t

R

R

b

a

z

g

R

R

b

a

z

g

z

z

r

 

.

4.

Pembangkitan

Distribusi posterior bersyarat untuk v diberikan oleh

.

Diambil logaritma distribusi posterior bersyarat untuk :

Nilai dibangkitkan menggunakan metode IC-MH, dengan proposal untuk yaitu

dan probabilitas penerimaannya yaitu

.

Dicari modus posterior dari

, artinya bahwa

. Dalam kasus ini

dan

ditentukan dengan menggunakan metode yang didasarkan pada tingkah laku

distribusi di sekitar modus. Lebih lanjut diperoleh bahwa derivatif pertama dan kedua

dari

berturut-turut yaitu:

(4)

26

Kemudian

dan

. Namun,

bisa bernilai positif, karena

(5)

27

Lampiran 2. Skema MCMC untuk model ARCH(1) Skewed Student-t

1. Inisialisasi a0, b0,

0, dan z0.

2. Membangkitkan nilai acak

a

|

b

,

,

k

,

Z,

R

.

Distribusi posterior bersyarat untuk a diberikan oleh

Diambil logaritma distribusi posterior bersyarat untuk a:

Nilai a dibangkitkan menggunakan metode IC-MH, dengan proposal untuk a yaitu

dan probabilitas penerimaannya yaitu

.

Dicari modus posterior dari

, artinya bahwa

. Diperoleh bahwa

derivatif pertama dan kedua dari

berturut-turut yaitu

(6)

28

Kemudian

dan

. Namun

bisa bernilai positif, karena

itu diambil

dengan

.

3. Membangkitkan nilai acak

b

|

a

,

,

k

,

Z,

R

Distribusi posterior bersyarat untuk a diberikan oleh

(7)

29

Nilai b dibangkitkan menggunakan metode IC-MH, dengan proposal untuk b yaitu

dan probabilitas penerimaannya yaitu

.

Dicari modus posterior dari

, artinya bahwa

. Diperoleh bahwa

derivatif pertama dan kedua dari

berturut-turut yaitu

Kemudian

dan

. Namun

bisa bernilai positif, karena

(8)

30

4. Membangkitkan nilai acak

k

|

a

,

b

,

,

Z,

R

Distribusi posterior bersyarat untuk k diberikan oleh

Diambil logaritma distribusi posterior bersyarat untuk k:

dengan

dan

. Dalam kasus ini, bisa dibangkitkan secara

langsung dari distribusi normal yaitu

dimana:

dan

5. Membangkitkan nilai-nilai acak

z

t

|

a

,

b

,

k

,

,

R

Distribusi posterior bersyarat untuk diberikan oleh

dengan

,

, t=1,...,T

Nilai dibangkitkan menggunakan metode IC-MH, dengan proposalnya yaitu

(9)

31

6. Membangkitkan nilai acak

|

k

,

a

,

b

,

Z,

R

Distribusi posterior bersyarat untuk v diberikan oleh

Diambil logaritma distribusi posterior bersyarat untuk :

Nilai dibangkitkan menggunakan metode IC-MH, dengan proposal untuk yaitu

dan probabilitas penerimaannya yaitu

.

(10)

32

Lampiran 3. Kode Matlab untuk Estimasi Model ARCH(1) noncentral Student-t

3.1 Kode Utama

function hasil=archnct_mcmc(Rt,HP)

% Tujuan: Mengestimasi parameter-parameter dalam model ARCH(1) % R_t = sigma_t * zt^0.5 * (miu+xhi_t), xhi_t~N(0,1) % sigma_t^2 = a + b*R_{t-1}^2

% ---% Algoritma: MCMC

% ---% Masukan: Rt = Returns = 100*[(log(S_t)-log(S_{t-1}))- 1/T*sum((log(S_t)-

log(S_{t-1}))],

% dimana S_t = nilai kurs pada saat t

% HP = Hyperparameter = [lambda alpha_b beta_b miu_c var_c alpha_nu beta_nu], untuk prior

% a ~ exp(lambda), b ~ beta(alpha_b,beta_b), % c ~ Normal(miu_c,var_c),

% dan nu ~ Gamma(alpha_nu, beta_nu)

% ---% Keluaran: hasil.draws = draws

% --- I: Inisialisasi T = length(Rt); R2 = Rt.^2; % prior untuk a lamd = HP(1); % prior untuk b alp = HP(2); bet = HP(3); %prior untuk c muc=HP(4); varc=HP(5); % prior untuk nu alpnu = HP(6); betnu = HP(7); % nilai awal a = 0.1; b = 0.1; nu = 20; zt = 1./gamrnd(nu/2,2/nu,T,1); % banyaknya replikasi Nits = 15000; BI = 5000; N = Nits-BI;

% alokasi penyimpanan sampel

av = zeros(N,1); bv = zeros(N,1); cv = zeros(N,1); nuv = zeros(N,1); zv = zeros(T,1); vol = zeros(T,1);

% --- Algoritma MCMC. Step 1: Membangkitkan Rantai Markov

tic

for its = 1:Nits

% --- pembangkitan nilai acak mu

Vc = 1/(T+1/varc);

Mc = Vc*(Rt(1)*sqrt((1-b)/(a*zt(1)))...

+sum(Rt(2:T).*((a+b*R2(1:T-1)).*zt(2:T)).^(-0.5))+muc/varc); c = normrnd(Mc,sqrt(Vc),1,1);

(11)

33

% --- pembangkitan nilai acak z

alpz = (nu+1)/2;

betz1 = 0.5*((1-b)*Rt(1)^2+a*nu)/a;

betz2 = (R2(2:T)+(a+b*R2(1:T-1)).*nu)./(2*(a+b*R2(1:T-1))); betz = [betz1; betz2];

% pembangkitan proposal

zprop = 1./gamrnd(alpz,1./betz);

% mengevaluasi probabilitas penerimaan

gzold1 = (sqrt(1-b)*c*Rt(1)./(a*zt(1))^(-0.5)); gzold2 = (c*Rt(2:T)./(sqrt(a+b*R2(1:T...

-1).*sqrt(zt(2:T))))); gzold = [gzold1; gzold2];

gznew1 = (sqrt(1-b)*c*Rt(1)*(a*zprop(1))^(-0.5)); gznew2 = (c*Rt(2:T)./(sqrt(a+b*R2(1:T...

-1).*sqrt(zprop(2:T))))); gznew = [gznew1; gznew2];

ratio = exp(gznew-gzold); % pembaharuan u = rand(T,1); minrat = min(1,ratio); ind = find(u<=minrat); zt(ind) = zprop(ind);

% mencari rata-rata dan variansi untuk proposal bersyarat

hpv = [alpnu betnu]; mv = bisection_nu(hpv,zt); % rata-rata d2v = 0.5*T/mv-T/4*psi(1,mv/2)-(alpnu-1)/mv^2; Dv = min(-0.0001,d2v); s2v = -1/Dv; %variansi % algoritma IC-MH

% pembangkitan proposal nu*

pr = truncnormrnd(1,mv,sqrt(s2v),2.1,40);

% mengevaluasi probabilitas penerimaan

log_pv = 0.5*pr*T*log(pr/2)-T*gammaln(pr/2)-pr/2 ... *sum(log(zt)+1./zt)+(alpnu-1)*log(pr)-betnu*pr; post_pr = exp(log_pv); log_pv = 0.5*nu*T*log(nu/2)-T*gammaln(nu/2)-nu/2 ... *sum(log(zt)+1./zt)+(alpnu-1)*log(nu)-betnu*nu; post_o = exp(log_pv); ratio = post_pr/post_o; ap = min(1,ratio);

% pembangkitan variabel acak seragam

u = rand(1);

% pembaruan

if u <= ap, nu = pr; end

% --- pembangkitan sampel a

% mencari rata-rata dan variansi untuk distribusi proposal

hp1 = lamd;

m_a = bisection_nct(Rt,R2,a,b,c,hp1,zt,'a'); % rata-rata

d2a = 1/(2*m_a^2)+0.5*sum(1./(m_a+b*R2(1:T-1)).^2)... -0.5*(1-b)*R2(1)/(m_a^3*zt(1))-(0.25*c*Rt(1)*(1... -b)^2./((1-b)/m_a*zt(1))^(0.5)*m_a^(4)*zt(1)^2)... +c*Rt(1)*(1-b)./sqrt((1-b)./m_a*zt(1))*m_a^(3)*zt(1)... -sum(R2(2:T)./((m_a+b*R2(1:T-1)).^3.*zt(2:T)))... +0.75*sum(c*Rt(2:T)./(m_a+b*Rt(1:T... -1).^(2.5).*sqrt(zt(2:T)))); Da = min(-0.0001,d2a); s2_a = -1/Da; % variansi

% algoritma IC-MH

(12)

34

pr = truncnormrnd(1,m_a,sqrt(s2_a),1e-4,1);

% mengevaluasi probabilitas penerimaan

log_pa = -0.5*log(pr)-0.5*sum(log(pr+b*R2(1:T-1)))... -0.5*(1-b)*R2(1)/(pr*zt(1))... +sqrt(1-b/pr*zt(1)*c*Rt(1))... -0.5*sum((R2(2:T)./((pr+b*R2(1:T-1)).*zt(2:T)))... +(c*Rt(2:T)./(sqrt(pr+b*R2(1:T-1)).*sqrt(zt(2:T)))))... -lamd*pr; % F(pr) post_pr = exp(log_pa); log_pa = -0.5*log(a)-0.5*sum(log(a+b*R2(1:T-1)))... -0.5*(1-b)*R2(1)/(a*zt(1))-... +sqrt(1-b/a*zt(1)*c*Rt(1)) ... -0.5*sum((R2(2:T)./((a+b*R2(1:T-1)).*zt(2:T))) ... +(c*Rt(2:T)./(sqrt(a+b*R2(1:T-1)).*sqrt(zt(2:T)))))... -lamd*a; % F(a) post_o = exp(log_pa); ratio = post_pr/post_o; ap = min(1,ratio);

% pembangkitan variabel acak seragam

u = rand(1);

% pembaruan

if u <= ap, a = pr; end

% --- pembangkitan nilai acak b

% mencari rata-rata dan variansi untuk distribusi proposal

mup = alp; Vp = bet; hp1 = [mup Vp]; m_b = bisection_nct(Rt,R2,a,b,c,hp1,zt,'b'); % rata-rata d2b = -0.5/(1-m_b)^2+0.5*sum((R2(1:T-1).^2)./((a+m_b*R2(1:T... -1)).^2))-0.25*c*Rt(1)/((1... -m_b/a*zt(1)).^(1.5)*a^2*zt(1)^2)... -sum(((R2(1:T-1).^2).*(R2(2:T)))... ./((a+m_b*R2(1:T-1)).^3.*zt(2:T)))... +0.75*sum(R2(1:T-1).^(2)*c.*Rt(2:T)./(a+m_b*Rt(1:T... -1).^(2.5).*sqrt(zt(2:T))))... -(alp-1)/(m_b^2)-(bet-1)/(1-m_b)^2; Db = min(-0.0001,d2b); s2_b = -1/Db; % variansi % algoritma IC-MH % pembangkitan proposal b* pr = truncnormrnd(1,m_b,sqrt(s2_b),0,1);

% mengevaluasi probabilitas penerimaan

log_pb = 0.5*log(1-pr)-0.5*sum(log(a+pr*R2(1:T-1)))... -0.5*(1-pr)*R2(1)/(a*zt(1))... +sqrt(1-pr/a*zt(1))*c*Rt(1)... -0.5*sum((R2(2:T)./(a+pr*R2(1:T-1).*zt(2:T)))... +c*Rt(2:T)./sqrt(a+pr*R2(1:T-1)).*sqrt(zt(2:T)))... +(alp-1)*log(pr)+(bet-1)*log(1-pr); % F(pr) post_pr = exp(log_pb); log_pb = 0.5*log(1-b)-0.5*sum(log(a+b*R2(1:T-1)))... -0.5*(1-b)*R2(1)/(a*zt(1))... +sqrt(1-b/a*zt(1))*c*Rt(1)... -0.5*sum((R2(2:T)./(a+b*R2(1:T-1).*zt(2:T)))... +c*Rt(2:T)./sqrt(a+b*R2(1:T-1)).*sqrt(zt(2:T)))... +(alp-1)*log(b)+(bet-1)*log(1-b); %F(b) post_o = exp(log_pb); ratio = post_pr/post_o; ap = min(1,ratio);

% pembangkitan variabel acak seragam

u = rand(1);

% pembaruan

(13)

35

% pengestimasian sigma

volt = [a/(1-b); a+b*R2(1:T-1)];

% simpan a, b, c, dan nu if its > BI av(its-BI,1) = a; bv(its-BI,1) = b; cv(its-BI,1) = c; nuv(its-BI,1) = nu; zv = ((its-BI-1)*zv+zt)/(its-BI); vol = ((its-BI-1)*vol+volt)/(its-BI); end end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo

draws = [av bv cv nuv]; MP = mean(draws); SP = std(draws);

% ===== Integrated Autocorrelation Time (IACT) ============================ % Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel % yang independent (seberapa cepat konvergensi simulasi)

resultsIAT = IACT(draws); IAT = [resultsIAT.iact];

% ===== Uji Konvergensi Geweke ============================================

idraw1 = round(.1*N); resultCV = momentg(draws(1:idraw1,:)); meansa = [resultCV.pmean]; nsea = [resultCV.nse1]; idraw2 = round(.5*N)+1; resultCV = momentg(draws(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(draws,0.05); LB = [resultsHPD.LB]; UB = [resultsHPD.UB];

% % ===== Numerical Standard Error (NSE) ====================================

resultsNSE = NSE(draws); NSEd = [resultsNSE.nse];

%====================== Pengaturan Pencetakan Hasil ======================= %--- Statistik Parameter

in.cnames = char('a','b','c','nu');

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 Diagnostik\n'); mprint(tmp,in);

hasil.vol = vol; hasil.zv = zv; hasil.av = av;

(14)

36

hasil.bv = bv; hasil.cv = cv; hasil.nuv = nuv; hasil.draws = draws;

%========== Calculate Marginal likelihood by Gelfand-Dey (1994) ===========

theta = draws'; [npar,ndraw] = size(theta); mvn_mean = mean(theta,2); mvn_cov = cov(theta'); inv_mvn_cov = inv(mvn_cov); %--- POSTERIOR % domain truncate_val = zeros(1,ndraw); for i = 1:ndraw draw_element = theta(:,i);

truncate_val(i) = (draw_element-mvn_mean)' * inv_mvn_cov...

* (draw_element-mvn_mean);

end

critical_value = chi2inv(0.99,npar);

truncate_index = truncate_val > critical_value;

source_pdf_log = mvn_pdf_log(theta,mvn_mean(:,ones(ndraw,1)),mvn_cov) ... - log(0.99); source_pdf_log(truncate_index) = -inf; %--- PRIOR % a prior_pdf_a_log = log(lamd)-lamd*av'; % b prior_pdf_b_log = -betaln(alp,bet)+(alp-1).*log(bv')+(bet-1).*log(1-bv'); % c

prior_pdf_c_log = -1/2*log(2*pi*varc) - 1/2*(cv'-muc).^2/varc;

% nu

prior_pdf_nu_log = -gammaln(alpnu)+alpnu.*log(betnu)+(alpnu-1).*log(nuv')-betnu.*nuv';

% LOG TOTALLY PRIOR

prior_pdf_log = sum(prior_pdf_a_log) + prior_pdf_b_log ... + prior_pdf_c_log + prior_pdf_nu_log; % LIKELIHOOD likelihood_log = zeros(1,ndraw); for i = 1:ndraw likelihood_log(i) = ARCHnct_likelihood(Rt,zt,draws(i,:)); end

GD_log = source_pdf_log - prior_pdf_log - likelihood_log; constant = max(GD_log);

ML_GD = -constant - log(mean(exp(GD_log - constant)))

3.2 Kode bisection

function mv = bisection_nu(hpv,zt)

% Tujuan : Mencari akar dari F’(v)= 0 menggunakan metode bagi dua %

% ---% Masukan : hpv = nilai prior v

% zt = [z_1, z_2, z_3, ….,z_T]

(15)

---37

% keluaran : mv = akar penyelesaian

eps_step = 1e-2; bb = 2.1;

ba = 100;

if diffFnu(hpv,zt,bb) == 0 % derivatif pertama

mv = bb; return; elseif diffFnu(hpv,zt,ba) == 0 mv = ba; return; elseif diffFnu(hpv,zt,bb)*diffFnu(hpv,zt,ba) > 0

error( 'diffFnu(a) and diffFnu(b) do not have opposite signs' );

end

while abs(ba - bb) >= eps_step

x = (ba + bb)/2; if diffFnu(hpv,zt,x) == 0 mv = x; return; elseif diffFnu(hpv,zt,x)*diffFnu(hpv,zt,ba) < 0 bb = x; else ba = x; end end mv=x;

3.3 Kode bisection NCT

function mab = bisection_nct(Rt,R2,a,b,c,hp1,zt,par)

% Tujuan : Mencari akar dari F’(a)=0 atau F’(b)=0 menggunakan metode % bagi dua % % ---% Masukan : Rt = returns % R2 = returns^2 % a = nilai a % b = nilai b % c = nilai miu % hp1 = nilai prior % zt = [z_1, z_2, z_3, ….,z_T] % par = 'a' atau 'b'

% ---% keluaran : mab = akar penyelesaian

eps_step = 1e-2; if par == 'a' bb = 1e-5; ba = 1; elseif par == 'b' bb = 0; ba = 1; end

if diffARCH_nct(Rt,R2,a,b,c,hp1,zt,bb,par) == 0 %derivatif pertama

mab = bb; return; elseif diffARCH_nct(Rt,R2,a,b,c,hp1,zt,ba,par) == 0 mab = ba; return; elseif diffARCH_nct(Rt,R2,a,b,c,hp1,zt,ba,par)*diffARCH_nct(Rt,R2,a,b,c,hp1,zt,bb,par) > 0

(16)

38

end

while abs(bb - ba) >= eps_step

x = (ba + bb)/2; if diffARCH_nct(Rt,R2,a,b,c,hp1,zt,c,par) == 0 mab = x; return; elseif diffARCH_nct(Rt,R2,a,b,c,hp1,zt,c,par)*diffARCH_nct(Rt,R2,a,b,c,hp1,zt,ba,par) < 0 bb = x; else ba = x; end end mab = x;

3.4 Kode untuk turunan pertama F(

)

function y = diffFnu(hpv,zt,nu)

% Tujuan : Mengitung F’(v)

% ---% Masukan : hpv = nilai prior

% zt = [z_1, z_2, z_3, ….,z_T]

% nu = nilai v

% --- % keluaran : y = nilai turunan pertama

T=length(zt);

%derivatif pertama

y = T/2*(log(nu/2)+1-psi(nu/2))-0.5*sum(log(zt)+1./zt)+(hpv(1)-1)/nu-hpv(2);

4.5 Kode untuk turunan pertama F(a) dan F(b)

function Fab = diffARCH_nct(Rt,R2,a,b,c,hp1,zt,bts,par)

% Tujuan : Mengitung F’(a) atau F’(b)

% ---% Masukan : Rt = returns % R2 = returns^2 % a = nilai a % c = nilai miu % hp1 = nilai prior % zt = [z_1, z_2, z_3, ….,z_T]

% bts = batas kiri/kanan interval pada metode bagi dua % par = 'a' atau 'b'

% ---% keluaran : Fab = nilai turunan pertama

if par =='a'% derivatif pertama terhadap a

a = bts; lamd = hp1; Fab = -1/(2*a)-0.5*sum(1./(a+b*R2(1:end-1)))... +0.5*(1-b)*R2(1)/(a^2*zt(1))... -2*(1-b)^2*R2(1)./(a^3+zt(1).^2)... +0.5*sum(((R2(2:end))./((a+b*R2(1:end-1)).^2.*zt(2:end)))... -c*Rt(2:end)./(a+b*R2(1:end-1)).^(1.5).*sqrt(zt(2:end)))... -lamd;

elseif par == 'b' % derivatif pertama terhadap b

b = bts; alp = hp1(1); bet=hp1(2); Fab = -1/(2*(1-b))... -0.5*sum(R2(1:end-1)./(a+b*R2(1:end-1)))... +R2(1)/(2*a*zt(1))... -0.5*c*Rt(1)/sqrt(1-b/a*zt(1))*a*zt(1)... +0.5*sum(R2(1:end-1).*R2(2:end)./((a+b*R2(1:end... -1)).^2.*zt(2:end)))-1.5*sum(R2(1:end... -1).^2*c.*Rt(2:end)./(a+b*R2(1:end-1)).^2.5.*zt(2:end))...

(17)

39

+(alp-1)/b-(bet-1)/(1-b);

end

3.6 Kode likelihood NCT

function [log_likelihood] = ARCHnct_likelihood(R,zt,draws)

% Tujuan : Mencari log likelihood ARCH(1) NCT %

% ---% Masukan : R = returns

% zt = [z_1, z_2, z_3, ….,z_T] % draws = [av bv cv nuv]

% ---% keluaran : log_likelihood T = max(size(R)); sig2 = zeros(T,1); sig2(1) = draws(1)/(1-draws(2)); var(1) = sig2(1)*zt(1); y2(1) = (R(1)-sqrt(var(1))*draws(3))^2;

log_likelihood = -0.5*log(2*pi*var(1)) -0.5*y2(1)/var(1);

for i=2:T

sig2(i) = draws(1) + draws(2)*R(i-1)^2; var(i) = sig2(i)*zt(i);

y2(i) = (R(i)-sqrt(var(i))*draws(3))^2;

log_likelihood = log_likelihood -0.5*log(2*pi*var(i)) -0.5*y2(i)/var(i);

end

3.7 Kode untuk memanggil hasil estimasi

clc clear all %data

data1=csvread('jpy_kursbeli.csv'); data1 = data1(end-1471:end); data2=csvread('eur_kursbeli.csv'); data3 = data3(end-1471:end); Rjpy=100*price2ret(data1); Rjpy=Rjpy-mean(Rjpy); Reur=100*price2ret(data2); Reur=Reur-mean(Reur); lamd=1; alpb=2.5; betb=3; alpnu=16; betnu=0.8; muc=0; varc=1;

HP=[lamd alpb betb muc varc alpnu betnu]; hasil = archnct_mcmc(Rjpy,HP); vol = hasil.vol ; zv = hasil.zv; av = hasil.av; bv = hasil.bv; cv = hasil.cv; nuv = hasil.nuv; draws = hasil.draws; % ========== Save data ==================================================== dlmwrite('F:\nct\HASIL\eur_nct_draws.csv',draws,'delimiter',',','precision','%0 .16f')

(18)

40

3.8 Kode Pendukung

Kode truncnormrnd, IACT, momentg, HPD, NSE, mprint, dan mvn_pdf_log dapat

dilihat dalam Nugroho (2014).

(19)

41

Lampiran 4. Kode Matlab untuk Estimasi Model ARCH(1) Skewed Student-t

4.1 Kode Utama

function hasil=archskt_mcmc(Rt,HP)

% Tujuan: Mengestimasi parameter-parameter dalam model ARCH(1) % R_t = sigma_t*(k*(zt-miu_z)+zt^0.5*xhi_t), xhi_t~N(0,1) % sigma_t^2 = a + b*R_{t-1}^2

% ---% Algoritma: MCMC

% ---% Masukan: Rt = Returns = 100*[(log(S_t)-log(S_{t-1}))- 1/T*sum((log(S_t)-

log(S_{t-1}))],

% dimana S_t = nilai kurs pada saat t

% HP = Hyperparameter = [lambda alpha_b beta_b miu_k var_k alpha_nu beta_nu], untuk prior

% a ~ exp(lambda), b ~ beta(alpha_b,beta_b), % k ~ Normal(miu_k,var_k),

% dan nu ~ Gamma(alpha_nu, beta_nu)

% ---% Keluaran: hasil.draws = draws

% --- I: Inisialisasi T = length(Rt); R2 = Rt.^2; % prior untuk a lamd = HP(1); % prior untuk b alp = HP(2); bet = HP(3); %prior untuk k muk=HP(4); vark=HP(5); % prior untuk nu alpnu = HP(6); betnu = HP(7); % nilai awal a = 0.1; b = 0.1; nu = 10; zt = 1./gamrnd(nu/2,2/nu,T,1); mz=nu/(nu-2); sig2t=[a/(1-b); a+b*R2(1:T-1)]; % banyak replikasi Nits = 15000; BI = 5000; N = Nits-BI;

% alokasi penyimpanan nilai-nilai acak

av = zeros(N,1); bv = zeros(N,1); kv = zeros(N,1); nuv = zeros(N,1); zv = zeros(T,1); vol = zeros(T,1);

% --- Algoritma MCMC. Step 1: Membangkitkan Rantai Markov

tic

for its = 1:Nits

% --- pembangkitan sampel k

(20)

42

Bt = sig2t.*zt; sum1 = sum(At.^2./Bt); sum2 = sum(-1./2*vark); Vk = 1./(sum1+sum2); Mk = Vk*sum(At.*Rt./Bt+muk/vark); k = normrnd(Mk,sqrt(Vk),1,1); % --- pembangkitan sampel z alpz = (nu+1)/2; betz = nu/2+R2/2+k*Rt.*sig2t.^(-0.5)*mz... +k^2.*mz^2/2; % pembangkitan proposal zprop = 1./gamrnd(alpz,1./betz);

% mengevaluasi probabilitas penerimaan

gzold = k*Rt.*sig2t.^(-0.5)-0.5*k^2*zt+k^2*mz*zt; gznew = k*Rt.*sig2t.^(-0.5)-0.5*k^2*zprop+k^2*mz*zprop; ratio = exp(gznew-gzold);

% pembangkitan variabel acak seragam

u = rand(T,1); % pembaharuan minrat = min(1,ratio); ind = find(u<=minrat); zt(ind) = zprop(ind);

% mencari rata-rata dan variansi untuk proposal bersyarat

hpv = [alpnu betnu]; mv = bisection_nuSkt(Rt,sig2t,k,hpv,zt); % rata-rata ddv =sum(-4*k./(sig2t.^(0.5).*zt)*(mv-2)^(-4).*((mv-2)*(Rt- sig2t.^(0.5).*k.*zt... +sqrt(sig2t).*k.*(mv/(mv-2))).*sqrt(sig2t).*k) ); d2v = ddv +0.5*T/mv-T/4*psi(1,mv/2)-(alpnu-1)/mv^2; Dv = min(-0.0001,d2v); s2v = -1/Dv; %variansi % algoritma IC-MH

% pembangkitan proposal nu*

pr = truncnormrnd(1,mv,sqrt(s2v),2.1,40);

% mengevaluasi probabilitas penerimaan

log_pv = -0.5*sum((2*Rt*k.*sig2t.^(-0.5)*pr/(pr-2)... +k^2.*(-2.*zt*pr/(pr-2)+(pr/(pr-2))^2))./zt)... +0.5*pr*T*log(pr/2)-T*gammaln(pr/2) ... -pr/2*sum(log(zt)+1./zt)+(alpnu-1)*log(pr)-betnu*pr; post_pr = exp(log_pv); log_pv = -0.5*sum((2*Rt*k.*sig2t.^(-0.5)*(nu./(nu-2))... +k^2*(-2*zt*(nu/(nu-2))+(nu./(nu-2))^(2)))./zt)... +0.5*nu*T*log(nu/2)-T*gammaln(nu/2)-nu/2 ... *sum(log(zt)+1./zt)+(alpnu-1)*log(nu)-betnu*nu; post_o = exp(log_pv); ratio = post_pr/post_o; ap = min(1,ratio);

% pembangkitan variabel acak seragam

u = rand(1); % pembaruan if u <= ap, nu = pr; end mz = nu/(nu-2); % --- pembangkitan sampel a

% mencari rata-rata dan variansi untuk distribusi proposal

hp1 = lamd;

m_a = bisection_skt(Rt,R2,a,b,mz,k,hp1,zt,'a'); % rata-rata

d2a = 1/(2*m_a^2)+0.5*sum(1./(m_a+b*R2(1:T-1)).^2)...

-0.5*(1-b)*R2(1)/(m_a^3*zt(1))-(0.25*k*Rt(1)... *(1-b)^2)./(((1-b)/m_a*zt(1))^(1.5)*m_a^(4))...

+k*Rt(1)*(1-b)./sqrt((1-b)./m_a*m_a^(3)...

(21)

43

-sum(R2(2:T)./((m_a+b*R2(1:T-1)).^3.*zt(2:T)))... +0.75*sum(k*Rt(2:T)./(m_a+b*Rt(1:T-1).^(2.5)))... -0.75*sum((k*Rt(2:T).*mz)./(m_a... +b*Rt(1:T-1).^(2.5).*zt(2:T)))); Da = min(-0.0001,d2a);

s2_a = -1/Da; % variansi

% algoritma IC-MH

% pembagkitan proposal a*

pr = truncnormrnd(1,m_a,sqrt(s2_a),1e-4,1);

% mengevaluasi probabilitas penerimaan

log_pa = -0.5*log(pr)-0.5*sum(log(pr+b*R2(1:T-1)))-... 0.5*(1-b)*R2(1)/(pr*zt(1))-... +sqrt((1-b)/pr)*k*Rt(1)... -(k*Rt(1)*mz)./(sqrt(pr/(1-b)).*zt(1))... -0.5*sum(R2(2:T)./((pr+b*R2(1:T-1)).*zt(2:T)) ... +(k*Rt(2:T)./(sqrt(pr+b*R2(1:T-1))))... -(k*Rt(2:T)*mz./(sqrt(pr+b*R2(1:T-1))).*zt(2:T)))... -lamd*pr; % F(pr) post_pr = exp(log_pa); log_pa = -0.5*log(a)-0.5*sum(log(a+b*R2(1:T-1)))-... 0.5*(1-b)*R2(1)/(a*zt(1))-... +sqrt((1-b)/a)*k*Rt(1)... -(k*Rt(1)*mz)./(sqrt(a/(1-b)).*zt(1))... -0.5*sum(R2(2:T)./((a+b*R2(1:T-1)).*zt(2:T))... +(k*Rt(2:T)./(sqrt(a+b*R2(1:T-1))))... -(k*Rt(2:T)*mz./(sqrt(a+b*R2(1:T-1))).*zt(2:T)))... -lamd*a; % F(a) post_o = exp(log_pa); ratio = post_pr/post_o; ap = min(1,ratio);

% pembangkitan variabel acak seragam

u = rand(1);

% pembaruan

if u <= ap, a = pr; end

% --- pembangkitan sampel b

% mencari rata-rata dan variansi untuk distribusi proposal

mup = alp; Vp = bet; hp1 = [mup Vp]; m_b = bisection_skt(Rt,R2,a,b,mz,k,hp1,zt,'b'); % rata-rata d2b = -0.5/(1-m_b)^2+0.5*sum((R2(1:T-1).^2)./((a+m_b*R2(1:T... -1)).^2))-0.25*k*Rt(1)/((1-m_b/a).^(1.5)*a^2)... +0.25*k*Rt(1)*mz/((1-m_b/a).^(1.5)*a^2.*zt(1))... -sum(((R2(1:T-1).^2).*(R2(2:T)))./((a+m_b*R2(1:T... -1)).^3.*zt(2:T)))+0.75*sum(R2(1:T... -1).^(2)*k.*Rt(2:T)./(a+m_b*Rt(1:T-1).^(2.5)))... -0.75*sum(R2(1:T-1).^(2)*k.*Rt(2:T)*mz./(a+m_b*Rt(1:T... -1).^(2.5).*zt(2:T)))-(alp-1)/(m_b^2)-(bet-1)/(1-m_b)^2; Db = min(-0.0001,d2b); s2_b = -1/Db; % variansi % algoritma IC-MH % pembangkitan proposal b* pr = truncnormrnd(1,m_b,sqrt(s2_b),0,1);

% mengevaluasi probabilitas penerimaan

log_pb =0.5.*log(1-pr)-0.5.*sum(log(a+pr.*R2(1:T-1)))... -0.5.*(1-pr).*R2(1)./(a*zt(1))... +sqrt((1-pr)/a).*k.*Rt(1)-k.*Rt(1).*mz./(sqrt(a/(1... -pr)).*zt(1))-0.5.*sum(R2(2:T)./(a+pr.*R2(1:T-... 1).*zt(2:T))+k.*Rt(2:T)./sqrt(a+pr.*R2(1:T-1))... -k.*Rt(2:T).*mz./sqrt(a+pr.*R2(1:T-1)).*zt(2:T))... +(alp-1)*log(pr)+(bet-1)*log(1-pr); % F(pr) post_pr = exp(log_pb);

(22)

44

log_pb = 0.5.*log(1-b)-0.5.*sum(log(a+b.*R2(1:T-1)))... -0.5.*(1-b).*R2(1)./(a*zt(1))... +sqrt((1-b)/a).*k.*Rt(1)-k.*Rt(1).*mz./(sqrt(a/(1... -b)).*zt(1))-0.5.*sum(R2(2:T)./(a+b.*R2(1:T... -1).*zt(2:T))+k.*Rt(2:T)./sqrt(a+b.*R2(1:T-1))... -k.*Rt(2:T).*mz./sqrt(a+b.*R2(1:T-1)).*zt(2:T))... +(alp-1)*log(b)+(bet-1)*log(1-b); %F(b) post_o = exp(log_pb); ratio = post_pr/post_o; ap = min(1,ratio);

% pembangkitan variabel acak seragam

u = rand(1);

% pembaruan

if u <= ap, b = pr; end

% pengestimasian sigma

volt = [a/(1-b); a+b*R2(1:T-1)]; sig2t = volt; % simpan a, b, k, dan nu if its > BI av(its-BI,1) = a; bv(its-BI,1) = b; kv(its-BI,1) = k; nuv(its-BI,1) = nu; zv = ((its-BI-1)*zv+zt)/(its-BI); vol = ((its-BI-1)*vol+volt)/(its-BI); end end toc

% --- Algoritma MCMC. Step 2: Menghitung rata-rata Monte Carlo

draws = [av bv kv nuv]; MP = mean(draws); SP = std(draws);

% ===== Integrated Autocorrelation Time (IACT) ============================ % Berapa banyak sampel yang harus dibangkitkan untuk mendapatkan sampel % yang bebas (seberapa cepat konvergensi simulasi)

resultsIAT = IACT(draws); IAT = [resultsIAT.iact];

% ===== Uji Konvergensi Geweke ============================================

idraw1 = round(.1*N); resultCV = momentg(draws(1:idraw1,:)); meansa = [resultCV.pmean]; nsea = [resultCV.nse1]; idraw2 = round(.5*N)+1; resultCV = momentg(draws(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(draws,0.05); LB = [resultsHPD.LB]; UB = [resultsHPD.UB];

(23)

45

resultsNSE = NSE(draws); NSEd = [resultsNSE.nse];

%====================== Pengaturan Pencetakan Hasil ======================= %--- Statistik Parameter

in.cnames = char('a','b','k','nu');

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 Diagnostik\n'); mprint(tmp,in); hasil.vol = vol; hasil.zv = zv; hasil.av = av; hasil.bv = bv; hasil.kv = kv; hasil.nuv = nuv; hasil.draws = draws;

4.2 Kode bisection

function mv = bisection_nuSkt(Rt,sig2t,k,hpv,zt)

% Tujuan : Mencari akar dari F’(v)= 0 menggunakan metode bagi dua %

% Masukan : Rt = returns % Sig2t = sigma_t^2

% k = nilai parameter skewness k % hpv = nilai prior v

% zt = [z_1, z_2, z_3, ….,z_T]

% ---% keluaran : mv = akar penyelesaian

eps_step = 1e-2; bb = 2.1;

ba = 100;

if diffFnuSkt(Rt,sig2t,k,hpv,zt,bb) == 0 % derivatif pertama

mv = bb; return; elseif diffFnuSkt(Rt,sig2t,k,hpv,zt,ba) == 0 mv = ba; return; elseif diffFnuSkt(Rt,sig2t,k,hpv,zt,bb).*diffFnuSkt(Rt,sig2t,k,hpv,zt,ba) > 0

error( 'diffFnuSkt(a) and diffFnuSkt(b) do not have opposite signs' );

end

while abs(ba - bb) >= eps_step

x = (ba + bb)/2; if diffFnuSkt(Rt,sig2t,k,hpv,zt,x) == 0 mv = x; return; elseif diffFnuSkt(Rt,sig2t,k,hpv,zt,x).*diffFnuSkt(Rt,sig2t,k,hpv,zt,ba) < 0 bb = x; else ba = x; end end mv=x;

(24)

46

4.3 Kode bisection SKT

function mab = bisection_skt(Rt,R2,a,b,mz,k,hp1,zt,par)

% Tujuan : Mencari akar dari F’(a)=0 atau F’(b)=0 menggunakan metode % bagi dua % % ---% Masukan : Rt = returns % R2 = returns^2 % a = nilai a % b = nilai b % mz = nilai miu_z

% k = nilai parameter skewness k % hp1 = nilai prior

% zt = [z_1, z_2, z_3, ….,z_T] % par = 'a' atau 'b'

% ---% keluaran : mab = akar penyelesaian

eps_step = 1e-2; if par == 'a' bb = 1e-5; ba = 1; elseif par == 'b' bb = 0; ba = 1; end

if diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,bb,par) == 0 %derivatif pertama

mab = bb; return; elseif diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,ba,par) == 0 mab = ba; return; elseif diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,ba,par)*diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,b b,par) > 0

error( 'diffARCH(ba) and diffARCH(bb) do not have opposite signs' );

end

while abs(bb - ba) >= eps_step

x = (ba + bb)/2; if diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,x,par) == 0 mab = x; return; elseif diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,x,par)*diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,ba ,par) < 0 bb = x; else ba = x; end end mab = x;

(25)

47

4.4 Kode untuk turunan pertama F(

)

function y = diffFnuSkt(Rt,sig2t,k,hpv,zt,nu) % Tujuan : Mengitung F’(v) % % ---% Masukan : Rt = returns % sig2t = sigma_t^2

% k = nilai parameter skewness k % hpv = nilai prior

% zt = [z_1, z_2, z_3, ….,z_T]

% nu = nilai v

% --- % keluaran : y = nilai turunan pertama

T = length(zt);

y = sum(2./(sig2t.^(0.5).*zt)*k*(nu-2)^(-2).*(Rt... -sig2t.^(0.5)*k.*zt+sig2t*k*nu/(nu-2)))...

+T/2*(log(nu/2)+1-psi(nu/2))-0.5*sum(log(zt)+1./zt)... +(hpv(1)-1)/nu-hpv(2);

4.5 Kode untuk turunan pertama F(a) dan F(b)

function Fab = diffARCH_skt(Rt,R2,a,b,mz,k,hp1,zt,bts,par)

% Tujuan : Mengitung F’(a) atau F’(b)

% ---% Masukan : Rt = returns % R2 = returns^2 % a = nilai a % b = nilai b % mz = nilai miu_z

% k = nilai parameter skewness k % hp1 = nilai prior

% zt = [z_1, z_2, z_3, ….,z_T]

% bts = batas kiri/kanan interval pada metode bagi dua % par = 'a' atau 'b'

% ---% keluaran : Fab = nilai turunan pertama

if par =='a'% derivatif pertama terhadap a

a = bts; lamd = hp1; Fab = -1/(2*a)-0.5*sum(1./(a+b*R2(1:end-1)))... +0.5*(1-b)*R2(1)/(a^2*zt(1))... -0.5*k.*(1-b)^2*Rt(1)./((sqrt(1-b)./a).*a.^(2))... +0.5*k.*Rt(1).*mz./sqrt(a./(1-b)).*zt(1).*(1-b)... +0.5*sum(((R2(2:end))./((a+b*R2(1:end-1)).^2.*zt(2:end)))... -0.5*k*Rt(2:end)./(a+b*R2(1:end-1)).^(1.5)... +0.5*k.*Rt(2:end).*mz./(a+b*R2(1:end... -1)).^(1.5).*zt(2:end))-lamd;

elseif par == 'b' % derivatif pertama terhadap b

b = bts; alp = hp1(1); bet=hp1(2); Fab = -1/(2*(1-b))... -0.5*sum(R2(1:end-1)./(a+b*R2(1:end-1)))... +R2(1)/(2*a*zt(1))... -0.5*k*Rt(1)/sqrt((1-b)/a).*a... +0.5*k*Rt(1).*mz./(sqrt((1-b)./a).*a*zt(1))... +0.5*sum(R2(1:end-1).*R2(2:end)./((a+b*R2(1:end... -1)).^2.*zt(2:end)))... -0.5*sum(R2(1:end-1)*k.*Rt(2:end)./(a+b*R2(1:end-1)).^1.5)... +0.5*sum(R2(1:end-1)*k.*Rt(2:end)./(a+b*R2(1:end... -1)).^1.5.*zt(2:end))+(alp-1)/b-(bet-1)/(1-b);

(26)

48

end

4.6 Kode untuk memanggil hasil estimasi

clc clear all %data

data1=csvread('jpy_kursbeli.csv'); data1 = data1(end-1471:end); data2=csvread('eur_kursbeli.csv'); data3 = data3(end-1471:end); Rjpy=100*price2ret(data1); Rjpy=Rjpy-mean(Rjpy); Reur=100*price2ret(data2); Reur=Reur-mean(Reur); lamd=1; alpb=2.5; betb=3; alpnu=16; betnu=0.8; muk=0; vark=1;

HP=[lamd alpb betb muk vark alpnu betnu]; hasil = archskt_mcmc(Reur,HP); draws = hasil.draws; % ========== Save data ==================================================== dlmwrite('D:\SKRIPSI\skt\HASIL\jpy_skt_draws.csv',draws,'delimiter',',','precis ion','%0.16f')

4.7 Kode Pendukung

Kode truncnormrnd, IACT, momentg, HPD, NSE, dan mprint dapat dilihat dalam

Nugroho (2014).

(27)

49

Lampiran 5. Sertifikat Seminar

(28)

Referensi

Dokumen terkait

Penelitian ini bertujuan untuk mengungkap struktur komponen aktif yang berkhasiat antihiperurikemia mekanisme kerja menghambat xantin oksidase dari komponen

- Menurut Wibowo, dalam bukunya Manajemen Perubahan, Manajemen perubahan adalah suatu proses secara sistematis dalam menerapkan pengetahuan, sarana dan sumber daya yang diperlukan

Put your floppy disk in the drive (be sure you have completed the previous MKDIR task) 2. Go to the MS-DOS prompt and log on to the A: drive. Use the CHDIR command to enter the

Jenis penelitian ini bertujuan untuk mengetahui pengaruh penambahan pektin terhadap sifat organoleptik jam buah naga merah yang meliputi warna, rasa, aroma,

Tulisan ini hendak memberikan legal problem solving terhadap permasalahan penumpukan perkara pidana di Indonesia yang hingga saat ini belum mampu terpecahkan,

Neraca perdagangan Indonesia defisit US$ 1,82 miliar pada Oktober 2018, dipicu impor yang lebih besar dari ekspor.. Kementerian Perindustrian (Kemenperin) menyiapkan dua strategi

Penerapan posisi kerja yang ergonomis akan mengurangi beban kerja dan secara signifikan mampu mengurangi kelelahan atau masalah kesehatan yang berkaitan dengan

• merupakan rumah sakit yang menyelenggarakan pendidikan dan penelitian secara terpadu dalam bidang pendidikan profesi kedokteran, pendidikan kedokteran berkelanjutan, dan