﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	resolution	keywords	cc
991	crear clases generales para poder hacer 'prevision' con modelos Probit	mruiz	Pedro Gea	"hola,
ante la problematica que nos hemos encontrado, se propone crear algunas clases de tipo general que facilite el poder hacer prevision en modelos probit cuando se trabaja con matrices.

Añado el codigo que se ha hecho para el proyecto de Banamex para que sirva de ejemplo y facilite el trabajo.


{{{

// Calculo los intervalos de prevision para cada submodelo
  Set intervals = EvalSet(est::GetModel(?)::GetSubmodels(?), Set (NameBlock sMFor)
  {
    //NameBlock sM = sSubmod[1];
    Text nameOut = (sMFor::GetOutput(?))::GetName(?);
    Text agen = Sub(nameOut, TextFind(nameOut, ""."")+1, TextLength(nameOut));
    NameBlock varAge = est::GetModel(?)::GetDataSet(?)::GetVariable(""id_dt_start_Agen.""+ agen);
    Matrix data = varAge::GetData(?);
    Real numFechasEst = DateDif(Diario, FechaEstimDsd, FechaEstimHst);
    Real numFechasFor = DateDif(Diario, FechaEstimDsd, FechaForHst);
    Real numDatosEst = MatSum(LE(data, numFechasEst+1));
    Real numDatosFor = MatSum(LE(data, numFechasFor));
    [[ numDatosEst, numDatosFor]]
  });

// Creamos los nombres de las variables para 'prevision', para no machacar
  Set inputs = EvalSet(est::GetModel(?)::GetSubmodel(1)::GetExpTerms(?), Text (NameBlock et)
  {
    Text name = et::GetInput(?)::GetVariable(?)::GetName(?);
    Text Sub(name, 1, TextFind(name, ""_"", TextLength(name), 1, -1))<<""Agen.For""
  });


// Asignamos a esas variables los nuevos datos 
  Set For(1, Card(inputs), Anything (Real j) {
  Matrix newinput = BinGroup(""<<"", For(1, Card(intervals), Matrix (Real i) {
    SubRow(
    est::GetModel(?)::GetSubmodel(i)::GetExpTerm(j)::GetInput(?)::GetVariable(?)::GetData(?),

    Range(intervals[i][1], intervals[i][2], 1)
    )
  }));
  NameBlock est::GetModel(?)::GetDataSet(?)::ReplaceVariable([[
    Text _.name = inputs[j];
    Set _.data. = [[newinput]]

  ]]);
  // Real est::GetModel(?)::RemoveMVariable(inputs[j]);
  NameBlock est::GetModel(?)::CreateMVariable([[
    Text _.name = inputs[j];
    Text _.variable = inputs[j]

    ]])
  });

// volvemos a cambiar los valores Begin y End en la estimacion
  Set EvalSet(est::GetModel(?)::GetSubmodels(?), Anything (NameBlock sub)
  {
    Real sub::SetBegin(Matrix Row(1,1));
    Real sub::SetEnd(Matrix Row(-1,-1));
    Set For(1, Card(inputs), Real (Real j) {
      sub::GetExpTerm(j)::SetInput(inputs[j])
    });
     1
  });

}}}

Saludos."	task	new	major	Next	General			mruiz@…
