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

Last modified 13 years ago

#79 accepted task

Testeo de informacion a priori coherente: Comprobación de combinaciones lineales

Reported by: lmperez Owned by: Pedro Gea
Priority: critical Milestone: Dev.1 Diagnosis
Component: Tests Keywords:
Cc:

Description (last modified by Pedro Gea)

Comprobar si existe alguna combinación lineal entre parámetros de un nodo observacional, teniendo en cuenta si éste tiene o no una distribución a priori y/o está dentro de una jerarquía. Y además debe informar cuál es la combinación lineal.

Se adjuntan funciones.tol las siete funciones que hacen este proceso en BSRLayer, una llama a las otras, pero usan sets de información que no existen en MMS, si decidís usarlas como guía preguntadme cualquier duda que tengáis.
Al final, si detecta una combinación lineal, escribe los parámetros que la forman en un fichero log, en forma de query.

Una cosa a tener en cuenta. El proceso en general funcionaba en torno a la función SVD de tol, sin embargo, como esta función no es exacta sino aproximada, se probaron los diferentes métodos: Golub_Reinsch, Jacobi y Sparse. De todos ellos, el más fiable fué el primero. El Sparse era muy rápido cuando las matrices a factorizar tenían densidades pequeñas (<0.01), y el Jacobi mostraba una salto de nivel muy claro entre los autovalores de las variables que no son combinaciones lineales de los que sí lo son. Sin embargo éstos dos últimos fallaban a veces, detectando combinaciones lineales donde no las había o al revés. Por defecto se decidió usar Golub_Reinsch con un redondeo en 10-10.

Attachments (2)

funciones.tol (9.6 KB) - added by Pedro Gea 15 years ago.
funLinCom.tol (9.0 KB) - added by irobles 15 years ago.

Download all attachments as: .zip

Change History (17)

comment:1 Changed 15 years ago by lmperez

Component: Definición de ModelosGeneral
Milestone: Strategy & Adapter 0.5
Owner: changed from Pedro Gea to josp
Priority: criticalmajor

comment:2 Changed 15 years ago by lmperez

Priority: majorcritical

Se ha vuelto a solicitar la necesidad de tener una herramienta para
testear los inputs: #122.

comment:3 Changed 15 years ago by Pedro Gea

Description: modified (diff)
Milestone: Release 0.5Release 0.6
version: 0.50.6

comment:4 Changed 15 years ago by irobles

Buenos días,

lo de las combinaciones lineales, en algunos proyectos hemos estado haciendo alguna cosa para ir comprobandolas, pues ahora mismo el unico error que da es el de CholeskiSolve, y hemos estado haciendo alguna cosa para que nos indique cuales son los inputs problematicos, pero al final el problema es que cada proyecto tendra sus funciones, por eso pedimos que esten centralizadas en MMS.

Si quereis os puedo poner ejemplos de funciones que son las que ha puesto Luis arriba pero adaptadas a MMS, por si os sirven de ayuda. Si es asi pedirmelas.

De todas formas como entiendo que tener bien controladas las combinaciones lineales es un trabajo que puede ser complicado, lo que si os pido es que nos vayais faciltando comprobaciones como la indicada en el ticket 122.

Lo recuerdo aqui

Cuando un input es nulo o no está definido en el rango temporal de un
output al estimarlo devuelve un error de combinación lineal. Se podría
incorporar un proceso chequease los inputs y eliminase estas
posibilidades?

También indicar que lo indicado arriba muchas veces nos pasa a los analistas al meter un input y despues diferenciarlo, o retardarlo. Si nos da un mensaje de Warning diciendo cual es el input problematico nos ayudaria mucho.

Gracias

comment:5 Changed 15 years ago by Pedro Gea

Component: GeneralTests
Description: modified (diff)
Owner: changed from josp to Pedro Gea
Priority: criticalblocker
Status: newaccepted

Changed 15 years ago by Pedro Gea

Attachment: funciones.tol added

comment:6 Changed 15 years ago by Pedro Gea

Description: modified (diff)

comment:7 Changed 15 years ago by Pedro Gea

Description: modified (diff)

Changed 15 years ago by irobles

Attachment: funLinCom.tol added

comment:8 Changed 15 years ago by Pedro Gea

(In [1866]) Se implementan métodos de "test" para algunos objetos del módulo de modelos:

  • Un test de independencia de un parámetro (un m-elemento en general) que nos permite saber si tiene asociada información a priori (un prior o una jerarquía). El método ::TestIndependence devuelve 1 si es independiente (no tiene información a priori) y 0 en otro caso.
  • Un test de regularidad de un término explicativo que nos permite saber si un término explicativo es válido para la estimación. El método ::TestRegularity devuelve 1 si el término es regular y 0 si es completamente singular. El test se realiza para cada subtérmino lineal de modo que un término explicativo de tipo omega devuelve el promedio de los test para sus parámetros lineales (con sus subinputs retardados convenientemente). Un término es regular (=1.0) sólo si todos sus subtérminos lo son.

Refs #122, #79

comment:9 Changed 15 years ago by mafernandez

(In [1923]) Refs #79

Se introduce el método CheckMulticollinearity en la clase @Submodel. Mediante el algoritmo SVD se determinará que inputs correlacionan a nivel de submodelo.

comment:10 Changed 15 years ago by Pedro Gea

(In [1943]) Se amplía el método de chequeo de la multicolinealidad para submodelos con matrices.
Se modifica la función SVDProcedure para usar la matriz cuadrada A'A en lugar de AA'.
Refs #79

comment:11 Changed 14 years ago by Pedro Gea

Priority: blockercritical

Véase también el problema de multicolinealidad que plantea #428.

comment:12 Changed 14 years ago by Pedro Gea

Véase #534

comment:13 Changed 14 years ago by Pedro Gea

comment:14 Changed 14 years ago by Pedro Gea

(In [2366]) Se modifican dos métodos de acuerdo a los convenios descritos en #553.
El método Real <mObjectPrior>::TestRegularity() pasa a llamarse Real <mObjectPrior>::IsIndependent().
El método Real <expTerm>::TestRegularity() pasa a Set <expTerm>::CheckRegularity(showMode) y se crea un Set <submodel>::CheckExpTerms.Regularity(showMode) con un estilo similar a los métodos CheckConstraint y CheckMCombinations.Constraint.
El método {{CheckExpTerms.Regularity}}} es un mecanismo alternativo aCheckMulticollinearity para detectar los parámetros cuyo input es nulo.
Provisionalmente se dejan versiones obsoletas advirtiendo de su desaparición.
Refs #553, #79

comment:15 Changed 13 years ago by Claudia Escalonilla

Milestone: Development 1ADev.1 Diagnosis
sensitive: 0
Note: See TracTickets for help on using tickets.