PROC (5)=FM_RD(y,x);
@ ======================Declare Local Variable========================== @
local T,N,copy_x,copy_y;
local ini1,ini2,temp_sigma,sigma_1,temp_dif_x1,temp_pre_x1;
local Dif_resi_1,temp_D_resi_1,pre_y,y_plus,x1,dif_x1,pre_x1,temp_x1;
local b1,u1,u1_plus,vb1,tb1,es1,ts1,ess1,tss1;
local Rsquare_1,Adjust_Rsquare_1,lr_var_1,amat_1;
local bias_1,mean_bias_1,epsilon_1,mu_1;
local mu_eps_1,mu_dot_eps_1,delta_1,del_eps_1,del_mu_eps_1,delta_plus;
local adj_b1,adj_cov_1,prob_tb1,prob_tb1_n;
local adj_tb1,prob_adj_tb1,prob_adj_tb1_n;
local uk,ke;
local FM_beta,FM_cov,FM_t,prob_FM_t,prob_FM_t_n;
local i,j,k,k1,num_cross;
@ ============================================================== @
@ Step 1: Read Data in @
copy_x=x;copy_y=y;
dif_x1=x[2:rows(x),.]-trimr(lag1(x),1,0);
num_cross=cols(y);
k1=cols(x)/num_cross;
if (cols(x)%num_cross)/=0;
print "You have inconformable independent variable input";
end;
endif;
T=rows(x);
N=num_cross;
pre_y=vec(y[2:rows(y),.]);
y=vec(y-reshape(meanc(y)',T, N));
i=1;temp_x1=zeros((T*N),1);
do until i > k1;
temp_x1=temp_x1~vec(x[.,(1+(i-1)*N):(i*N)]-
reshape(meanc(x[.,(1+(i-1)*N):(i*N)])',T,N));
i=i+1;
endo;
x1=temp_x1[.,2:cols(temp_x1)];
temp_dif_x1=zeros((N*(T-1)),1);
i=1;
do until i > k1;
temp_dif_x1=temp_dif_x1~vec(dif_x1[.,(1+(i-1)*N):(i*N)]);
i=i+1;
endo;
dif_x1=temp_dif_x1[.,2:cols(temp_dif_x1)];
i=1; temp_pre_x1=zeros((N*(T-1)),1);
do until i > k1;
temp_pre_x1=temp_pre_x1~vec(x[2:rows(x),(1+(i-1)*N):(i*N)]);
i=i+1;
endo;
pre_x1=temp_pre_x1[.,2:cols(temp_pre_x1)];
@ ---------------First Stage OLS Estimator------------------ @
b1=inv(x1'*x1)*(x1'*y); @ OLS estimator @
u1=y-x1*b1; @ OLS residuals @
vb1=inv(x1'*x1)*((u1'*u1)/(N*T-k1));
tb1=b1 ./ diag(sqrt(vb1)); @ T-ratios @
es1=reshape((x1*b1),N,T)';ess1=sumc((T-1)*(stdc(es1) .* stdc(es1)));
ts1=reshape(y,N,T)';tss1=sumc((T-1)*(stdc(ts1) .* stdc(ts1)));
Rsquare_1=ess1/tss1; @ Rsquare @
Adjust_Rsquare_1=1-(((u1'*u1)/(N*T-k1))/(tss1/(N*T)));
temp_D_resi_1=reshape(u1,N,T);
Dif_resi_1=temp_D_resi_1[.,2:T]';
@ --------------- Long Run Correction --------------- @
k=1;
ini1=0;
ini2=0;
do until k > N;
uk=Dif_resi_1[.,k]~dif_x1[(1+(k-1)*(T-1)):(k*(T-1)),.];
ke=kernel(uk,_panel_kernel_lag_hom);
ini1=ini1+ke;
temp_sigma=(uk'uk)/rows(uk);
ini2=ini2+temp_sigma;
k=k+1;
endo;
amat_1=ini1/N;
sigma_1=ini2/N;
lr_var_1=sigma_1+amat_1+amat_1';
epsilon_1=lr_var_1[2:rows(lr_var_1),2:cols(lr_var_1)];
delta_1=sigma_1+amat_1;
del_mu_eps_1=delta_1[1,2:cols(delta_1)];
del_eps_1=delta_1[2:rows(delta_1),2:cols(delta_1)];
mu_1=lr_var_1[1,1];
mu_eps_1=lr_var_1[1,2:cols(lr_var_1)];
mu_dot_eps_1=mu_1- mu_eps_1*inv(epsilon_1)*mu_eps_1';
@ ----------- Start FM OLS Calculation ---------------------- @
@ ================Correction of Y ============================ @
delta_plus=del_mu_eps_1'-del_eps_1*inv(epsilon_1)*mu_eps_1';
y_plus=pre_y-Dif_x1*inv(epsilon_1)*mu_eps_1';
FM_beta=inv(pre_x1'* pre_x1)*(pre_x1'*y_plus-N*(T-1)*delta_plus);
FM_cov=6*inv(epsilon_1)*mu_dot_eps_1;
FM_t=(sqrt(N)*(T-1)*FM_beta) ./ diag(sqrt(FM_cov));
u1=y-x1*FM_beta;
u1_plus=y_plus-pre_x1*FM_beta;
es1=reshape(u1,N,T)';ess1=sumc((T-1)*(stdc(es1) .* stdc(es1)));
ts1=reshape(y,N,T)';tss1=sumc((T-1)*(stdc(ts1) .* stdc(ts1)));
print "ess1" ess1; Rsquare_1=1-ess1/tss1; @ Rsquare @
Adjust_Rsquare_1=1-(((u1'*u1)/(N*T-k1))/(tss1/(N*T)));
@------------------Critical Probability --------------------@
prob_FM_t=cdftc(abs(FM_t),(N*(T-1)-k1));
prob_FM_t_n=cdfnc(abs(FM_t));
print "The Fully-Modified Estimators";
i=1;
do until i > rows(FM_beta);
format/rd 1,0;
print "The FM_beta" i "is: ";;
format/rd 7,4;
print FM_beta;
format/rd 1,0;
print "The t-ratio" i "is: ";;
format/rd 7,4;
print FM_t "probabiltiy(t)= " prob_FM_t;;
print "probability(N)=" prob_FM_t_n;
i=i+1;
endo;
print "R square is: " Rsquare_1;
print "Adjusted Rsquare is: " adjust_Rsquare_1;
/* =====
print "The conventional Covariance Matrix: " sigma_1;
print "The autocorrelation Matrix is: " amat_1;
print "The Long-Run Covariance Matrix is: " lr_var_1;
print "The Inverse of Long-Run Covariance is: " inv(lr_var_1);
print ;
print "The true Covariance of FM_beta is: " FM_cov;
======= */
retp(u1,u1_plus,mu_dot_eps_1,N,k1);
endp; /* Program Ends */
fmols 的R2为负,我查了一下ess1 1.0265
又会看程序的吗?能不能帮我看一下fmols的这个程序,哪里出错了。