⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hbmreg3.gss

📁 gauss 离散型计量估计源代码,直接下载下来就可以使用
💻 GSS
📖 第 1 页 / 共 2 页
字号:

		@ extract xi @
		xi	= xdata[.,bot:top];
		resid[.,j]	= ydata[.,j] - xi*(beta[j,.]');
		bot = top + 1; top = top + rankx;
	endfor;

	/*
	***************************************************************
	* Generate sigma
	* 
	* sn = s0 + sum_{i=1}^{nsub} (Y_i - X*beta_i)'(Y_i - X*beta_i)
	****************************************************************
	*/
	sgni	= sg0i + resid'resid;
	sgn		= invpd(sgni);

	{sigmai, sigma} 	= wishart(npop,sfn,sgn);

retp(beta,sigma,sigmai);
endp;


/*
****************************************************************
* GETMULREG
*	Generate multivariate regression parameters.
*		Yd		= Xd*parmat + epsilon
*	
*	INPUT
*		yd		= dependent variables
*		xd		= independet variables
*		xdtxd		= xd'xd
*		
*		parmat	= current value of coefficient matrix
*		var		= current value of covariance matrix
*		vari		= its inverse
*		v0i		= prior precisions for bmat
*		v0iu0		= prior precision*prior mean for bmat
*		f0n		= posterior df for sigma
*		g0i		= prior scaling matrix inverse for sigma

*		
*	OUTPUT
*		parmat	= updated rankx x mvar coefficient matrix
*		var		= updated variance
*		vari		= updated inverse of sigma
*
*	Calling Statement:
{parmat, var, vari} = getmulreg(yd,xd,xdtxd,parmat,var,vari,v0i,v0iu0,f0n,g0i);
****************************************************************
*/
PROC (3) = getmulreg(yd,xd,xdtxd,parmat,var,vari,v0i,v0iu0,f0n,g0i);
local vb12, ubn, par, pdim, resid, gni, gn, rp, cp;

	rp		= rows(parmat);
	cp		= cols(parmat);
	pdim	= rp*cp;

	/*
	***********************************************************
	* Generate parmat from N_{rp x cp}(M,v)
	* par = vecr(parmat)
	* par is N(u,V) whee u = vec(M');
	*	V = (Xd'Xd.*.Var^{-1} + V_0^{-1})^{-1}
	*	u = V*( (Xd'.*.Var^{-1})*vec(Yd') + V_0^{-1}u_0 )
	*************************************************************
	*/
 
	vb12	= chol(xdtxd.*.vari + v0i);
	ubn		= ( (xd').*.vari )*vecr(yd) + v0iu0;
	par		= cholsol(ubn + vb12'rndn(pdim,1), vb12);
	parmat	= reshape(par,rp,cp);

	/*
	*********************************************************
	* Generate Var
	* 	Var^{-1} is Wishart df = f0n, scale matrix = gn
	*********************************************************
	*/
	resid 			= yd - xd*parmat;
	gni				= g0i + resid'resid;
	gn  			= invpd(gni);
	{vari, var} 	= wishart(cp,f0n,gn);

retp(parmat,var,vari);
endp;




/*
*****************************************************************************************************
*  OUTPUTANAL
*	Does analysis of output and save some results 
****************************************************************************************************
*/
PROC (0) = outputanal;
local  
bout, sout, ebeta, sbeta, cb,  fmtn1, fmtn2, fmts1, fmts2,  a, b,
betat, bstart, sigmat, omegat, lambdat, i0, i, j0, j, ic ;

if flagtrue == 1;		@ Did a simulation @
	load betat = betat;
	load sigmat = sigmat;
	load omegat = omegat;
	load lambdat = lambdat;
endif;

@ Define formats for fancy printing @
@ Used to print a matrix of alpha & numeric variables @

format 10,5;							@ Default pring format						@
let fmtn1[1,3]	= "*.*lf" 10 5;			@ Format for printing numeric variable 		@
let fmtn2[1,3]	= "*.*lf" 10  0;		@ Format for numeric variable, no decimal	@

let fmts1[1,3]	= "-*.*s" 10 9;			@ Format for alpha, left justify		 	@
let fmts2[1,3]  = "*.*s" 10 9;			@ Format for alpha, right justify		   	@
output file = ^outfile reset;			@ outfile is the file handle for the output file @
			@ Route printed output to the defined by outfile 	@
print "Results from HBMReg3.GSS";
print "Hierarchical Bayesian Multivariate Regression Model using MCMC.";
print "Different design matrices for each population, but same number of obserations";
print "Y_j = X_j*beta_j + epsilon_j for j = 1, ..., m";
print "Within population, epsilon_j are independent";
print "Between population error covarariance is Sigma";
print;
print "B = Z*Thete + Delta";
print;
print "Ouput file: " getpath(outfile);		@ File assigned to file handle outfile @
datestr(date);								@ Print the current data				@
print;
print;
print "-----------------------------------------------------------------------------------";
print;
print "MCMC Analysis";
print;
print "Total number of MCMC iterations           	   = " nmcmc;
print "Number of iterations used in the analysis 	   = " smcmc;
print "Number in transition period               	   = " nblow;
print "Number of iterations between saved iterations = " skip-1;
print;
print "Number of populations	                 = " npop;
print "Mean # of observations per population  = " nobs;
print;
print;
print "Variables in first level equation: Y_j = X_j*beta_j + epsilon_j";
print;
print "       Summary Statistics for X and Y";
call sumstats(xynames,xydata,fmts1,fmts2,fmtn1);
print;
print "Variables in second level equation: beta_i = Theta*z_i + delta_i";
print;
print "      Summary Statistics for Z";
print sumstats(znames,zdata,fmts1,fmts2,fmtn1);
print;
print "-----------------------------------------------------------------------------------";
print;
print "Statistics of Fit Measures for each Y";
sout = {"Variable" "Mult-R" "R-Square" "RMSE"};
print outitle(sout,fmts1,fmts2);
bout	= ynames~multr~rsquare~rmse;
print outmat(bout,fmts1,fmtn1);
print;
print;
print "-----------------------------------------------------------------------------------";
print "Estimation of the error covariance Sigma";
sout = "Variable"~(ynames');
if flagtrue == 1;
	print "True Sigma";
	call outitle(sout,fmts1,fmts2); 
	bout	= ynames~sigmat;
	call outmat(bout,fmts1,fmtn1);
	print;
endif; 

print "Posterior Mean of Sigma ";
call outitle(sout,fmts1,fmts2);
bout = ynames~sigmam;
call outmat(bout,fmts1,fmtn1);
print "Posterior STD  of Sigma";
call outitle(sout,fmts1,fmts2);
bout = ynames~sigmas;
call outmat(bout,fmts1,fmtn1);
print;

print "-----------------------------------------------------------------------------------";
print;
print "Statistics for Individual-Level Regression Coefficients";

if flagtrue == 1;
	ebeta	= vecr(betam);
	sbeta	= vecr(betas);
	bstart	= vecr(betat);
	sout = {"Variable" "True" "P.Mean" "P.STD"};
	call outitle(sout,fmts1,fmts2);
	bout = xnames~bstart~ebeta~sbeta;
	call outmat(bout,fmts1,fmtn1);
	print;
else;
	ebeta	= vecr(betam);
	sbeta	= vecr(betas);
	sout = {"Variable" "P.Mean" "P.STD"};
	call outitle(sout,fmts1,fmts2);
	bout = xnames~ebeta~sbeta;
	call outmat(bout,fmts1,fmtn1);
	print;

endif;


print;
print "-----------------------------------------------------------------------------------";

print;
print "HB Estimates of Theta";
sout	= "  "~(bnames');
if flagtrue == 1;
	print "True Theta";
	call outitle(sout,fmts1,fmts2);
	bout = znames~omegat;
	call outmat(bout,fmts1,fmtn1);
	print;
endif;
print "Posterior Mean of Theta";
print outitle(sout,fmts1,fmts2);
bout = znames~omegam;
call outmat(bout,fmts1,fmtn1);
print;
print "Posterior STD of Theta";
call outitle(sout,fmts1,fmts2);
bout	= znames~omegas;
call outmat(bout,fmts1,fmtn1);
print;
print "Posterior Mean/Posterior STD";
call outitle(sout,fmts1,fmts2);
bout	= znames~(omegam./omegas);
call outmat(bout,fmts1,fmtn1);
print;
print;
print "-----------------------------------------------------------------------------------";
print;
sout = "  "~(bnames');
print "HB Estimate of Lambda";
if flagtrue == 1;
	print "True Lambda";
	call outitle(sout,fmts1,fmts2);
	bout = bnames~lambdat;
	call outmat(bout,fmts1,fmtn1);
	print;
endif;
print "Posterior Mean of Lambda";
call outitle(sout,fmts1,fmts2);
bout = bnames~lambdam;
call outmat(bout,fmts1,fmtn1);
print;
print "Posterior STD of Lambda";
call outitle(sout,fmts1,fmts2);
bout = bnames~lambdas;
call outmat(bout,fmts1,fmtn1);
print;
print "==============================================================================";

output off;
closeall;
endp;




/*
*****************************************************************************************
* OUTITLE
*	Prints header for columns of numbers.
*	INPUT
*		a 	= character row vector of column names
*		fmts1	= format for first column
*		fmts2	= format for second column
*	OUTPUT
*		None
******************************************************************************************
*/
PROC (0) = outitle(a,fmt1,fmt2);
local mask, fmt, flag, ncols;
ncols	= cols(a);
mask	= zeros(1,ncols);
fmt		= fmt1|(ones(ncols-1,1).*.fmt2);
flag	= printfm(a,mask,fmt);
print;
endp;
/*
***************************************************************************************
* OUTMAT
*	Outputs a matrix:
*	(Character Vector)~(Numeric matrix);
*	The entries in the numeric matrix have the same format
*	INPUT
*		bout		= matrix to be printed
*		fmts		= format for string
*		fmtn		= format for numeric matrix
*	OUTPUT
*		None
******************************************************************************************
*/
PROC (0) = outmat(bout,fmts,fmtn);
local fmt,mask,flag,ncols, nrows;
ncols		= cols(bout);
nrows		= rows(bout);
fmt			= fmts|(ones(ncols-1,1).*.fmtn);
mask		= zeros(nrows,1)~ones(nrows,ncols-1);
flag		= printfm(bout,mask,fmt);
print;
endp;

/*
*****************************************************************************************
* SUMSTATS
*	Prints summary statistics for a data matrix
*	INPUT
*		names		= charater vector of names
*		data		= data matrix
*		fmts1		= format for string
*		fmts2		= format for string
*		fmtn		= format for numbers
*	OUTPUT
*		None
********************************************************************************************
*/
PROC (0) = sumstats(names,data,fmts1,fmts2,fmtn);
local a, bout;
a	= {"Variable" "Mean" "STD" "MIN" "MAX"};
call outitle(a,fmts1,fmts2);
bout	= names~meanc(data)~stdc(data)~minc(data)~maxc(data);
call outmat(bout,fmts1,fmtn);
endp;





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -