close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #670: Cobega.tol

File Cobega.tol, 8.1 KB (added by Iván Robles, 16 years ago)

Se necesita tener el oza modeloPrueba.oza en la carpera donde lo compiles.

Line 
1//////////////////////////////////////////////////////////////////////////////
2//FILE: test.tol
3//AUTHOR: mafernandez@bayesforecast.com
4//CREATION: 2008-09-23
5//PURPOSE: Testing system Bsr-Hlm with deltas.
6//////////////////////////////////////////////////////////////////////////////
7//Random seed setting
8Real PutRandomSeed(0);
9Real rndSeed = GetRandomSeed(0);
10WriteLn("Current Random Seed = "<< rndSeed);
11
12Set Include ("modeloPrueba.oza");
13
14
15
16TimeSet CtLV  = C - (WD(7)+WD(6));
17
18/*
19Set Data = [[   
20Serie Output1 =  Serie SubSer(Serie Rand (0,1,CtLV), y2000, y2002);
21Serie Input1  =  Serie SubSer(Serie Rand (0,1,CtLV), y2000, y2002)
22]];
23*/
24
25// Conexión
26NameBlock DBConnection =
27[[
28  NameBlock BsrHlm = DBConnect::Create(
29    "BsrHlm","bysfor","bys!98.",
30    "mysql", "bysNPIDSO", "d-mysql01.localbayes.es",
31    "Almacenamiento de modelos BSR-DynHLM");
32
33  Real check = Real DBConnect::CheckAll(0)
34]];
35
36//Se activa la base de datos de modelos BsrHlm
37Real DBConnection::BsrHlm::Activate(0);
38//////////////////////////////////////////////////////////////////////////////
39WriteLn("Creando en la base de datos el área documental");
40//////////////////////////////////////////////////////////////////////////////
41Text id_model   =  "Cobega";
42Text ds_model   =  "Testeo ARIMA";
43Text id_session =  "Test.Cobega"+IntText(rndSeed);
44Text ds_session =  "Testeo ARIMA";
45Text ds_authors  = "irobles@bayesforecast.com";
46
47Real BysMcmc::Bsr::DynHlm::DBApi::Mod.Create(
48  DBConnection::BsrHlm::_.defaultDB, id_model,   ds_model);
49Real BysMcmc::Bsr::DynHlm::DBApi::Ses.Create(
50  DBConnection::BsrHlm::_.defaultDB, id_session, ds_session, ds_authors);
51Real BysMcmc::Bsr::DynHlm::DBApi::ModSes.Create(
52  DBConnection::BsrHlm::_.defaultDB, id_model, id_session);
53
54
55
56//////////////////////////////////////////////////////////////////////////////
57WriteLn("Creando en la base de datos los niveles de la jerarquía");
58//////////////////////////////////////////////////////////////////////////////
59Real {BysMcmc::Bsr::DynHlm::DBApi::ModSes.SetLevels(
60  DBConnection::BsrHlm::_.defaultDB, id_model, id_session,
61  Real maxLatLevel = 0,       //Máximo nivel de latencia
62  Real hasPrior    = False,   //Indica si hay nodo a priori
63  Real hasMixture  = False)}; //Indica si hay restricciones que afectan a
64                              //variables de distintos nodos
65
66//////////////////////////////////////////////////////////////////////////////
67WriteLn("Creando en la base de datos los nodos observacionales");
68//////////////////////////////////////////////////////////////////////////////
69
70//////////////////////////////////////////////////////////////////////////////
71//Crea el manejador de series de un nodo observacional concreto
72//En este caso sólo hay un nodo observacional
73  NameBlock node.series.handler (Real nu_node)
74//////////////////////////////////////////////////////////////////////////////
75{[[
76//Real nu_node = 1;
77 
78  Text te_node = FormatReal(nu_node,"%1.0f");
79  //##Nombre del nodo
80  Text _.id_node = "Obs.Node_"+te_node;
81  //##Descripción del nodo
82  Text _.description = "Nodo observacional número "+te_node;
83  //#Contiene todas las series input y output con nombres únicos dentro
84  //de cada nodo.
85  Set _.series = [[
86        Serie Output = OutputInput["output"],
87        Serie Input  = OutputInput["input"+te_node]
88            ]];
89  //#Se comprueba la unicidad de nombres y se indexa para acelerar
90  //búsquedas
91  Real _check_unique = SetIndexByName(_.series);
92
93  //##Devuelve una serie del nodo dado un identificador único
94  Serie GetSerie(Text id_serie)
95  {
96    _.series[id_serie]
97  };
98
99  //##Información adicional del modelo sobre el output
100  NameBlock _.output =
101  {[[
102    //##Nombre con el que reconoce la serie en la base de datos
103    Text _.name = "Output";
104    //##Serie output
105    Serie _.serie = _.series[_.name];
106    //##Número de sigmas para la distribución a priori de los omitidos
107    //se multiplicará por la desviación típica muestral de la serie.
108    //La media a priori será la de la propia serie.
109    Real _.mis_pri_sig_fac = 5;
110    //##Valor mínimo a priori para los omitidos
111    Real _.mis_pri_min     = -10;
112    //##Valor máximo a priori para los omitidos
113    Real _.mis_pri_max     = 10;
114    //##Fecha inicial de estimación del nodo
115    Date _.firstDate = First(_.serie);
116    //##Fecha final de estimación del nodo
117    Date _.lastDate = Last(_.serie);
118    //##Parte ARIMA asociada
119    Set _.arima = SetOfSet{
120        ARIMAStruct(5, 1+0.1*B^5, 1, 1),
121        ARIMAStruct(261, 1+0.1*B^261, 1, 1)
122    }
123  ]]};
124 
125
126  //##Información adicional del modelo sobre los inputs
127  //Cada elemento es un NameBlock cuyo nombre será el identificador en
128  //la base de datos de BsrHlm y es obligatorio que se llame igual que
129  //la correspondiente serie input
130  Set _.input = { SetOfNameBlock(
131  NameBlock Input = [[
132    //##Serie input
133    //Los días de fiesta la gente suele salir de casa más y ver menos tele
134    Serie _.serie = _.series["Input"];
135    //##Si es falso no se usará este input
136    Real _.enabled = 1;
137    //##Número de sigmas para la distribución a priori de los omitidos
138    Real _.mis_pri_sig_fac =  5;
139    //##Valor mínimo a priori para los omitidos
140    Real _.mis_pri_min     =  -1/0;
141    //##Valor máximo a priori para los omitidos
142    Real _.mis_pri_max     =  +1/0;
143    //##Valor inicial del parámetro
144    Real _.initValue       =  0;
145    //##Valor mínimo a priori del parámetro
146    Real _.minimum         = -1/0;
147    //##Valor máximo a priori del parámetro
148    Real _.maximum         = +1/0
149   ]] )};
150
151  //Se comprueba de nuevo la unicidad de los manejadores de los input
152  Real _checkUniqueInput = SetIndexByName(_.input)
153
154]]};
155
156//////////////////////////////////////////////////////////////////////////////
157//Manejador de series del modelo
158  NameBlock series.handler=BysMcmc::Bsr::DynHlm::DBApi::CreateSeriesHandler(
159//////////////////////////////////////////////////////////////////////////////
160For(1,1, NameBlock (Real ch)
161{
162  WriteLn("[series.handler] Creando manejador de series del nodo "+
163          IntText(ch));
164  NameBlock aux = node.series.handler(ch);
165  Eval(aux::_.id_node+"=aux")
166}));
167
168//////////////////////////////////////////////////////////////////////////////
169WriteLn("Creando en la base de datos los nodos observacionales");
170//////////////////////////////////////////////////////////////////////////////
171Real BysMcmc::Bsr::DynHlm::DBApi::ModSes.Obs.CreateAll(
172  DBConnection::BsrHlm::_.defaultDB, id_model, id_session,
173  series.handler::_.obs.node );
174
175
176
177//////////////////////////////////////////////////////////////////////////////
178//Estimación del modelo con el sistema Bsr::DynHlm
179//////////////////////////////////////////////////////////////////////////////
180Set bsr.estim = {BysMcmc::Bsr::DynHlm::DBApi::Estim
181(
182  DBConnection::BsrHlm::_.defaultDB,
183  id_model,
184  id_session,
185  Ois.DefRoot+"HlmBsrTest/",
186  series.handler,
187  NameBlock bsr.config = [[
188  //MCMC dimensions
189    Real mcmc.burnin        =  100;
190    Real mcmc.sampleLength  =  200;
191    Real mcmc.cacheLength   =  100;
192  //Basic master configuration
193    Real bsr.cholesky.epsilon          = 1.E-13;
194    Real bsr.cholesky.warningFreq      = 100;
195    Real bsr.truncMNormal.gibbsNumIter = 5;
196    Code bsr.scalarSampler.armaBlock =
197      BysMcmc::Options::Scalar.Sampler::Arms;
198    Code bsr.scalarSampler.nonLinBlock =
199      BysMcmc::Options::Scalar.Sampler::Arms;
200  //Report configuration
201    Real report.raftery.diag.q   = 0.025;
202    Real report.raftery.diag.r   = 0.007;   
203    Real report.raftery.diag.s   = 0.950;   
204    Real report.raftery.diag.eps = 0.001;
205    Real report.acf.lag          = 20,
206    Real report.histogram.parts  = 100;
207    Real report.kerDens.points   = 0;
208  //Generic flags
209    Real do.resume          =  False;
210    Real do.report          =  True;
211    Real do.eval            =  True;
212    Real do.linear.effects  =  True;
213    //Metodo de aproximacion del arima
214    Text bsr.arimaFilter = BysMcmc::Options::Arima.Filter::FastCholSea//;
215  //Real bsr.arimaSkipIter = 100
216  ]]
217)};
218
219Real DBConnection::BsrHlm::Close(0);
220
221