Changeset 6049f18 in tol


Ignore:
Timestamp:
May 14, 2010, 1:14:26 PM (16 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
4f775f9
Parents:
09cf872
Message:

Usando la nomenclatura de Minka
Adaptación para Multiple Try Metropolis

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@2179 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol_pkg/BysVecLinReg/Multivariate.tol

    r09cf872 r6049f18  
    6262  //Stacked columns of A (D*Mx1)
    6363  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);
    6666  //Average of posterior distribution of A for alpha=0: Y*X'*(X*Xt)^-1 (dxm)
    6767  VMatrix _.nu = Rand(0,0,0,0);
    … …  
    6969  VMatrix _.vec.nu = Rand(0,0,0,0);
    7070  //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
    7276  //Y*X'*(X*Xt)^-1*X*Y'
    7377  VMatrix _.nuXYt = Rand(0,0,0,0);
    … …  
    181185    1==1,
    182186    {
     187      VMatrix _.M := Constant(_.d,_.m,0);
     188      VMatrix _.K := Constant(_.m,_.m,0);
    183189      Real change.X(X);
    184190      Real change.Y(Y);
    … …  
    187193      VMatrix _.A := BysVecLinReg::vec2vmatrix(_.vec.A,Constant(_.d,_.m,1));
    188194      Real change.V(Eye(_.d));
    189       VMatrix _.vec.A.prior.nu := _.vec.nu*0;
    190       VMatrix _.vec.A.prior.S := _.V*0;
    191195      True
    192196    })
    193197  };
     198
    194199
    195200  ////////////////////////////////////////////////////////////////////////////
    … …  
    231236    {
    232237      VMatrix _.X := Copy(X);
    233       VMatrix _.X.Lf:=CholeskiFactor(_.X,"XXt");
     238      VMatrix _.Sxx := MMtSqr(_.X)+_.K;
     239      VMatrix _.X.Lf:=CholeskiFactor(_.Sxx,"X");
    234240      VMatrix _.X.Le := CholeskiSolve(_.X.Lf,
    235241        Convert(_.X.Lf, "Cholmod.R.Sparse"),"P");
    … …  
    248254    {
    249255      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;
    251258      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);
    254261      VMatrix _.vec.nu:=BysVecLinReg::vmatrix2vec(_.nu);
    255262      True
    … …  
    317324  ////////////////////////////////////////////////////////////////////////////
    318325  {
    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;
    323328    Real freDeg = _.N+_.W.N0;
    324329    VMatrix V = Mat2VMat(RandIWishart(freDeg, VMat2Mat(W)));
    … …  
    336341
    337342  ////////////////////////////////////////////////////////////////////////////
    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");
    341347    If(!_.r.C,
    342348      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");
    350357    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;
    352359    VMatrix e.1 = _.VxIm.Le*e;
    353360    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)
    355369  };
    356370
    … …  
    411425      VMatrix _.A := BysVecLinReg::vec2vmatrix(_.vec.A,_.A)
    412426    });
     427    VMatrix _.E := _.Y - _.A * _.X;
    413428    Copy(_.A)
    414429  };
Note: See TracChangeset for help on using the changeset viewer.