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.

Opened 14 years ago

Closed 14 years ago

Last modified 14 years ago

#1294 closed defect (fixed)

Tabular estadísticos - Función tol

Reported by: jgarcia Owned by: Víctor de Buen Remiro
Priority: normal Milestone: Métodos de presentación gráfica ejecutables desde TOL
Component: Kernel Version: head
Severity: normal Keywords:
Cc:

Description

Buenos días.

Quería utilizar la función de botón derecho (de una serie) 'Tabular estadísticos' en un código, sin necesidad de tabular nada, es decir, guardar en una variable los estadísticos de una serie o de un set de series para realizar calculos con ellos.

No encuentro la forma de hacerlo. La función de botón derecho utiliza TCL y es el propio objeto btable el que tiene un metodo fillStatistics. Este, a su vez, llama a ::tol::seriestat.

Cómo puedo hacer esto que he explicado?

Debería haber una función en stdlib que hiciera esto.

Change History (4)

comment:1 Changed 14 years ago by Víctor de Buen Remiro

No alcanzo a comprender para qué puedes necesitar semejante cosa, cuando cada estadístico tiene su propia función que puedes llamar de forma independiente sobre la serie que desees y manipular luego a tu antojo. Por ejemplo, la función que calcula la media de una serie es AvrS, y para aplicarla a un conjunto de series basta con usar EvalSet. Pongamos por caso que lo que vas a manipular posteriormente son las medias y las desviaciones de un conjunto de series

Set ser = [[
  Serie SubSer(Gaussian(1,.1,C),y2011,y2012),
  Serie SubSer(Gaussian(2,.2,C),y2011,y2012),
  Serie SubSer(Gaussian(3,.3,C),y2011,y2012),
  Serie SubSer(Gaussian(4,.4,C),y2011,y2012) 
]];

Pues bien, sólo tendrías que escribir esto en TOL:

Set stats.1 = { [[
  Set AvrS  = EvalSet(ser,AvrS);
  Set StDsS = EvalSet(ser,StDsS)
]] };

Luego podrías acceder a los valores almacenados por nombre, por ejemplo a la media de la segunda serie sería así:

Real (stats.1::AvrS)[2];

Desde luego no habría ningún problema en crear una función que hiciera esto para los estadísticos usuales que aparecen en la tabla aunque no son los únicos posibles. Otros usuairos podrían querer deterinados cuantiles o vaya usted a saber el qué. Tampoco me queda nada claro cual es la estructura esperada de la información devuelta, aunque imagino que podría ser algo así:

Set CalcStatisticsOfSeries(Set series)
{
  Set statistics.of.series = SetOfCode(
    CountS,MaxS,MinS,SumS,AvrS,StDsS,VarS,AsimetryS,KurtosisS,MedianS);
  Set result = EvalSet(statistics.of.series, Set(Code stat) 
  { 
    Set aux = EvalSet(series,stat);
    Eval(Name(stat)+"=aux")
  });
  Real SetIndexByName(result);
  result
};


Set stats.2 = { CalcStatisticsOfSeries( ser ) } ;

comment:2 Changed 14 years ago by Víctor de Buen Remiro

Status: newaccepted

comment:3 Changed 14 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: acceptedclosed

comment:4 Changed 14 years ago by Víctor de Buen Remiro

Perdón, hay un error en la declaración anterior debido a que EvalSet requiere un sólo argumento y los estadísticos tienen 3, aunque dos son opcionales:

Set CalcStatisticsOfSeries(Set series)
{
  Set statistics.of.series = SetOfCode(
    CountS,MaxS,MinS,SumS,AvrS,StDsS,VarS,AsimetryS,KurtosisS,MedianS);
  Set result = EvalSet(statistics.of.series, Set(Code stat) 
  { 
    Set aux = EvalSet(series,Real(Serie ser) { stat(ser) });
    Eval(Name(stat)+"=aux")
  });
  Real SetIndexByName(result);
  result
};
Note: See TracTickets for help on using tickets.