| 1 | ///////////////////////////////////////////////////////////////////////////// |
|---|
| 2 | // LIBRARY: StdtLib (Standard Library of TOL) |
|---|
| 3 | // FILE: _reloaderFromMcmc.tol |
|---|
| 4 | // PURPOSE: |
|---|
| 5 | ///////////////////////////////////////////////////////////////////////////// |
|---|
| 6 | |
|---|
| 7 | ///////////////////////////////////////////////////////////////////////////// |
|---|
| 8 | Class @McmcReloaderFromMcmc : @McmcReloader |
|---|
| 9 | ///////////////////////////////////////////////////////////////////////////// |
|---|
| 10 | { |
|---|
| 11 | |
|---|
| 12 | // (1) por valor: |
|---|
| 13 | // Matrix _.mcmc; |
|---|
| 14 | // (2) por referencia: |
|---|
| 15 | Set _.mcmcSet = Copy(Empty); |
|---|
| 16 | |
|---|
| 17 | Set _.colNames; |
|---|
| 18 | |
|---|
| 19 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 20 | Matrix _getMcmc(Real void) |
|---|
| 21 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 22 | { |
|---|
| 23 | // (1) por valor: |
|---|
| 24 | // _.mcmc; |
|---|
| 25 | // (2) por referencia: |
|---|
| 26 | _.mcmcSet[1] |
|---|
| 27 | }; |
|---|
| 28 | |
|---|
| 29 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 30 | Set selectIndexes(Set selectedNames) |
|---|
| 31 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 32 | { |
|---|
| 33 | If(!Card(selectedNames) | !Card(_.colNames) , Copy(Empty), |
|---|
| 34 | { |
|---|
| 35 | Real If(!HasIndexByName(selectedNames), SetIndexByName(selectedNames)); |
|---|
| 36 | SelectIndexByName(selectedNames, _.colNames) |
|---|
| 37 | }) |
|---|
| 38 | }; |
|---|
| 39 | |
|---|
| 40 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 41 | VMatrix reloadSimulation(Real numSim, Set indexes) |
|---|
| 42 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 43 | { |
|---|
| 44 | Real numRow = getRowSequence(numSim); |
|---|
| 45 | Matrix row = Sub(_getMcmc(?), numRow, 1, 1, Columns(_getMcmc(?))); |
|---|
| 46 | Mat2VMat(SubCol(row, indexes), TRUE) |
|---|
| 47 | }; |
|---|
| 48 | |
|---|
| 49 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 50 | Static @McmcReloaderFromMcmc New(Matrix mcmc, Set colNames, Real sequential, |
|---|
| 51 | Real burnin) |
|---|
| 52 | //////////////////////////////////////////////////////////////////////////// |
|---|
| 53 | { |
|---|
| 54 | Real mcmc.rows = Rows(mcmc); |
|---|
| 55 | Real mcmc.cols = Columns(mcmc); |
|---|
| 56 | Case(mcmc.cols!=Card(colNames), { |
|---|
| 57 | WriteLn("[@McmcReloaderFromMcmc] MCMC columns differs from " |
|---|
| 58 | <<"number of parameters","E"); |
|---|
| 59 | @McmcReloader::Null(?) |
|---|
| 60 | }, burnin>=mcmc.rows, { |
|---|
| 61 | WriteLn("[@McmcReloaderFromMcmc] MCMC rows is less or equal " |
|---|
| 62 | <<"than specified burnin","E"); |
|---|
| 63 | @McmcReloader::Null(?) |
|---|
| 64 | }, True, { |
|---|
| 65 | @McmcReloaderFromMcmc reloader = [[ |
|---|
| 66 | Set _.colNames = colNames; |
|---|
| 67 | // (1) por valor: |
|---|
| 68 | // Matrix _.mcmc = mcmc; |
|---|
| 69 | // (2) por referencia: |
|---|
| 70 | Set _.mcmcSet = [[ mcmc ]]; |
|---|
| 71 | Real _.sampleLength = Rows(mcmc) - burnin; |
|---|
| 72 | Real _.sequential = sequential; |
|---|
| 73 | Real _.burnin = burnin |
|---|
| 74 | ]]; |
|---|
| 75 | Real reloader::initialize.sequence(0); |
|---|
| 76 | Real SetIndexByName(reloader::_.colNames); |
|---|
| 77 | reloader |
|---|
| 78 | }) |
|---|
| 79 | } |
|---|
| 80 | |
|---|
| 81 | }; |
|---|