Changeset 6049f18 in tol
- Timestamp:
- May 14, 2010, 1:14:26 PM (16 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 4f775f9
- Parents:
- 09cf872
- File:
-
- 1 edited
-
tol_pkg/BysVecLinReg/Multivariate.tol (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol_pkg/BysVecLinReg/Multivariate.tol
r09cf872 r6049f18 62 62 //Stacked columns of A (D*Mx1) 63 63 VMatrix _.vec.A = Rand(0,0,0,0); 64 VMatrix _. vec.A.prior.nu= Rand(0,0,0,0);65 VMatrix _. vec.A.prior.S= Rand(0,0,0,0);64 VMatrix _.M = Rand(0,0,0,0); 65 VMatrix _.K = Rand(0,0,0,0); 66 66 //Average of posterior distribution of A for alpha=0: Y*X'*(X*Xt)^-1 (dxm) 67 67 VMatrix _.nu = Rand(0,0,0,0); … … 69 69 VMatrix _.vec.nu = Rand(0,0,0,0); 70 70 //Y*Y' 71 VMatrix _.YYt = Rand(0,0,0,0); 71 VMatrix _.Syy = Rand(0,0,0,0); 72 VMatrix _.Syx = Rand(0,0,0,0); 73 VMatrix _.Sxx = Rand(0,0,0,0); 74 VMatrix _.Sy.x = Rand(0,0,0,0); 75 72 76 //Y*X'*(X*Xt)^-1*X*Y' 73 77 VMatrix _.nuXYt = Rand(0,0,0,0); … … 181 185 1==1, 182 186 { 187 VMatrix _.M := Constant(_.d,_.m,0); 188 VMatrix _.K := Constant(_.m,_.m,0); 183 189 Real change.X(X); 184 190 Real change.Y(Y); … … 187 193 VMatrix _.A := BysVecLinReg::vec2vmatrix(_.vec.A,Constant(_.d,_.m,1)); 188 194 Real change.V(Eye(_.d)); 189 VMatrix _.vec.A.prior.nu := _.vec.nu*0;190 VMatrix _.vec.A.prior.S := _.V*0;191 195 True 192 196 }) 193 197 }; 198 194 199 195 200 //////////////////////////////////////////////////////////////////////////// … … 231 236 { 232 237 VMatrix _.X := Copy(X); 233 VMatrix _.X.Lf:=CholeskiFactor(_.X,"XXt"); 238 VMatrix _.Sxx := MMtSqr(_.X)+_.K; 239 VMatrix _.X.Lf:=CholeskiFactor(_.Sxx,"X"); 234 240 VMatrix _.X.Le := CholeskiSolve(_.X.Lf, 235 241 Convert(_.X.Lf, "Cholmod.R.Sparse"),"P"); … … 248 254 { 249 255 VMatrix _.Y := Copy(Y); 250 VMatrix _.YYt := _.Y*Tra(_.Y); 256 VMatrix _.Syy := _.Y*Tra(_.Y) + _.M*_.K*Tra(_.M); 257 VMatrix _.Syx := _.Y*Tra(_.X) + _.M*_.K; 251 258 VMatrix XYt =_.X*Tra(_.Y); 252 VMatrix _.nu:=Tra(CholeskiSolve(_.X.Lf, XYt,"PtLLtP"));253 VMatrix _. nuXYt := _.nu*XYt;259 VMatrix _.nu:=Tra(CholeskiSolve(_.X.Lf,Tra(_.Syx),"PtLLtP")); 260 VMatrix _.Sy.x := _.Syy - _.nu*Tra(_.Syx); 254 261 VMatrix _.vec.nu:=BysVecLinReg::vmatrix2vec(_.nu); 255 262 True … … 317 324 //////////////////////////////////////////////////////////////////////////// 318 325 { 319 VMatrix _.E := _.Y - _.A * _.X; 320 //VMatrix S2 = MMtSqr(_.E); 321 VMatrix S2 = _.YYt -_.nuXYt; 322 VMatrix W = S2 + _.W.V0*_.W.N0; 326 //VMatrix S2 = MMtSqr(_.E); 327 VMatrix W = _.Sy.x + _.W.V0*_.W.N0; 323 328 Real freDeg = _.N+_.W.N0; 324 329 VMatrix V = Mat2VMat(RandIWishart(freDeg, VMat2Mat(W))); … … 336 341 337 342 //////////////////////////////////////////////////////////////////////////// 338 VMatrix gibbs.draw.vec.A.std(Real numSim) 339 //////////////////////////////////////////////////////////////////////////// 340 { 343 VMatrix gibbs.draw.vec.A.std(Real numSim, VMatrix C01, VMatrix c01) 344 //////////////////////////////////////////////////////////////////////////// 345 { 346 //WriteLn("TRACE gibbs.draw.vec.A.std"); 341 347 If(!_.r.C, 342 348 Gaussian(_.d*_.m,1,0,1), 343 BysVecLinReg::eqConstrainedStdGaussian(_.C01,_.c01)) 344 }; 345 346 //////////////////////////////////////////////////////////////////////////// 347 VMatrix try.draw.vec.A(Real numSim) 348 //////////////////////////////////////////////////////////////////////////// 349 { 349 BysVecLinReg::eqConstrainedStdGaussian(C01,c01)) 350 }; 351 352 //////////////////////////////////////////////////////////////////////////// 353 VMatrix try.draw.vec.A_mu_s(Real numSim, VMatrix C01, VMatrix c01, VMatrix nu, Real s) 354 //////////////////////////////////////////////////////////////////////////// 355 { 356 //WriteLn("TRACE try.draw.vec.A_mu_s"); 350 357 Real _.totalTry := _.totalTry + 1; 351 VMatrix e = gibbs.draw.vec.A.std(numSim );358 VMatrix e = gibbs.draw.vec.A.std(numSim,C01,c01)*s; 352 359 VMatrix e.1 = _.VxIm.Le*e; 353 360 VMatrix e.2 = Tra(Tra(e.1)*_.IdxXLi); 354 (_.vec.nu + e.2)/(1+_.alpha) 361 (nu + e.2)/(1+_.alpha) 362 }; 363 364 //////////////////////////////////////////////////////////////////////////// 365 VMatrix try.draw.vec.A(Real numSim) 366 //////////////////////////////////////////////////////////////////////////// 367 { 368 try.draw.vec.A_mu_s(numSim,_.C01,_.c01,_.vec.nu, 1) 355 369 }; 356 370 … … 411 425 VMatrix _.A := BysVecLinReg::vec2vmatrix(_.vec.A,_.A) 412 426 }); 427 VMatrix _.E := _.Y - _.A * _.X; 413 428 Copy(_.A) 414 429 };
Note: See TracChangeset
for help on using the changeset viewer.
