#include "MpUtil.h" int N = 1000; // Number of Data Points int K = 3; // Number of Parameters int Burnin = 1000; // Number of Burn in Iterations int Gibbs = 5000; // Number of Gibbs Iterations int Thin = 1; // Thinning Factor long RandomSeed = -23497234; // RandomSeed Vector Y(N); // Dependent Variable Matrix X(N,K); // Independent Variables /* Globar Priol Parameters */ Vector BetaPriorMu; SymmetricMatrix BetaPriorSigmaInv; double LogPosterior(const Vector &Beta) { double SumLog = Zero; for(int n=0; n Beta0 = LoadVector("-1,0.5,-1.5"); /* Generate the Data */ for(int n=0; n= Zero) Y(n) = 1; else Y(n) = 0; } Output("X.dat",X); /* Set the Priors */ BetaPriorMu = Vector(K,Zero); BetaPriorMu.Name = "BetaPriorMu"; SymmetricMatrix BetaPriorSigma(K,Zero); BetaPriorSigma.Name = "BetaPriorSigma"; for(int k=0; k XtX(K,Zero); XtX.Name = "XtX"; for(int k1=0; k1 Temp = BetaPriorSigmaInv + XtX; Temp.Name = "Temp"; SymmetricMatrix SigmaTilde = InverseCholesky(Temp); LowerMatrix LTilde = CholeskyDecompL(SigmaTilde); Vector BetaPriorSigmaInv_BetaPriorMu = BetaPriorSigmaInv * BetaPriorMu; Vector YStarSamp(N); YStarSamp.Name = "YStarSamp"; Vector XtYStar(K); XtYStar.Name = "XtYStar"; Matrix BetaSamp1(Burnin+Gibbs+1,K); BetaSamp1.Name = "BetaSamp"; Vector s(K); s.Name = "s"; /* Initialize Variables */ Set(YStarSamp,Zero); Set(BetaSamp1,Zero); /* Iterate the Gibbs Sampler */ for(int r=1; r<=Burnin+Gibbs; r++) { if(r % 100 == 0) Print("r",r); /* First Draw YStar | Y, X, Beta */ for(int n=0; n MuTilde = SigmaTilde * (BetaPriorSigmaInv_BetaPriorMu + XtYStar); for(int k=0; k Beta1(K,Zero); for(int r=Burnin+1; r<=Burnin+Gibbs; r++) for(int k=0; k BetaVar(K,Zero); for(int r=Burnin+1; r<=Burnin+Gibbs; r++) for(int k1=0; k1 BetaSe1(K); for(int k=0; k BetaSamp2(Burnin+Gibbs+1,K,Zero); BetaSamp2.Name = "BetaSamp2"; Set(BetaSamp2,Zero); Vector x2(K); x2.Name = "x"; Vector y2(K); y2.Name = "y"; /* Iterate the Sampler */ int Accept = 0; double SigmaCurr = 0.01; for(int r=1; r<=Burnin+Gibbs; r++) { if(r % 100 == 0) { Print("r",r); Print("x2",x2); } /* Current Point */ for(int k=0; k Burnin) Accept++; for(int k=0; k Burnin && r % 100 == 0) Print("Curr Accept",(double)Accept / (r - Burnin)); } Print("% Accept",Accept / Gibbs); /* Compute posterior mean for last Gibbs observations */ Vector Beta2(K,Zero); for(int r=Burnin+1; r<=Burnin+Gibbs; r++) for(int k=0; k BetaVar2(K,Zero); for(int r=Burnin+1; r<=Burnin+Gibbs; r++) for(int k1=0; k1 BetaSe2(K); for(int k=0; k BetaSamp3(Burnin+Gibbs+1,K,Zero); BetaSamp3.Name = "BetaSamp2"; Set(BetaSamp3,Zero); Vector x3(K); x3.Name = "x"; Vector y3(K); y3.Name = "y"; /* Iterate the Sampler */ Vector Accept3(K,0); Vector AcceptRate3(K); Vector SigmaCurr3(K,0.01); int kCurr = 0; for(int r=1; r<=Burnin+Gibbs; r++) { if(r % 100 == 0) { Print("r",r); Print("x2",x2); } if(kCurr >= K) kCurr = 0; /* Current Point */ for(int k=0; k Burnin) Accept3(kCurr)++; for(int k=0; k Burnin && r % 100 == 0) { for(int k=0; k Beta3(K,Zero); for(int r=Burnin+1; r<=Burnin+Gibbs; r++) for(int k=0; k BetaVar3(K,Zero); for(int r=Burnin+1; r<=Burnin+Gibbs; r++) for(int k1=0; k1 BetaSe3(K); for(int k=0; k