首页 > 编程知识 正文

广义矩估计matlab例子,广义矩估计spss

时间:2023-05-05 21:37:57 阅读:248465 作者:585

function [paraest,t_sta,V,it,qsdqjsta,Pvalue]=my_gmmestimation(moment,para0,Y,X,Z,number,K)

%This program is for GMM estimation

%input:

%moment: moment conditions function defined by users

%para0:initial value for estimated parameters

%Y,X:data used to estimate parameters

%Z: data for instrument variables

%number: maximum convergence number when choosing optimal weighting matrix

%K:number of moment conditions

%output:

%paraest:parameters estimated

%t_sta: T statistics for each estimated parameter

%V:covariance matrix for estimated parameters

%it: number of iteration

%qsdqjsta and Pvalue: overidentifying test, null hypothesis is moment

%conditions are feasible

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%example1

%to estimate the following model:Y=alpha+beta*X+eta

%moment conditions:yldsg(eta);E(X*eta)]=0

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%clear

%kk=1000;

%X=randn(kk,1);Y=1+2*X+randn(kk,1)/3;Z=[ones(kk,1),X];number=100;

%para0=[0;1];

%[paraest,t_sta,V]=gmmestimation('linearmodel01',para0,Y,X,Z,number,2)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%moment conditions

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

%[T,q]=size(Y);

%alpha=para(1);beta=para(2);

%eta=[Y-(alpha+beta*X)];

%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

%%%%%%%%%%%%%%%%%%%%%%%%%%%

%example2

%to estimate the following model:

%dr_t =(alpha+beta*r_t)*dt+sigma*r_t^(gamma)*dW_t,

%where W_t is a Brownian motion

%r_t is interest rate at time t, and dr_t=r_t-r_t-1=y_t,

%x_t=r_t-1,dW_t=sqrt(dt)*eta_t

%eta_t is a standard normal random variable,define y=[y_t],x=[x_t], x,y are colummn vectors

%rewrite the model: y=(alpha+beta*x)*dt+sigma*x^(gamma)*dW

%instrument variables:z=[1,x]

%moment conditions;

%kron(yldsg(y-(alpha+beta*x)*dt);

%E(y-((alpha+beta*x)*dt)^2-sigma^2*x^(2*gamma)*dt)],z)=0

%kron(A,B) means Kroneker product of A and B

%%%%%%%%%%%%%%%moment function

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

% [T,q]=size(Y);

% alpha=para(1);beta=para(2);sigsq=para(3);gamma=para(4);

% eta=[Y-(alpha+beta*X)/12,(Y-(alpha+beta*X)/12).^2-sigsq*X.^(2*gamma)/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

% x(1)=0.01;alpha=0.4;beta=-0.1;sigmasq=0.1;gamma=0.6;dt=1/12;

% t=1:dt:50;

% for i=1:length(t)

%x(i+1)=x(i)+(alpha+beta*x(i))*dt+sqrt(sigmasq)*x(i)^(gamma)*randn(1)*sqrt(dt);

% end

% Y=diff(x)';

% X=x(1:end-1)';

% Z=[ones(length(Y),1),X];

% para0=[0.05;-0.6;0.5;1.6];number=20;moment='cklstest01';K=4;

%[paraest,t_sta,V,it,qsdqjsta,Pvalue]=gmmestimation(moment,para0,Y,X,Z,number,K)

%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%main code for 有魅力的麦片/p>

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

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

% 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);

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);

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

Pvalue=1-chi2cdf(qsdqjsta,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

for i=1:T

end

if nlag==0

newS=b1*1/T;

else

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

end

W=pinv(newS);

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。