%This m-file estimates an ordered probit %model using generated data, and the %algorithm of Albert and Chib (1993). clear; clc; randn('seed',sum(100*clock)); rand('seed',sum(100*clock)); load ordprob_dat; %Set the parameters of the generated data %nobs = 750; %L = 3; %beta_0 = 0; %beta_1 = .3; %x = randn(nobs,1); %z = beta_0 + beta_1*x + randn(nobs,1); %big_x = [ones(nobs,1) x]; %alpha_2 = .5; %create the observed y variable based on the %latent data %y = zeros(nobs,1); %D1 = y; %D2 = y; %D3 = y; %for i = 1:nobs; % if z(i,1)<0 % y(i,1) = 1; % D1(i,1) = 1; % elseif z(i,1) > 0 & z(i,1) < alpha_2 % y(i,1)=2; % D2(i,1)=1; % else % y(i,1) = 3; % D3(i,1)=1; % end; %end; points_2 = find(D2==1); points_3 = find(D3==1); nobs = length(y); %intial conditions delt = 1; betas = [0 0]'; iter = 2500; burn = 500; betas_final = zeros(iter-burn,size(big_x,2)); alph_final = zeros(iter-burn,1); for i = 1:iter %posterior conditional for z zaug = D1.*truncnorm(big_x*betas,delt,0) + D2.*truncnorm2(big_x*betas,delt,0,1) + D3.*truncnorm2(big_x*betas,delt,1,999); %posterior conditional for beta D_beta = inv( big_x'*big_x/ (delt)); d_beta = big_x'*zaug/delt; H_beta = chol(D_beta); betas = D_beta*d_beta + H_beta'*randn(size(big_x,2),1); %posterior conditional for delta delt = invgamrnd( ((nobs + size(big_x,2))/2), inv( .5*(zaug - big_x*betas)'*(zaug - big_x*betas)),1,1); %delt = (1/alpha_2) alph = 1/sqrt(delt); betas_use = betas*(alph); if i > burn betas_final(i-burn,:) = betas_use'; alph_final(i-burn,1) = alph; end; end; disp('Betas results') mean(betas_final) std(betas_final) disp('Cutpoint results') mean(alph_final) std(alph_final) %Now, calculate the lagged autocorrelations up to lag order 20 m = length(alph_final); for j = 1:20; alpha1 = alph_final(1:m-j,1); alpha2 = alph_final(j+1:m,1); tempp = corrcoef(alpha1,alpha2); lagcorr2(j,1) = tempp(1,2); end; xgrid = linspace(1,20,20)'; bar(xgrid,lagcorr2,'y'); xlabel('Lag'); ylabel('Correlation');