forked from burakbayramli/books
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ord_prob.m
92 lines (78 loc) · 2.04 KB
/
ord_prob.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
%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));
%Set the parameters of the generated data
nobs = 500;
L = 3;
beta_0 = .5;
beta_1 = .3;
x = randn(nobs,1);
z = beta_0 + beta_1*x + randn(nobs,1);
big_x = [ones(nobs,1) x];
alpha_2 = 1;
%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);
%intial conditions
alph = .5;
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,1,0) + D2.*truncnorm2(big_x*betas,1,0,alph) + D3.*truncnorm2(big_x*betas,1,alph,999);
%posterior conditional for beta
D_beta = inv( big_x'*big_x );
d_beta = big_x'*zaug;
H_beta = chol(D_beta);
betas = D_beta*d_beta + H_beta'*randn(size(big_x,2),1);
%posterior conditional for alpha
m1 = max([0 max(zaug(points_2))]);
m2 = min(zaug(points_3));
u = rand(1,1);
alph = m1 + (m2-m1)*u;
if i > burn
betas_final(i-burn,:) = betas';
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);
lagcorr(j,1) = tempp(1,2);
end;
xgrid = linspace(1,20,20)';
bar(xgrid,lagcorr,'y');
save ordprob_dat x z big_x D1 D2 D3 y xgrid lagcorr;