Changeset 41d9440 in tol


Ignore:
Timestamp:
Oct 21, 2008, 11:06:42 AM (18 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
1e92122
Parents:
a3c9ab0
Message:

Handling with external filters

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/stdlib/math/stat/models/bayesian/bysMcmc/bsr/gibbs/_basicMaster.tol

    ra3c9ab0 r41d9440  
    2323  //Internal reference to model definition
    2424  Set _.modelDef = modelDef;
     25  //External filter of output
     26  Set _.externalFilter = Copy(Empty);
     27  //Output after external filters
     28  VMatrix _.Y = _.modelDef->Y;
     29
    2530  Text _.name = _.modelDef->DocInfo->Model.Name; 
    2631  //Setting NameBlock description
    … …  
    96101  //Linear block values
    97102  VMatrix _.beta   = Rand(0,0,0,0);
     103
     104  ////////////////////////////////////////////////////////////////////////////
     105  Real DoExternalFilter(Real unused)
     106  ////////////////////////////////////////////////////////////////////////////
     107  {
     108    VMatrix _.Y := _.modelDef->Y;
     109    If(!Card(_.externalFilter), 1,
     110    {
     111      SetMin(EvalSet(_.externalFilter,VMatrix(NameBlock extflt)
     112      {
     113        extFlt::do.filter(_.Y)
     114      }))
     115    })
     116  };
    98117
    99118  ////////////////////////////////////////////////////////////////////////////
    … …  
    160179  //WriteLn("TRACE"+_MID+" _.lin.blk.init 4");
    161180    VMatrix _.beta   := _.lin.blk::_.blockDef::_.store;
    162     VMatrix sig_0 = _.sig.blk::draw(0, _.modelDef::Y - _.modelDef::X*_.beta);
     181    Real DoExternalFilter(0);
     182    VMatrix sig_0 = _.sig.blk::draw(0, _.Y - _.modelDef->X*_.beta);
    163183  //WriteLn("TRACE"+_MID+" _.lin.blk.init 5");
    164     VMatrix _.YplusV := _.outMis.blk::filter(_.modelDef::Y);
     184    VMatrix _.YplusV := _.outMis.blk::filter(_.Y);
    165185  //WriteLn("TRACE"+_MID+" _.lin.blk.init 6");
    166     VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef::X);
     186    VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef->X);
    167187  //WriteLn("TRACE"+_MID+" _.lin.blk.init 7");
    168188    VMatrix _.noise := _.YplusV-_.XplusU*_.beta;
    … …  
    183203  {
    184204  //WriteLn("TRACE"+_MID+" draw.sig.lin 1.1");
     205    Real DoExternalFilter(0);
    185206    VMatrix om = If(Not(_.outMis.blk::_.blockDef::_.numCol),Rand(0,1,0,0),
    186207    {
    187208      _.outMis.blk::draw(numSim,_.arm.blk,_.sig.blk::_.sigmaInv,
    188                          _.modelDef::Y-_.XplusU*_.beta)
     209                         _.Y-_.XplusU*_.beta)
    189210    });
    190     VMatrix _.YplusV := _.outMis.blk::filter(_.modelDef::Y);
     211    VMatrix _.YplusV := _.outMis.blk::filter(_.Y);
    191212  //WriteLn("TRACE"+_MID+" draw.sig.lin 1.3");
    192213    VMatrix im = If(Not(_.inpMis.blk::_.blockDef::_.numCol),Rand(0,1,0,0),
    193214    {
    194215      _.inpMis.blk::draw(numSim,_.arm.blk,_.sig.blk::_.sigmaInv,
    195                          _.beta, _.YplusV-_.modelDef::X*_.beta)
     216                         _.beta, _.YplusV-_.modelDef->X*_.beta)
    196217    });
    197     VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef::X);
     218    VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef->X);
    198219  //WriteLn("TRACE"+_MID+" draw.sig.lin 1.5");
    199220    VMatrix _.noise := _.YplusV - _.XplusU*_.beta;
    … …  
    225246  ////////////////////////////////////////////////////////////////////////////
    226247  {
     248    Real DoExternalFilter(0);
    227249    VMatrix om = If(Not(_.outMis.blk::_.blockDef::_.numCol),Rand(0,1,0,0),
    228250    {
    229251      _.outMis.blk::maxLikelihood(numSim,_.arm.blk,_.sig.blk::_.sigmaInv,
    230                                   _.modelDef::Y-_.XplusU*_.beta)
     252                                  _.Y-_.XplusU*_.beta)
    231253    });
    232     VMatrix _.YplusV := _.outMis.blk::filter(_.modelDef::Y);
     254    VMatrix _.YplusV := _.outMis.blk::filter(_.Y);
    233255  //WriteLn("TRACE"+_MID+" draw.sig.lin 1.3");
    234256    VMatrix im = If(Not(_.inpMis.blk::_.blockDef::_.numCol),Rand(0,1,0,0),
    235257    {
    236258      _.inpMis.blk::maxLikelihood(numSim,_.arm.blk,_.sig.blk::_.sigmaInv,
    237                                   _.beta, _.YplusV-_.modelDef::X*_.beta)
     259                                  _.beta, _.YplusV-_.modelDef->X*_.beta)
    238260    });
    239     VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef::X);
     261    VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef->X);
    240262  //WriteLn("TRACE"+_MID+" draw.sig.lin 1.5");
    241263    VMatrix _.noise := _.YplusV - _.XplusU*_.beta;
    … …  
    297319  ////////////////////////////////////////////////////////////////////////////
    298320  {
     321  //WriteLn("TRACE "+_MID+"::setStore 1 values("<<Rows(values)+"x"<<Columns(values)+")");
    299322    Set EvalSet(_.blocks, Real(NameBlock block)
    300323    {
    … …  
    323346    Set equIdx = (_.modelDef->NoiseDistrib)[segmentNum]->EquIdx;
    324347    //VBR: Se asume que las ecuaciones de un segmento son consecutivas!
    325     PutVMatBlock(_.modelDef::X, equIdx[1], column, Xj)
    326   };
    327 
    328   ////////////////////////////////////////////////////////////////////////////
    329   Text _.autodoc.member.setSegmentOutput =
    330   "";
    331   Real setSegmentOutput(Matrix Yj, Real segmentNum)
    332   ////////////////////////////////////////////////////////////////////////////
    333   {
    334     Set equIdx = (_.modelDef->NoiseDistrib)[segmentNum]->EquIdx;
    335     //VBR: Se asume que las ecuaciones de un segmento son consecutivas!
    336     PutVMatBlock(_.modelDef::Y, equIdx[1], 1, Yj)
     348    PutVMatBlock(_.modelDef->X, equIdx[1], column, Xj)
    337349  };
    338350
    … …  
    346358  //WriteLn("TRACE"+_MID+" eval 1");
    347359    Real setStore(values);
     360    Real DoExternalFilter(0);
    348361  //WriteLn("TRACE"+_MID+" eval 2");
    349     VMatrix _.YplusV := _.outMis.blk::filter(_.modelDef::Y);
    350     VMatrix fullOutput.mis = _.outMis.blk::filter(_.modelDef::Y*0);
     362    VMatrix _.YplusV := _.outMis.blk::filter(_.Y);
     363    VMatrix fullOutput.mis = _.outMis.blk::filter(_.Y*0);
    351364  //WriteLn("TRACE"+_MID+" eval 3");
    352     VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef::X);
     365    VMatrix _.XplusU := _.inpMis.blk::filter(_.modelDef->X);
    353366  //WriteLn("TRACE"+_MID+" eval 4");
    354367    VMatrix _.beta := _.lin.blk::_.blockDef::_.store;
    355     VMatrix fullFilter = _.modelDef::X*_.beta;
     368    VMatrix fullFilter = _.modelDef->X*_.beta;
    356369    VMatrix fullFilter.full = _.XplusU*_.beta;
    357370    VMatrix fullFilter.mis = fullFilter.full - fullFilter;
    … …  
    373386      Text name = Replace(segment->Name,"::Noise","");
    374387    //WriteLn("TRACE"+_MID+" eval 7["<<k+"].2.1");
    375       Matrix output_ = VMat2Mat(SubRow(_.modelDef::Y,segment->EquIdx));
     388      Matrix output_ = VMat2Mat(SubRow(_.modelDef->Y,segment->EquIdx));
    376389      Matrix output.mis_ = VMat2Mat(SubRow(fullOutput.mis,segment->EquIdx));
     390      Matrix output.extFil = VMat2Mat(SubRow(_.modelDef->Y-_.Y,segment->EquIdx));
    377391      Matrix output.full = output_+output.mis_;
    378392      Matrix output = IfMat(output.mis_,RProd(output_,?),output_);
    … …  
    421435        Date first = ti->FirstDate;
    422436        Date difFirst = Succ(first, ti->Dating, difDeg);
    423         Serie serOutput      = MatSerSet(Tra(output),     ti->Dating, first)[1];
    424         Serie serOutput.mis  = MatSerSet(Tra(output.mis), ti->Dating, first)[1];
    425         Serie serOutput.full = MatSerSet(Tra(output.full),ti->Dating, first)[1];
    426         Serie serFilter      = MatSerSet(Tra(filter),     ti->Dating, first)[1];
    427         Serie serFilter.mis  = MatSerSet(Tra(filter.mis), ti->Dating, first)[1];
    428         Serie serFilter.full = MatSerSet(Tra(filter.full),ti->Dating, first)[1];
    429         Serie serNoise       = MatSerSet(Tra(noise),      ti->Dating, first)[1];
     437        Serie serOutput        = MatSerSet(Tra(output),        ti->Dating, first)[1];
     438        Serie serOutput.extFil = MatSerSet(Tra(output.extFil), ti->Dating, first)[1];
     439        Serie serOutput.mis    = MatSerSet(Tra(output.mis),    ti->Dating, first)[1];
     440        Serie serOutput.full   = MatSerSet(Tra(output.full),   ti->Dating, first)[1];
     441        Serie serFilter        = MatSerSet(Tra(filter),        ti->Dating, first)[1];
     442        Serie serFilter.mis    = MatSerSet(Tra(filter.mis),    ti->Dating, first)[1];
     443        Serie serFilter.full   = MatSerSet(Tra(filter.full),   ti->Dating, first)[1];
     444        Serie serNoise         = MatSerSet(Tra(noise),         ti->Dating, first)[1];
    430445        If(hasArima,
    431446        {
    … …  
    439454        {
    440455          Serie serForecast = MatSerSet(Tra(forecast), ti->Dating, first)[1];
    441           [[sigma, stdErr, avr, serOutput, serOutput.mis, serOutput.full,
     456          [[sigma, stdErr, avr, serOutput, serOutput.mis, serOutput.extFil, serOutput.full,
    442457            serFilter, serFilter.mis, serFilter.full, serNoise, serForecast]]
    443458        })
    … …  
    446461        If(hasArima,
    447462        {
    448           [[sigma, stdErr, avr, output, output.mis, output.full,
     463          [[sigma, stdErr, avr, output, output.extFil, output.mis, output.full,
    449464            filter, filter.mis, filter.full, noise, forecast,
    450465            difNoise, residuals, arima]]
    451466        },
    452467        {
    453           [[sigma, stdErr, avr, output, output.mis, output.full,
     468          [[sigma, stdErr, avr, output, output.extFil, output.mis, output.full,
    454469            filter, filter.mis, filter.full, noise, forecast]]
    455470        })
    … …  
    466481  ////////////////////////////////////////////////////////////////////////////
    467482  {
     483    Real setStore(values);
    468484    _eval(values, True, False)
    469485  };
    … …  
    610626  ////////////////////////////////////////////////////////////////////////////
    611627  {
    612     VMatrix X_U = _.inpMis.blk::filter(_.modelDef::X);
     628    VMatrix X_U = _.inpMis.blk::filter(_.modelDef->X);
    613629    VMatrix X = SubCol(X_U,beta.index);
    614630    VMat2Mat(subRegEquBlockV(resBlock, X))
    … …  
    623639  ////////////////////////////////////////////////////////////////////////////
    624640  {
    625     VMatrix Y = _.outMis.blk::filter(_.modelDef::Y);
     641    VMatrix Y = _.outMis.blk::filter(_.modelDef->Y);
    626642    VMat2Mat(subRegEquBlockV(resBlock, Y))
    627643  };
    … …  
    649665  ////////////////////////////////////////////////////////////////////////////
    650666  {
    651     VMatrix X_U = _.inpMis.blk::filter(_.modelDef::X);
     667    VMatrix X_U = _.inpMis.blk::filter(_.modelDef->X);
    652668    VMat2Mat(subDifRegEquBlockV(resBlock, X_U))
    653669  };
    … …  
    661677  ////////////////////////////////////////////////////////////////////////////
    662678  {
    663     VMatrix X_U = _.inpMis.blk::filter(_.modelDef::X);
     679    VMatrix X_U = _.inpMis.blk::filter(_.modelDef->X);
    664680    VMatrix X = SubCol(X_U,beta.index);
    665681    VMat2Mat(subDifRegEquBlockV(resBlock, X))
    … …  
    674690  ////////////////////////////////////////////////////////////////////////////
    675691  {
    676     VMatrix Y_V = _.outMis.blk::filter(_.modelDef::Y);
     692    VMatrix Y_V = _.outMis.blk::filter(_.modelDef->Y);
    677693    VMat2Mat(subDifRegEquBlockV(resBlock, Y_V))
    678694  };
Note: See TracChangeset for help on using the changeset viewer.