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.

Changes between Version 5 and Version 6 of OfficialTolArchiveNetworkBysInfDiag


Ignore:
Timestamp:
Oct 24, 2011, 8:48:37 AM (14 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OfficialTolArchiveNetworkBysInfDiag

    v5 v6  
    4747|| [http://www.google.es/url?sa=t&source=web&cd=2&ved=0CDUQFjAB&url=http%3A%2F%2Fwww.ism.ac.jp%2Feditsec%2Faism%2Fpdf%2F061_1_0235.pdf&ei=tH6NTsqENPPE4gSD3sSGAQ&usg=AFQjCNEHCQEM5Qc8BZSgU2v9Es6Il7YB4w&sig2=WtNhwn3_dy_wTNCcnpn6YQ Ozturk and Balakrishnan] || Exact two-sample nonparametric test for quantile difference between two populations based on ranked set samples ||
    4848|| [http://www.ge.infn.it/statisticaltoolkit/gof/deployment/userdoc/statistics/documents/Kuiper.ps Kuiper] || Kuiper two sample test ||
     49|| [http://www.google.es/url?sa=t&rct=j&q=a%20c%2B%2B%20program%20for%20the%20cram%C2%B4er-von%20mises&source=web&cd=2&ved=0CCwQFjAB&url=http%3A%2F%2Fwww.jstatsoft.org%2Fv17%2Fi08%2Fpaper&ei=0B2lTpCkDZGWOvvY2K4N&usg=AFQjCNFaDAewPd7AcY7N3I8dmtQZAPMZIQ&sig2=ySS0WwmbqcButNNDMTDByQ Cramér-von Mises] || A C++ Program for the Cramér-von Mises Two-Sample Test ||
    4950|| [http://www.ruhr-uni-bochum.de/imperia/md/content/mathematik3/publications/dewagvol7.pdf Dette-Wagener-Volgushev] || Nonparametric comparison of quantile curves: a stochastic process approach ||
    5051|| [http://www.stat.tamu.edu/~eparzen/smethmin.pdf parzen] || Statistical methods mining and nonparametric quantile domain data analysis ||
     
    5253|| [http://www.alglib.net/hypothesistesting/mannwhitneyu.php Mann-Whitney U-test] || Test no paramétrico para la comparación de medianas de muestras de tamaños arbitrarios, sustitutivo del test de la t-student para muestras normales ||
    5354
    54 Éste último test en principio sólo nos sirve para comparar las medianas pero tiene la ventaja de
    55 ser muy rápido y de que ya existe en TOL como la función [wiki:TolGuiaDelUsuarioSet#FunciónAlgLib.MannWhitneyUtest AlgLib.MannWhitneyUtest].
    56 Podría usarse como filtro inicial a cualquier otro test de comparación de muestras, pues si las
    57 medianas son significativamente distintas es evidente que las distribuciones no pueden ser las
    58 mismas. Pero además de eso puede usar de forma recursiva binaria del siguiente modo:
     55La principal conclusión tras la lectura de estos documentos es que la comparación no paramétrica de distribuciones es un problema tremendamente complejo desde el punto de vista estadísticoy todavía más en lo que se refiere a su implementación. De hecho sólo he encontrado un método libre implementado en C++, el [http://www.google.es/url?sa=t&rct=j&q=a%20c%2B%2B%20program%20for%20the%20cram%C2%B4er-von%20mises&source=web&cd=2&ved=0CCwQFjAB&url=http%3A%2F%2Fwww.jstatsoft.org%2Fv17%2Fi08%2Fpaper&ei=0B2lTpCkDZGWOvvY2K4N&usg=AFQjCNFaDAewPd7AcY7N3I8dmtQZAPMZIQ&sig2=ySS0WwmbqcButNNDMTDByQ Cramér-von Mises], que es realmente bastante robusto pero tremendamente lento para cadenas de apenas unos cientos de muestras.
     56El [http://www.alglib.net/hypothesistesting/mannwhitneyu.php Mann-Whitney U-test]) sí que es rapidísimo pero en principio sólo nos sirve para comparar las medianas.
     57Tiene la ventaja añadida de que ya existe en TOL como la función [wiki:TolGuiaDelUsuarioSet#FunciónAlgLib.MannWhitneyUtest AlgLib.MannWhitneyUtest].
     58Podría usarse como filtro inicial a cualquier otro test de comparación de muestras, pues si las medianas son significativamente distintas es evidente que las distribuciones no pueden ser las mismas.
     59Pero además de eso puede usar de una forma sencilla, aunque un tanto heurística, para comprobar que las muestras se parecen no sólo en los valores centrales sino en todo el rango de valores posibles
    5960
    60  1. Se calcula el test Mann-Whitney U-test sobre las muestras actuales
    61   1. Si se rechaza el test se devuelve falso.
    62   1. Si se sobrepasa el nivel máximo de recursividad se devuelve cierto
    63   1. Si el tamaño de alguna de las muestras es menor que el mínimo requerido se devuelve cierto
    64   1. En cualquier otro caso se divide cada muestra en dos partes, la primera con los valores
    65      superiores a la mediana y la otra con los inferiores.
    66    1. Se llama recursivamente al paso 1 con las muestras superiores a la mediana.
     61 1. Se crea el vector de muestra conjunta mediante la simple concatenación de las muestras a chequear.
     62 1. Se divide el rango de valores de la muestra conjunta en un número dado no, más bien pequeño, de partes equi-frecuentes.
     63 1. En cada intervalo se calcula el test Mann-Whitney U-test sobre las muestras actuales censuradas en dicho intervalo.
     64 1. Si en cualquiera de los intervalos se supera el nivel de significación se rechaza la hipótesis nula.
     65
     66Habría que estudiar cómo se comporta en casos reales y simulados a ver si es posible parametrizarlo para que resulte eficaz en el ámbito de nuestros objetivos.
     67
     68== Mecanismo de generación de puntos sobre-dispersos ==
     69
     70Lo primero que hace falta para poder simular varias cadenas es generar unos cuantos puntos de origen de la cadena lo más dispersos que sea posible dentro de la región factible. El problema es que para poder generar unos pocos puntos dispersos sin favorecer demasiado la zona cercana al punto factible de origen es necesario generar una muestra más o menos uniforme o sobre-disersa que tienda a recorrer todo la región factible y eso no es fácil hacerlo generando sólo unos pocos puntos, más bien hay que generar un paseo aleatorio más o menos largo.
     71
     72En https://www.tol-project.org/ticket/1306#comment:14 se presenta el algoritmo actualmente usado que funciona estupendamente con pocas dimensiones, pero que hay que mejorar cunado aumentan las variables porque se atasca un poco y hay que generar muchos miles de muestras para recorrer medianamente la región factible. Tampoco es que tarde mucho en generar porque sólo tiene que evaluar si el punto es factible, aquí no hay densidades ni Gibbs ni nada de eso, algún producto matriz x vector y cosas así bastante lineales. Comparado con lo que cuesta simular luego la distribución a posteriori no es demasiado, aunque lógicamente sobrecarga la habrá.
     73
     74Se trata de un algoritmo completamente genérico pero implica la existencia de una función {{{g(x):R^n->R^m}}} tal que la región factible quede definida por las inecuaciones {{{g(x)<=0}}}. Tengo algunas ideas sobre cómo se puede mejorar el rendimiento
     75
     76== Integración de métodos de evaluación de la factibilidad en BSR ==
     77
     78Para poder aplicar el algoritmo del punto anterior, o cualquier variante futura del mismo, es necesario introducir en BSR un método que me devuelva g(x) para un punto arbitrario x. Como BSR maneja un modelo dividido en bloques de Gibbs, es cada uno de los bloques el que es capaz de evaluar su parte correspondiente de {{{g(x)}}}, a la que podemos llamar {{{g[i](x[i])}}} para el bloque i-ésimo. Luego el master de BSR se encarga de dividir la entrada x en los bloques {{{x[i]}}} y de concatenar los {{{g[i]}}} de salida.
     79
     80Esta parte está hecha aunque hace falta mucho chequeo para darlo por bueno, tanto en robustez como en eficacia, especialmente en los bloques no lineales definidos por el usuario que es la parte más complicada y a lo peor es necesario que el filtro incorpore algún método extra para mayor eficacia.
     81
     82Hay que tener en cuenta que la generación de múltiples cadenas es incompatible con algunas características de BSR
     83 1. La continuación de cadenas es evidentemente imposible si queremos forzar distintos puntos de inicio[[BR]]
     84{{{
     85#!java
     86Real config::do.resume == 0;
     87}}}
     88 1. La simulación parcial no sería en principio incompatible al 100% pero la implementación de los métodos de restricción
     89    {{{g(x)}}} serían demasiado complicados de implementar pues dependerían de que partes de {{{x}}} están fijadas y cuáles
     90    son libres. Por otra parte no es demasiado problema pues la simulación parcial se usa para reestimar modelos estables o
     91    generar previsiones, por lo que se da por supuesto que ya no hay problemas de convergencia.
     92
     93== Generación de múltiples cadenas en BSR ==
     94
     95Hasta ahora los pasos para la simulación con BSR eran
     96 1. Crear la definición del modelo como un {{{Struct @BSR.ModelDef modelDef}}}
     97 1. Parametrizar la configuración como una instancia de {{{BysMcmc::@Config config}}}
     98 1. Crear el gestor del modelo BSR como una instancia de la clase {{{BysMcmc::@Cycler cycler}}}
     99 1. Crear el gestor de la estimación BSR como una instancia de la clase {{{BysMcmc::@Estim estim}}}
     100 1. Generar la cadena MCMC llamando al método {{{estim::Run}}}
     101Si queremos generar múltiples cadenas, los 4 primeros pasos siguen siendo los mismos, salvo que en el paso 2 hay que guardar una copia de config para recuperar la configuración tras el proceso de mezcla
     102 1. Generar unos pocos puntos iniciales muy alejados entre sí
     103  1. Resetear el modelo llamando al método {{{cycler::Initialize}}}
     104  1. Generar un paseo aleatorio sobre-disperso en la región factible, es decir, con más probabilidad cerca de la frontera que en el interior.
     105  1. Extraer unos pocos puntos iniciales lo más alejados entre sí que sea posible partiendo del centro de masas.
     106  1. Cambiar los parámetros de configuración de las estimaciones locales para que
     107   1. no haga ''burn-in'' ni ''thinning'' estándar[[BR]]
     108{{{
     109#!java
     110Real config::mcmc.burnin    :=  0;
     111Real config::mcmc.thinning  :=  0;
     112}}}
     113   1. no haga la diagnosis ni los informes de resultados usuales[[BR]]
     114{{{
     115#!java
     116Real config::do.report          :=  False;
     117Real config::do.eval            :=  False;
     118Real config::do.linear.effects  :=  False;
     119}}}
     120 1. Para cada punto inicial {{{x0[k]}}} generar de forma independiente una cadena MCMC  de la distribución a posteriori
     121  1. Resetear el modelo llamando al método cycler::Initialize
     122  1. Asignar el punto inicial con la sentencia {{{Real cycler::_.sampler::setStore(x0[k]);}}}
     123 1. Crear el k-esimo gestor de la estimación BSR como una instancia local de la clase BysMcmc::@Estim local_estim
     124 1. Generar la k-esima cadena local MCMC llamando al método {{{local_estim::Run}}}
     125 1. Devolver la cadena llamando a {{{ cycler::loadFullMcmc(?) }}}
     126
     127== Generación en paralelo con BSR ==
    67128
    68129
    69130
    70