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 14 years ago

Closed 14 years ago

#723 closed task (fixed)

Obtención de los polinomios estimados

Reported by: jgallardo Owned by: Pedro Gea
Priority: minor Milestone: Release 0.6
Component: Results Keywords:
Cc:

Description

Hola MMS.

Necesito la extracción de los polinomios ya estimados de los submodelos, esto es combinar la definición de los polinomios (dif, ar, ma) del submodelo y los parámetros estimados; pero no he encontrado el método que lo haga (aunque esto no significa nada). Por si acaso estoy en lo cierto y no existe tal método he creado esta función que a lo mejor puedes aprovechar.

//////////////////////////////////////////////////////////////////////////////
Set GetPolyns(NameBlock estim){
//////////////////////////////////////////////////////////////////////////////
  Set paramsEstim = estim::GetParameters(?);
  NameBlock model = estim::GetModel(?);
  Set paramsModel = model::GetParameters(?);

  Set paramsModel.use = Select(paramsModel, Real(NameBlock param){
    ClassOf(param) == "MMS::@ParameterARIMA"
  });

  Set arModel = Select(paramsModel.use, Real(NameBlock param){
    param::GetType(?) == "AR"
  });

  Set maModel = Select(paramsModel.use, Real(NameBlock param){
    param::GetType(?) == "MA"
  });

  Set armaModel = {SetOfSet(
    Set AR = arModel,
    Set MA = maModel
  )};

  Set submodels = model::GetSubmodels(?);

  Set bySubmodel = EvalSet(submodels, Set(NameBlock submodel){
    Text name = submodel::GetName(?);
    MMS::@NoiseARIMA noise = submodel::GetNoise(?);
    Set arimaInitial = noise::GetInitialARIMA(?);

    Polyn dif = {
      Set difs = EvalSet(arimaInitial, Polyn(Set reg){
        reg["dif"]
      });
      SetProd(difs)
    };

    Set arma = EvalSet(armaModel, Polyn(Set polsModel){  
      Text nombre = Name(polsModel);

      Set byPolModel = EvalSet(polsModel, Polyn(NameBlock polModel){
        Text namePM = Name(polModel);
        Real degree = polModel::GetDegree(?);
        Set estim.tmp = Select(paramsEstim, Real(NameBlock param){
          Name(param) == namePM
        });

        NameBlock estim = If(Card(estim.tmp), estim.tmp[1], [[Empty]]);
        Real avr = estim::GetMean(?);
        Polyn pol = 1 - avr*B^degree
      });

      Polyn pol = SetProd(byPolModel);
     
      Eval("Polyn "+ nombre +" = pol;")
    });

    Set res = [[name, dif]] << arma;

    Text nombreSM = ToName(name);
 
    Eval("Set "+ nombreSM +" = res;")
  })
};
//////////////////////////////////////////////////////////////////////////////

Abr.

Change History (2)

comment:1 in reply to:  description Changed 14 years ago by jgallardo

Replying to jgallardo:

Hola de nuevo MMS. Gracias al usuario lmperez tengo la solución:

  estim::GetModel.Results(?)::GetSubmodel("submodelo")::GetARIMA(?);

incomprensiblemente no la vi ayer.

Saludos a toda la comunidad MMS.

Hola MMS.

Necesito la extracción de los polinomios ya estimados de los submodelos, esto es combinar la definición de los polinomios (dif, ar, ma) del submodelo y los parámetros estimados; pero no he encontrado el método que lo haga (aunque esto no significa nada). Por si acaso estoy en lo cierto y no existe tal método he creado esta función que a lo mejor puedes aprovechar.

//////////////////////////////////////////////////////////////////////////////
Set GetPolyns(NameBlock estim){
//////////////////////////////////////////////////////////////////////////////
  Set paramsEstim = estim::GetParameters(?);
  NameBlock model = estim::GetModel(?);
  Set paramsModel = model::GetParameters(?);

  Set paramsModel.use = Select(paramsModel, Real(NameBlock param){
    ClassOf(param) == "MMS::@ParameterARIMA"
  });

  Set arModel = Select(paramsModel.use, Real(NameBlock param){
    param::GetType(?) == "AR"
  });

  Set maModel = Select(paramsModel.use, Real(NameBlock param){
    param::GetType(?) == "MA"
  });

  Set armaModel = {SetOfSet(
    Set AR = arModel,
    Set MA = maModel
  )};

  Set submodels = model::GetSubmodels(?);

  Set bySubmodel = EvalSet(submodels, Set(NameBlock submodel){
    Text name = submodel::GetName(?);
    MMS::@NoiseARIMA noise = submodel::GetNoise(?);
    Set arimaInitial = noise::GetInitialARIMA(?);

    Polyn dif = {
      Set difs = EvalSet(arimaInitial, Polyn(Set reg){
        reg["dif"]
      });
      SetProd(difs)
    };

    Set arma = EvalSet(armaModel, Polyn(Set polsModel){  
      Text nombre = Name(polsModel);

      Set byPolModel = EvalSet(polsModel, Polyn(NameBlock polModel){
        Text namePM = Name(polModel);
        Real degree = polModel::GetDegree(?);
        Set estim.tmp = Select(paramsEstim, Real(NameBlock param){
          Name(param) == namePM
        });

        NameBlock estim = If(Card(estim.tmp), estim.tmp[1], [[Empty]]);
        Real avr = estim::GetMean(?);
        Polyn pol = 1 - avr*B^degree
      });

      Polyn pol = SetProd(byPolModel);
     
      Eval("Polyn "+ nombre +" = pol;")
    });

    Set res = [[name, dif]] << arma;

    Text nombreSM = ToName(name);
 
    Eval("Set "+ nombreSM +" = res;")
  })
};
//////////////////////////////////////////////////////////////////////////////

Abr.

comment:2 Changed 14 years ago by Pedro Gea

Component: EstimationResults
Milestone: Release 0.6
Resolution: fixed
Status: newclosed
Type: defecttask
Note: See TracTickets for help on using tickets.