source: tol/doc/modeling/BSR/bsr.import.exa.tol @ c3a55e7

1941-docker-image-to-testdevel
Last change on this file since c3a55e7 was 67e3378, checked in by Jorge Pérez <josp.jorge@…>, 17 years ago

updating to classes

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

  • Property mode set to 100644
File size: 6.2 KB
Line 
1NameBlock Build.Example.BSR(Text path.out, Text session.id,
2                            Serie Y, Set X)
3{
4  Real beta1 = Rand(-1,1);
5  Real beta2 = Rand(-1,beta1);
6
7  NameBlock [[
8    Text _.path.out = path.out;
9    Text _.session.id = session.id;
10    NameBlock _.bsr.ARMA.2_1 = [[
11      Text _.dating.name = DatingName(Y);
12      Date _.first = First(Y);
13      Date _.last = Last(Y),
14      Matrix _.Y = SerMat(Y);
15      Matrix _.X = SerSetMat(X);
16      Set _.beta.ini = [[beta1, beta2]];
17 
18      Text Get.Name(Real void)
19      {
20        Text "ObsY"
21      };
22
23      Text Get.Sigma2(Real void)
24      {
25        Text "sigma2"
26      };
27
28      Set Get.TimeInfo(Real void)
29      {
30        Set BSR.NoiseTimeInfo(TimeSet Eval(_.dating.name), _.first, _.last)
31      };
32
33      Real Get.ARIMA.Size(Real void)
34      {
35        Real 1
36      };
37
38      Set Get.ARIMA.Factor(Real f)
39      {
40        Set ARIMAStruct(1, 1-0.1*B-0.1*B^2, 1-0.1*B, 1)
41      };
42
43      Real Get.Param.Size(Real void)
44      {
45        Real Rows(_.X)
46      };
47
48      Set Get.Param(Real iP)
49      {
50        Real value = If(iP>2, Real Rand(-1,1),
51                        _.beta.ini[iP]);
52        Set Bsr.Param.Info("beta_"+IntText(iP), value, -1/0, 1/0)
53      };
54
55      Real Get.Missing.Size(Real void)
56      {
57        Real 0
58      };
59
60      Set Get.Missing(Real iP)
61      {
62        Set Empty
63      };
64
65      Real Get.Equation.Size(Real void)
66      {
67        // _.X e _.Y están dispuestas por filas
68        // asi las ecuaciones estan por columnas
69        Real Columns(_.X)
70      };
71
72      Real Get.Equation.Output(Real iE)
73      {
74        Real MatDat(_.Y,1,iE)
75      };
76
77      Real Get.Equation.Input.Size(Real iE)
78      {
79        Real Rows(_.X)
80      };
81
82      Real Get.Equation.Input.Coef(Real iE, Real iT)
83      {
84        Real MatDat(_.X, iT,iE)
85      };
86
87      Text Get.Equation.Input.Param(Real iE, Real iT)
88      {
89        Text "beta_"+IntText(iT)
90      };
91
92      NameBlock Get.Constraints.Handler(Real void)
93      {
94        NameBlock BysMcmc::Bsr::Import::Explicit.Constraints([["0>=-beta_1+beta_2"]])
95      }
96    ]];
97
98    Text Get.Doc.Model.Name(Real void)
99    {
100      Text "BSRExample"
101    };
102
103    Text Get.Doc.Model.Description(Real void)
104    {
105      Text "Modelo simple ARMA(2,1)"
106    };
107
108    Text Get.Doc.Session.Name(Real void)
109    {
110      Text _.session.id
111    };
112
113    Text Get.Doc.Session.Description(Real void)
114    {
115      Text "Session "+_.session.id+" para el modelo: " +
116           Get.Doc.Model.Name(0) + " " + Get.Doc.Model.Description(0)
117    };
118
119    Text Get.Doc.Session.Authors(Real void)
120    {
121      Text "user@bayesforecast.com"
122    };
123
124    Text Get.Doc.Path(Real void)
125    {
126      Text _.path.out
127    };
128
129    Real Get.LinReg.Size(Real void)
130    {
131      // para el ejemplo actual solo tenemos un segmento de regresión
132      Real 1
133    };
134
135    NameBlock Get.LinReg.Segment(Real iS)
136    {
137      // en este caso retornamos el NameBlock para el único segmento
138      // que se modela para mas de un segmento de regresión se suele
139      // usar un Set que es indexado por iS: _bsr.blocks[iS]
140      NameBlock _.bsr.ARMA.2_1
141    };
142
143    NameBlock Get.Constraints.Handler(Real void)
144    {
145      // retornamos un NameBlock predefinido para el caso
146      // no restringido
147      NameBlock BysMcmc::Bsr::Import::Unconstrained(0)
148    }
149  ]]
150};
151
152// Este seria el objeto config para la 1.1.7
153/*
154NameBlock bsr.config = [[
155//MCMC dimensions
156  Real mcmc.burnin        =  100;
157  Real mcmc.sampleLength  = 2000;
158  Real mcmc.cacheLength   =  100;
159//Basic master configuration
160  Real basic.cholesky.epsilon          = 1.E-10;
161  Real basic.cholesky.warningFreq      = 100;
162  Real basic.truncMNormal.gibbsNumIter = 5;
163//Report configuration
164  Real report.raftery.diag.q   = 0.025;
165  Real report.raftery.diag.r   = 0.007;   
166  Real report.raftery.diag.s   = 0.950;   
167  Real report.raftery.diag.eps = 0.001;
168  Real report.acf.lag          = 20,
169  Real report.histogram.parts  = 100;
170  Real report.kerDens.points   = 0;
171//Generic flags
172  Real do.resume          =  False;
173  Real do.report          =  True;
174  Real do.eval            =  True;
175  Real do.linear.effects  =  True
176]];
177*/
178
179// El objeto config para la 2.0.1 es de tipo Config
180BysMcmc::@Config bsr.config = BysMcmc::@Config::Default( 0 );
181
182Serie WN = SubSer(Gaussian(0,1),y2000,y2008);
183Polyn AR = (1-0.7*B)*(1-0.3*B);
184Polyn MA = 1-0.2*B;
185Ration Q = MA/AR;
186Serie Z = DifEq(Q,WN);
187Real K = 4;
188Real beta1=Rand(-1,1);
189Real beta2=Rand(-1,beta1);
190Set BETA = [[beta1, beta2]]<<For(3,K, Real(Real ik) {Rand(-1,1)});
191Set X = For(1,K,Serie(Real _k)
192  {
193   Real s = Rand(0,1);
194   Real l = Rand(0,10);
195   Serie SubSer(Rand(l,l) + Gaussian(0,s),y2007,y2008)});
196
197
198Serie Y = SetSum(For(1,K,Serie(Real _k)
199  {Serie BETA[_k]*X[_k]})) + SubSer(Z,y2007,y2008);
200
201// Construye el NameBlock que implementa el interfaz Import
202NameBlock bsr.import = Build.Example.BSR("/tmp/", Text "session01", Serie Y, Set X);
203
204// Si quiero escribir el archivo
205Text file.bsr = BysMcmc::Bsr::Import::Write(bsr.import);
206
207// si quiero parserarlo
208Set bsr.parsed = BSR.Parse(file.bsr, "joint");
209
210//  Esta seria la forma de estimar en la version 1.1.7
211/*
212Set bsr.estim = { BysMcmc::Bsr::Gibbs::Estim
213                    (
214                     Set modelDef = bsr.parsed,
215                     NameBlock bsr.config
216                    )};
217*/
218
219// Esta seria la forma de invocar Estim en la version 2.0.1
220
221// Creo un Cycler
222
223// El partial handler es el objeto que implementara el
224// condicionamiento, para este ejemplo usamos uno vacio.
225BysMcmc::@McmcPartialHandler hdPartial = BysMcmc::@McmcPartialHandler::Null( 0 );
226
227// El notifiar permite emitir notificaciones personalizadas de las
228// etapas del gibbs.
229BysMcmc::@Notifier notifier = BysMcmc::@Notifier::Null( 0 );
230
231// El cycler se puede construir de 3 maneras
232
233BysMcmc::@Cycler cycler = BysMcmc::Bsr::Gibbs::GetCycler( bsr.import,
234                                                         hdPartial,
235                                                         bsr.config,
236                                                         notifier );
237//Cycler cycler = GetCycler( file.bsr, hdPartial, bsr.config, notifier );
238//Cycler cycler = GetCycler( bsr.parsed, hdPartial, bsr.config, notifier );
239
240// ahora la estimacion
241BysMcmc::@Estimation EE = BysMcmc::@Estimation::New( cycler );
242
243Real EE::Run( 0 );
Note: See TracBrowser for help on using the repository browser.