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

Opened 13 years ago

Last modified 12 years ago

#991 new task

crear clases generales para poder hacer 'prevision' con modelos Probit

Reported by: mruiz Owned by: Pedro Gea
Priority: major Milestone: Next
Component: General Keywords:
Cc: mruiz@…

Description

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.

Change History (1)

comment:1 Changed 12 years ago by Pedro Gea

Milestone: MaintenanceNext
Type: defecttask
Note: See TracTickets for help on using tickets.