📄 tvp_garch_like.m
字号:
function llik = tvp_garch_like(parm,y,x,start,priorb0,priorv0)
% PURPOSE: log likelihood for tvp_garch model
% -------------------------------------------------------
% USAGE: llike = tvp_garch_like(parm,y,x,start,priorb0,priorv0)
% where: parm = a vector of parmaeters
% parm(1) = sig beta 1
% parm(2) = sig beta 2
% .
% .
% .
% parm(k) = sig beta k
% parm(k+1) = a0
% parm(k+2) = a1
% parm(k+3) = a2
% start = # of observation to start at
% (default: 2*k+1)
% priorb0 = a (k+1)x1 vector with prior for b0
% (default: zeros(k+1,1), a diffuse prior)
% priorv0 = a (k+1)x(k+1) matrix with prior for sigb
% (default: eye(k+1)*1e+5, a diffuse prior)
% ----------------------------------------------------
% RETURNS: -log likelihood function value (a scalar)
% ----------------------------------------------------
% REFERENCES: Kim and Nelson (1999)
% State-Space Models with Regime Switching
% ----------------------------------------------------
% written by:
% James P. LeSage, Dept of Economics
% University of Toledo
% 2801 W. Bancroft St,
% Toledo, OH 43606
% jlesage@spatial-econometrics.com
[n k] = size(x);
% transform parameters
parm = garch_trans(parm);
if nargin == 3
start = 2*k+1; % use initial observations for startup
priorv0 = eye(k+1)*1e+5;
priorb0 = zeros(k+1,1);
elseif nargin == 4
priorv0 = eye(k+1)*1e+5;
priorb0 = zeros(k+1,1);
elseif nargin == 6
% do nothing
else
error('tvp_garch_like: Wrong # of input arguments');
end;
sigb = zeros(k,1);
for i=1:k;
sigb(i,1) = parm(i,1)*parm(i,1);
end;
a0 = parm(k+1,1);
a1 = parm(k+2,1);
a2 = parm(k+3,1);
ivar = a0/(1-a1-a2); % initial variance
r = 0;
f = eye(k+1);
f(k+1,k+1) = 0;
g = eye(k+1);
cll = priorb0;
pll = priorv0; % initial var-cov for reg coef
pll(k+1,k+1) = ivar;
htl = ivar;
loglik = zeros(n,1);
for iter = 1:n;
h = [x(iter,:) 1];
ht = a0 + a1*(cll(k+1,1)*cll(k+1,1) + pll(k+1,k+1)) + a2*htl;
tmp = [sigb
ht];
Q = diag(tmp);
ctl = f*cll;
ptl = f*pll*f' + g*Q*g';
vt = y(iter,1) - h*ctl; % prediction error
ft = h*ptl*h' + r; % variance of forecast error
ctt = ctl + ptl*h'*(1/ft)*vt;
ptt = ptl - ptl*h'*(1/ft)*h*ptl;
lik = (1/sqrt(2*pi*abs(ft)))*exp(-0.5*vt'*(1/ft)*vt);
loglik(iter,1) = -log(lik);
cll = ctt;
pll = ptt;
htl = ht;
end;
llik = sum(loglik(start:n,1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -