- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 308 个
- 通用积分
- 15.2403
- 学术水平
- 0 点
- 热心指数
- 0 点
- 信用等级
- 0 点
- 经验
- 103 点
- 帖子
- 32
- 精华
- 0
- 在线时间
- 70 小时
- 注册时间
- 2013-6-5
- 最后登录
- 2017-11-6
|
板凳
连身
发表于 2013-6-28 10:31:27
这个是我用MATLAB写的程序,问题是(1)程序会无限循环迭代,没有结果(2)是即使估计出参数,怎么做统计检验?如果大神能够给出WINRATS的代码,那就感激不尽了! - function Ln_Rt=Likehood_Fun(Parameter)
- %======载入数据=============
- data=load('oil_return.mat');
- data=data.oil_return;
- %=======设置=============================
- Length=size(data,1);%输入数据长度
- W_t=random('Normal',0,1,Length,1); % Equation (9)
- Z_tk=normrnd(Parameter(2),sqrt(Parameter(3)),Length,1) ;% Equation(4)
- %生成跳跃幅度的 Zt 的 正态分布 ( phi , delta^2)分别为Para(2)和Para(3)
- %==========初始化参数====================
- Nt=25; %设置模型中无限求和的个数,假设25,甚至是10 均可
- Lamda=zeros(Length,1); % 初始化每次的“跳跃”强度;Lamda=E[n(t)|R(t-1)]
- Sigma_square=zeros(Length,1); %初始化每次的“条件波动率”:Equation(10)
- N_post=zeros(Length,1); %初始化每次的“发生跳跃的次数的事后评价”N(t) Equation (3)
- C_ta=zeros(Length,1); %初始化每次的“预期偏差”:Equation(3)
- % ksi (t-1)=N(t-1)-Lamda(t-1)
- Lamda(1)=Parameter(4); %初始化 Lamda(1) Lamda(0)即为 Para(4)
- Sigma_square(1)=var(data(:,1)); %初始化Sigma_square(1)
- N_post(1)=Lamda(1); % Page 58
- C_ta(1)=0; %Page 58
- %============求取各参数主循环===============
- Vector_Nt=[0:Nt]; % 应为跳跃次数,初始化设置时,Nt=10;
- Poiss=zeros(Length,Nt+1); %初始化不同Lamda时,泊松概率密度
- Condition_Zi_pdf=zeros(Length,Nt+1);%初始化不同Lamda时,泊松概率密度
- f_rt_Rt_1=zeros(Length,1); %初始化不同Lamda时,泊松概率密度
- Ln_f_rt_Rt_1=zeros(Length,1); %初始化不同Lamda时,泊松概率密度
- Lvzi=zeros(Length,Nt+1); %初始化不同Lamda时,泊松概率密度
- Deta_J_t=zeros(Length,1); %初始化不同Lamda时,泊松概率密度
- Deta_D_t=zeros(Length,1); %初始化不同Lamda时,泊松概率密度
- Deta_t=zeros(Length,1); %初始化不同Lamda时,泊松概率密度
- %f_T_1=zeros(Length,1); %初始化不同Lamda时,泊松概率密度
- for ii=1:Length-1
-
- %===========先计算Lamda(ii+1)===========
-
- Lamda(ii+1)=Parameter(4)+Parameter(5)*Lamda(ii)+Parameter(6)*C_ta(ii);
- %...+Parameter(6)*Sigma_square(ii); % Page 56
- % Lamda(t)=Lamda(0)+Rho*Lamda(t-1)+Eta*Ksi(t-1)+Gamma*Sigma(t-1)^2
-
- %===========再计算Sigma_square(ii+1)=======
-
- Deta_J_t(ii)=sum(Z_tk(1:Nt)) - Parameter(2)*Lamda(ii);%Equation (8)
- %Epsilon_ J (t)=sum( Z_tk ) - Phi*Lamda(t)
-
- Deta_D_t(ii)=sqrt(Sigma_square(ii))*W_t(ii); % Equation (9)
- %Epsilon_D(t)=Sigma*W_(t) 条件异方差 GARCH
-
- Deta_t(ii)=Deta_D_t(ii)+Deta_J_t(ii); % Equation (11)
- %Epsilon (t-1) = Epsilon_ J (t-1) + Epsilon_D (t-1)
- %模型扰动项之和,包含正常的残差和跳跃的残差
-
- % f_T_1(ii)=fun( Parameter(10),Parameter(11), Parameter(12), Parameter(13),...
- % Parameter(14) , N_post, Deta_t(ii) ); %Equation (12)
- %该函数为GARCH 模型中,异方差的回归函数,由于本模型暂时只需要GARCH(1,1)
- %所以该函数在估计时需要修改
-
- % Sigma_square(ii+1)=Parameter(8)+f_T_1(ii)*(Deta_t(ii)-Parameter(14)^2+...
- % Parameter(9)*Sigma_square(ii) ); % Equation (10)
-
- Sigma_square(ii+1)=Parameter(9)+Parameter(10)*(Deta_D_t(ii))^2+...
- Parameter(11)*Sigma_square(ii);% GARCH(1,1)模型
-
- %==========再求N_post(ii+1)=================
- Poiss(ii+1,:)=poisspdf(Vector_Nt,Lamda(ii+1));
- %得到泊松分布pdf, Equation(2)
- % P(Nt=j | R(t-1) )=exp(Lamda(t))*Lamda(t)^j / j ! 生成泊松分布
-
- mu=Parameter(1)+Parameter(7)*data(ii,1)+Parameter(8)*Sigma_square(ii)-Lamda(ii+1)*Parameter(2)+Vector_Nt*Parameter(2);
- % Equation (17) 的 mu
- % Mu =mu- Phi * Lamda(t)+ j * Phi ,其中 Vector_Nt = j , j=0,1,2,3,4...10
-
- sigma=sqrt(Sigma_square(ii+1)+Vector_Nt*Parameter(3));
- %Equation(17) 的 sigma
- %极大似然函数正态分布部分的方差
- % sigma=Sigma^2+j *delta^2 函数 f ( r(t) | Nt=j ,R(t-1)) 的方差
-
- Condition_Zi_pdf(ii+1,:)=normpdf(data(ii+1,:),mu,sigma);
- %Equation (17)
- %该函数 f ( r(t) | Nt=j ,R(t-1)) 服从正态分布 (Mu , sigma)
-
- f_rt_Rt_1(ii+1)=Condition_Zi_pdf(ii+1,:)*Poiss(ii+1,:)'; % Equation (16)
- % f ( rt | R(t-1) )= sum ( f ( r(t) | Nt=j ,R(t-1)) * P(Nt=j | R(t-1) ))
- % 正态分布乘以泊松分布
-
-
- Ln_f_rt_Rt_1(ii+1)=log(f_rt_Rt_1(ii+1)) ;
- %对上式求对数,并且相加, 即可得到似然函数
-
- %Ln_f_rt_Rt-1=sum(Ln_f_rt_Rt_1(ii+1));
-
- Lvzi(ii+1,:)=(Condition_Zi_pdf(ii+1,:).*Poiss(ii+1,:))/f_rt_Rt_1(ii+1);
- % 注意该式子是数组相乘,与上式矩阵相称有所不同
-
- N_post(ii+1)=Lvzi(ii+1,:)*Vector_Nt'; % Equation (3)
- %===========再求C_ta(ii+1)==================
- C_ta(ii+1)=N_post(ii+1)-Lamda(ii+1); %Equation (3)
- % Ksi (t-1)= Nt (t-1)- Lamda(t-1)
- % Nt (t-1)= E( Nt(t-1) | R(t-1) )=sum ( j* P(Nt(t-1)) | R(t-1) )
- % 该式即为N_post
-
- %keyboard
-
- end
- Ln_Rt=sum(Ln_f_rt_Rt_1)
复制代码
|
|