思路清楚了不就很简单了吗,一般用AR(1)-GARCH(1,1) 拟合正态部分足够了,再用Hermit偏离,所以下面我下面的代码只调控Kz 和Kx 两个关键参数。其中子函数Hermit,你自己动动脑筋,相信能够解决
function [Loglikelihood,BIC,Density,Lnf]=SNP(data0,data,Kz,Kx,param)
%% Illustraion: This code was written to calculate the 'real' density
%% on the base of hermit polynomial. As Gallant and Tauchen(2002) suggest
%% ...
思路清楚了不就很简单了吗,一般用AR(1)-GARCH(1,1) 拟合正态部分足够了,再用Hermit偏离,所以下面我下面的代码只调控Kz 和Kx 两个关键参数。其中子函数Hermit,你自己动动脑筋,相信能够解决
function [Loglikelihood,BIC,Density,Lnf]=SNP(data0,data,Kz,Kx,param)
%% Illustraion: This code was written to calculate the 'real' density
%% on the base of hermit polynomial. As Gallant and Tauchen(2002) suggest
%% we only use AR(1)-GARCH(1,1) for nomal part and control the non-nomality
%% through Kz and Kx!
%% Warning:Copyright belongs to LvLong in School of Economics, HUST!
u0=param(1);
u1=param(2);
b0=param(3);
b1=param(4);
g1=param(5);
param_poly=param(6:end);
Num=length(param_poly);
if(Num~=(Kx+1)*(Kz+1)-1)
error('The length of param-vector is not right');
end
Y=data;
%%%%prepare something%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T=length(data);
Lnf=zeros(T,1);
Density=zeros(T,1);
Mu=zeros(T,1);
R=zeros(T,1);
Z=zeros(T,1);
R0=sqrt(var(data));
Mu0=mean(data);
Z0=(data0-Mu0)/R0;
%%%%%%%%%start the major cycle%%%%
for t=1:T
if(t==1)
Mu(t)=u0+u1*data0;
R(t)=b0+b1*abs(data0-Mu0)+g1*R0;
Z(t)=(Y(t)-Mu(t))/R(t);
hvalue=Hermit(Z(t),Z0,Kz,Kx,param_poly);
else
Mu(t)=u0+u1*Y(t-1);
R(t)=b0+b1*abs(Y(t-1)-Mu(t-1))+g1*R(t-1);
Z(t)=(Y(t)-Mu(t))/R(t);
hvalue=Hermit(Z(t),Z(t-1),Kz,Kx,param_poly);
end
Density(t)=hvalue/R(t);
Lnf(t)=log(Density(t));
end
Loglikelihood=sum(Lnf)/T;
vartotal=length(param);
BIC=-Loglikelihood+0.5*log(T)*vartotal/(T);
不能自己写吗,实现起来不难的,EMM关键弄懂什么是SNP(Semi-nonparametric) density , SNP 关键是写出hermit多项式展开,hermit多项式展开最难的是底部的标准化常数的计算,你就按这个思路来计算SNP,然后其余的就是对AR和GARCH模型定阶,矩条件做模拟大样本的GMM。纯个人体会,希望对你有帮助