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

1941-docker-image-to-testdevel
Last change on this file since b5d9c02 was 9d7d3a4, checked in by Víctor de Buen <vdebuen@…>, 16 years ago

Refs #906

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

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