Version 11 (modified by 14 years ago) (diff) | ,
---|
DecoTools
Módulo de descomposiciones y dueto's
Introducción
... Véase Decompositions
Definición
El paquete de descomposiciones y dueto's DecoTools ofrece un conjunto de funciones para la creación de descomposiciones aditivas.
La descomposición
La unidad elemental sobre la que se construye todo el módulo es la decomposición. En el paquete se denomina decomposición (aditiva) a todo conjunto de datos donde el primero de ellos denominado total es igual a la suma del resto, a los que se denominan contribuciones.
decomposition := {total, contributions} / total = Sum(contributions)
Por ejemplo:
a = {5, 2, 2, 1} // OK b = {4.4, 3.3, 1.0} // NO c = {10} // NO
el conjunto a
es una descomposición, mientras que b
y c
no lo son.
Una descomposición se caracteriza así por tener dos o más elementos, siendo:
deco = {deco1, deco2, deco3, ...} ^ ^ ^ | | contribution 2 | contribution 1 total
Agrupación de contribuciones
Al trabajar con descomposiciones es bastante común querer agrupar las contribuciones y obtener así una nueva decomposición con menos contribuciones. Para ello en DecoTools se crean dos estructuras TOL con las que definir cómo reagrupar una decomposición:
@Contribution.Def
Struct @Contribution.Def
es una estructura que permite definir una nueva contribución como combinación de contribuciones de referencia.
Sus argumentos son:
Text Name
: Nombre de la nueva contribución.SetOf{@Contribution.Def} Contributions
: Conjunto de contribuciones de referencia que conformarán la nueva contribución.
@Contribution.Ref
Struct @Contribution.Ref
es una estructura que permite definir una contribución de referencia.
Sus argumentos son:
[Real|Text] Info
: Nombre de la contribución de referencia o su índice en la descomposición de referencia.[Real|Serie|...|Code] BasePart
: Parte que se sustrae a la contribución de referencia a la hora de crear la nueva contribución. Puede ser un valor fijo o una función que lo obtenga al aplicarla sobre la contribución.
Ejemplos
// Definición de una nueva contribución que agrupa (suma) // las tres primeras contribuciones de referencia: Set @Contribution.Def("TresPrimeras", [[ @Contribution.Ref(1, 0), @Contribution.Ref(2, 0), @Contribution.Ref(3, 0) ]]);
// Definición de una nueva contribución que suma dos series // (contribuciones) restándoles un nivel dado por su primer dato: Set @Contribution.Def("DosSinNivel", [[ @Contribution.Ref("SerieA", FirstS), @Contribution.Ref("SerieB", FirstS) ]]);
Para otros ejemplos véase #Deco.BaseDefinition
Funciones
A continuación se describen todas las funciones que ofrece DecoTools:
- #Deco.BaseOrdered
- #Deco.BaseMarginal
- #Deco.BaseFirstIn
- #Deco.BaseCanonical
- #Deco.Exponential.BaseCanonical
Descomposiciones por transformación
Una de las situaciones más comunes al crear una descomposición aditiva es partir de la descomposición de un modelo multiplicativo al que se tomaron logaritmos.
La discusión sobre este tema puede verse en: Descomposición aditiva de modelos multiplicativos.
Deco.Ordered
Set Deco.Ordered(Set decomposition, Code transf)
Devuelve la decomposición aditiva ordenada obtenida al aplicar la transformación.
Para más detalles véase: Descomposición ordenada.
Deco.Marginal
Set Deco.Marginal(Set decomposition, Code transf)
Devuelve la descomposición aditiva marginal obtenida al aplicar la transformación.
Para más detalles véase: Descomposición marginal.
Deco.FirstIn
Set Deco.FirstIn(Set decomposition, Code transf)
Devuelve la descomposición aditiva first-in obtenida al aplicar la transformación.
Para más detalles véase: Descomposición first-in.
Deco.Canonical
Set Deco.Canonical(Set decomposition, Code transf)
Devuelve la descomposición aditiva canónica obtenida al aplicar la transformación.
Si el número de contribuciones excede el valor DecoTools::PermutationsLimit
se resolverá mediante una muestra de permutaciones de tamaño DecoTools::SampleSize
.
Para más detalles véase: Descomposición canónica.
Deco.Canonical.Exact
Set Deco.Canonical.Exact(Set decomposition, Code transf)
Devuelve la descomposición aditiva canónica obtenida al aplicar la transformación.
Realiza la descomposición canónica exacta promediando sobre todas las premutaciones independientemente del valor de DecoTools::PermutationsLimit
.
Deco.Canonical.Sample
Set Deco.Canonical.Sample(Set decomposition, Code transf, Real length)
Devuelve la descomposición aditiva canónica obtenida al aplicar la transformación.
Realiza la descomposción canónica sobre una muestra de permutaciones del tamaño indicado.
Deco.Exponential.Canonical
Set Deco.Exponential.Canonical(Set decomposition)
Devuelve la descomposición aditiva canónica obtenida al aplicar la transformación exponencial.
Esta función utiliza un algoritmo que permite, para la transformación exponencial, calcular el promedio sobre todas las permutaciones sin calcularlas. Véase el documento: Descomposición aditiva de contribuciones multiplicativas.
Ejemplos
Tomemos como ejemplo para ilustrar las funciones la siguiente descomposición de partida con 4 contribuciones:
Set deco0 = [[3.5, 1.5, 0.5, 1.0, 0.5]];
y sea rExp
la transformación exponencial:
Code rExp = FindCode("Real", "Exp");
que se define para evitar la advertencia que causa su sobrecarga (véase TOL#1180).
Set DecoTools::Deco.Ordered(deco0, rExp); // [[ 33.115, (total) // 1, (initial effect) // 3.482, 2.907, 12.696, 13.030 // ]]
Set DecoTools::Deco.Marginal(deco0, rExp); // [[ 33.115, (total) // 1, (initial effect) // 25.726, 13.030, 20.933, 13.030, // -40.604 (synergy) // ]]
Set DecoTools::Deco.FirstIn(deco0, rExp); // [[ 33.115, (total) // 1, (initial effect) // 3.482, 0.649, 1.718, 0.649, // 25.617 (synergy) // ]]
Set DecoTools::Deco.Canonical(deco0, rExp); // [[ 33.115, (total) // 1, (initial effect) // 12.437, 5.198, 9.282, 5.198 // ]]
Nótese que las dos primeras descomposiciones: la marginal y la first-in (o de primera contribución) son inexactas y presentan sinergía (véase: Descomposiciones inexactas).
Nótese también que la transformación exponencial presenta un efecto inicial no nulo (véase: Efecto inicial de la transformación).
Descomposiciones base
Una situación muy habitual, que además nos facilita eliminar el efecto inicial de la transformación, es aquélla en la que la descomposición presenta una contribución principal sobre la que se pueden referir los efectos de las demás contribuciones. A esta contribución principal la denominaremos base, de modo que una descomposición con base, viene dada por:
decomposition.base := {total, base, contributions} / total = base + Sum(contributions)
La discusión sobre este tema puede verse en: Descomposiciones base.
Deco.BaseOrdered
Set Deco.BaseOrdered(Set decomposition, Code transf)
Devuelve la decomposición aditiva ordenada con contribución base obtenida al aplicar la transformación.
Deco.BaseMarginal
Set Deco.BaseMarginal(Set decomposition, Code transf)
Devuelve la descomposición aditiva marginal con contribución base obtenida al aplicar la transformación.
Deco.BaseFirstIn
Set Deco.FirstIn(Set decomposition, Code transf)
Devuelve la descomposición aditiva first-in con contribución base obtenida al aplicar la transformación.
Deco.BaseCanonical
Set Deco.BaseCanonical(Set decomposition, Code transf)
Devuelve la descomposición aditiva canónica con contribución base obtenida al aplicar la transformación.
Si el número de contribuciones excede el valor DecoTools::PermutationsLimit
se resolverá mediante una muestra de permutaciones de tamaño DecoTools::SampleSize
.
Deco.BaseCanonical .Exact
Set Deco.BaseCanonical .Exact(Set decomposition, Code transf)
Devuelve la descomposición aditiva canónica con contribución base obtenida al aplicar la transformación.
Realiza la descomposición canónica exacta promediando sobre todas las premutaciones independientemente del valor de DecoTools::PermutationsLimit
.
Deco.BaseCanonical .Sample
Set Deco.BaseCanonical .Sample(Set decomposition, Code transf, Real length)
Devuelve la descomposición aditiva canónica con contribución base obtenida al aplicar la transformación.
Realiza la descomposción canónica sobre una muestra de permutaciones del tamaño indicado.
Deco.Exponential.BaseCanonical
Set Deco.Exponential.BaseCanonical(Set decomposition)
Devuelve la descomposición aditiva canónica con contribución base obtenida al aplicar la transformación exponencial.
Ejemplos
Para ilustrar estas funciones seguiremos usando la decomposición de partida anterior.
Set DecoTools::Deco.BaseOrdered(deco0, rExp); // [[ 33.115, (total) // 4.482 (base), 2.907, 12.696, 13.030 // ]]
Set DecoTools::Deco.BaseMarginal(deco0, rExp); // [[ 33.115, (total) // 4.482 (base), 13.030, 20.933, 13.030, // -18.359 (synergy) // ]]
Set DecoTools::Deco.BaseFirstIn(deco0, rExp); // [[ 33.115, (total) // 4.482 (base), 2.907, 7.701, 2.907, // 15.118 (synergy) // ]]
Set DecoTools::Deco.BaseCanonical(deco0, rExp); // [[ 33.115, (total) // 4.482 (base), 7.428, 13.777, 7.428 // ]]