全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
3707 5
2012-08-21
我参考了网上曹老师的程序后,自己在细节的地方修改了一下,但是不知道哪里出现了错误,一直提示错误,希望懂的同学和老师可以帮帮忙,先谢谢大家了!
function [paraest,t_sta,V,it,Chi_sta,Pvalue]=gmmestimation

(moment,para0,Y,X,Z,number,K)

nlag=round(size(Y,1)^(1/3));

W(:,:,1)=eye(K);

[para(:,1),fv(:,1)]=fminsearch(moment,para(:,1),[],1,Y,X,Z,W(:,:,1));

% update weight matrix and find optimal solution

for i=2:number

mom=feval_r(moment,para(:,i-1),2,Y,X,Z,W(:,:,i-1));

W(:,:,i)=gmmweightmatrix(mom,nlag);

[para(:,i),fv(:,i)]=fminsearch(moment,para(:,i-1),[],1,Y,X,Z,W(:,:,i));

if abs(fv(:,i)-fv(:,i-1))/abs(fv(:,i-1))<1e-4|fv(i)<=1e-10

  break

end

end

it=i;

if it==number

    error('number of iteration exceeds defined maximum number')

else

    paraest=para(:,it);% optimal parameter

    f0=feval_r(moment,paraest,3,Y,X,Z,W(:,:,it));% optimal function value

% find covariance matrix of estimated parameter vector, using

numerical method

    for j=1:length(para0)

        a=zeros(length(para0),1);

        eps=max(paraest(j)*1e-6,1e-5);

        a(j)=eps;

        M(:,j)=(feval_r(moment,paraest+a,3,Y,X,Z,W(:,:,it))-f0)/eps;

    end

end

V=pinv(M'*W(:,:,it)*M)/size(Y,1);

stderror=sqrt(diag(V));

t_sta=paraest./(stderror);

Chi_sta=size(Y,1)*fv(it);

Pvalue=1-chi2cdf(Chi_sta,K-length(para0));


%find the weight matrix using Newey and West method

function W=gmmweightmatrix(mom,nlag)

q=size(mom,2);T=size(mom,1);

a2=zeros(q,q);a3=zeros(q,q);

for j=1:nlag

    a1=zeros(q,q);

    for i=1:(T-j)

       a1=mom(i+j,:)'*mom(i,:)+a1;

    end

    S(:,:,j)=1/T*a1;

    a2=(1-j/(nlag+1))*S(:,:,j)+a2;

    a3=(1-j/(nlag+1))*S(:,:,j)'+a3;

end

b1=zeros(q,q);

for i=1:T

    b1=mom(i,:)'*mom(i,:)+b1;

end

if nlag==0

    newS=b1*1/T;

else

    newS=a2+a3+b1*1/T;

end

W=pinv(newS);


%%%%%%%%%%%%%%%%%%%%%
function f=cklstest01(para,num,Y,X,Z,W)

[T,q]=size(Y);

alpha=para(1);beta=para(2);sigsq=para(3);

eta=[Y-(alpha+beta*X)/12,(Y-(alpha+beta*X)/12).^2-sigsq.^2/12];

for i=1:T

    m_t(i,:)=kron(eta(i,:),Z(i,:));

end

m=mean(m_t)';

obj=m'*W*m;

if num==1

     f=obj;

elseif num==2
     f=m_t;

elseif num==3

     f=m;

end
%%%%%%%%%%%%%
clear
data=xlsread('gmm.xlsx');
Y=data(:,1);
X=data(:,2);
para0=[0.05;-0.6;0.5];number=20;moment='cklstest01';K=3;
Z=[ones(length(Y),1),X];
[beta,stderror,V,it,Chi_sta,Pvalue]=gmmestimation

(moment,para0,Y,X,Z,number,K);
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-8-21 16:35:51
运行后 错误提示如下
Error in ==> gmmestimation at 7
[para(:,1),fv(:,1)]=fminsearch(moment,para(:,1),[],1,Y,X,Z,W(:,:,1));

Error in ==> gmm at 7
[beta,stderror,V,it,Chi_sta,Pvalue]=gmmestimation(moment,para0,Y,X,Z,number,K);
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-8-21 16:43:45
错误提示如下??? Undefined function or variable "para".

Error in ==> gmmestimation at 7
[para(:,1),fv(:,1)]=fminsearch(moment,para(:,1),[],1,Y,X,Z,W(:,:,1));

Error in ==> gmm at 7
[beta,stderror,V,it,Chi_sta,Pvalue]=gmmestimation(moment,para0,Y,X,Z,number,K);  那参数该怎样定义呢,哪位朋友可以帮忙看看我的程序该怎样修改吗》
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-8-27 15:03:21
已经解决了,谢谢自己
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-13 23:52:56
您好,请问用GMM估计Vasicek模型的原理方面的资料,能不能发给我一些。我找不到很合适的资料,基础比较差。谢谢啊。我也想用GMM估计Vasicek模型
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-4-21 23:09:47
你好,请问您是怎么解决的,希望你能解答下,急用 谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群