%program which does empirical illustration for Exercise 2 of chapter 13 %Heteroskedasticity of known form %Gibbs sampling for independent Normal-Gamma prior for beta and h %load in the data set. Here use house price data from hprice.txt %Note: this calls the script ch13q2w.m %Note: this program gives you a choice of specifying the M-H variance or %reading in a posterior variance for a previous run load hprice.txt; n=size(hprice,1); y=hprice(:,1); x=hprice(:,2:5); x=[ones(n,1) x]; k=5; %Specify explanatory variables for heteroskedasticity z=x(:,2:k); p=4; %Hyperparameters for independent Normal-Gamma prior v0=5; b0=0*ones(k,1); b0(2,1)=10; b0(3,1)=5000; b0(4,1)=10000; b0(5,1)=10000; s02=1/4.0e-8; capv0=(10000^2)*eye(k); capv0(2,2)=25; capv0(3,3)=2500^2; capv0(4,4)=5000^2; capv0(5,5)=5000^2; capv0inv=inv(capv0); %Ordinary least squares quantities bols = inv(x'*x)*x'*y; s2 = (y-x*bols)'*(y-x*bols)/(n-k); v=n-k; %Calculate a few quantities outside the loop for later use v1=v0+n; v0s02=v0*s02; %Now start Metropolis-within-Gibbs loop %candidate generating density is Normal with mean = oldraw %and variance matrix vscale %experiment with different values for c and dof load postvar.out; %postvar=eye(p); c=.000001; c=.1; vscale= c*postvar; %store all draws in the following matrices %initialize them here b_=[]; h_=[]; a_=[]; %Specify the number of replications %number of burnin replications s0=5000; %number of retained replications s1=25000; s=s0+s1; pswitch=0; %choose a starting value for h and pdraw %pdraw is the matrix used for transformation hdraw=1/s2; adraw=zeros(p,1); pcan=zeros(n,n); pdraw=zeros(n,n); for i = 1:s i pdiag=(ones(n,1)+z*adraw).^2; for ii = 1:n pdraw(ii,ii)=1/sqrt(pdiag(ii,1)); end ystar=pdraw*y; xstar=pdraw*x; xsquare=xstar'*xstar; %draw from beta conditional on h capv1inv = capv0inv+ hdraw*xsquare; capv1=inv(capv1inv); b1 = capv1*(capv0inv*b0 + hdraw*xstar'*ystar); bdraw=b1 + norm_rnd(capv1); %draw from h conditional on beta s12 = ((ystar-xstar*bdraw)'*(ystar-xstar*bdraw)+v0s02)/v1; hdraw=gamm_rnd(1,1,.5*v1,.5*v1*s12); %Random walk chain M-H algorithm for alpha acan=adraw + norm_rnd(vscale); %Now get acceptance prob for candidate pdiag=(ones(n,1)+z*acan).^2; for ii = 1:n pcan(ii,ii)=1/sqrt(pdiag(ii,1)); end ycan=pcan*y; xcan=pcan*x; %log of conditional posterior for alpha evaluated at acan lpostcan =ch13q2w(pdiag,bdraw,hdraw,ycan,xcan,n); pdiag=(ones(n,1)+z*adraw).^2; for ii = 1:n pdraw(ii,ii)=1/sqrt(pdiag(ii,1)); end ystar=pdraw*y; xstar=pdraw*x; %log of conditional posterior for alpha evaluated at adraw lpostdraw =ch13q2w(pdiag,bdraw,hdraw,ystar,xstar,n); %log of acceptance probability accprob = exp(lpostcan-lpostdraw); % lpostcan % lpostdraw %accept candidate draw with log prob = laccprob, else keep old draw if rands0 %after discarding burnin, store all draws b_ = [b_ bdraw]; h_ = [h_ hdraw]; a_ = [a_ adraw]; end end alldraws = [b_' h_' a_']; result = momentg(alldraws); means=[result.pmean]'; stdevs=[result.pstd]'; nse=[result.nse1]'; %Print out whatever you want 'Hyperparameters for independent Normal-Gamma prior' b0 capv0 v0 s02 'Posterior results based on Informative Prior' 'number of burnin replications' s0 'number of included replications' s1 'proportion of switches' pswitch/s 'posterior mean, standard deviation and nse ' 'beta followed by h followed by alpha' [means stdevs nse] '95% HPDIs' 'beta followed by h followed by alpha' hpdis=zeros(k+p+1,2); for ii=1:k+p+1 hpdis(ii,1:2) = hpdi(alldraws(:,ii),.95); end hpdis avar1=(a_*a_')./s1 - means(k+2:k+p+1,1)*means(k+2:k+p+1,1)'; save postvar.out avar1 -ASCII;