Significado de una advertencia de convergencia en glmer

16

Estoy usando la glmerfunción del lme4paquete en R, y estoy usando el bobyqaoptimizador (es decir, el predeterminado en mi caso). Recibo una advertencia y tengo curiosidad por saber qué significa.

Warning message:
In optwrap(optimizer, devfun, start, rho$lower, control = control,  :
  convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q

Busqué "un paso de región de confianza no pudo reducir q". Encontré información en el paquete minqa , que decía "Consulte a Powell para obtener una explicación". Lo hice (¡tú también puedes, si quieres! Ver las referencias y enlaces a ellos a continuación), pero no lo entiendo. De hecho, no pude encontrar nada sobre la reducción de q.

MJD Powell (2007) "Desarrollos de NEWUOA para la minimización sin restricciones sin derivados", Universidad de Cambridge, Departamento de Matemática Aplicada y Física Teórica, Grupo de Análisis Numérico, Informe NA2007 / 05, http://www.damtp.cam.ac.uk/ usuario / na / NA_papers / NA2007_05.pdf .

MJD Powell (2009), "El algoritmo BOBYQA para la optimización restringida limitada sin derivados", Informe No. DAMTP 2009 / NA06, Centro de Ciencias Matemáticas, Universidad de Cambridge, Reino Unido. http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf .

PD: Sé que puedo cambiar el optimizador, y veré si puedo obtener resultados sin advertencias o errores. También puedo comprobar el gradiente y el Hessian si puedo, según un comentario / respuesta de Ben Bolker . Lo estoy usando desde glmeradentro y no estoy seguro de si la respuesta de Ben funcionará sin algunos ajustes adicionales, pero trabajaré en ello una vez que mi computadora termine lo que está haciendo, de todos modos, estoy divagando.dredgeMuMIn

Actualizar

Según el comentario del Dr. Bolker a continuación, comencé a buscar el código FORTRAN ( Aquí está el código para cualquier persona interesada en buscarlo pero no descargarlo ). "430" aparece en la parte bobyqb.f del código. Simplemente busque "430" o "reduzca Q" para encontrar el código relevante.

Este es mi primer encuentro con el código FORTRAN, pero creo que el código dice que si se cumplen las siguientes condiciones, produzca la advertencia: NTRITS> 0, VQUAD> = 0, IPRINT> 0. "El NTRITS entero se establece en el número" región de confianza " iteraciones que han ocurrido desde la última iteración "alternativa". VQUADaparece varias veces, y aún no tengo claro su importancia, ya que su valor parece depender de una variedad de otras variables, cuyos valores a veces dependen de otras variables. De bobyqa.f: "El valor de IPRINT debería ser establecido en 0, 1, 2 o 3, que controla la cantidad de impresión. Específicamente, no hay salida si IPRINT = 0 y solo se muestra en la devolución si IPRINT = 1 ".

Entonces, parece que la tarea es descubrir la importancia de VQUADser> = 0 y, tal vez, entender cómo / cuándo se IPRINTconvirtió en> 0. Tendré que volver al papel para echar un vistazo, pero las matemáticas o menos su expresión simbólica, es un poco una barrera para mí. A menos que alguien conozca el algoritmo o tenga el deseo de aprender sobre él, creo que tendré que aumentar de manera iterativa mi comprensión de la advertencia yendo y viniendo entre los documentos, el código e Internet hasta que entienda qué es. medio.

Jota
fuente
3
Creo que esta pregunta puede estar en el tema para CV b / c, parece tratarse de entender las ideas en lugar de ayudar con R per se.
gung - Restablece a Monica
No estoy seguro de tener mucho que sugerir en este caso más allá de ir paso a paso a través de los documentos y el código FORTRAN (que se incluye en el srcdirectorio de cran.r-project.org/src/contrib/minqa_1. 2.3.tar.gz ) y ver exactamente lo que sucede cuando se activa este error (código de error 430 en el código) ...
Ben Bolker
1
Leyendo rápidamente el papel, creo que la advertencia indica que el optimizador no puede encontrar una dirección en la que disminuya la aproximación cuadrática, Q, a la función que desea minimizar, F. Es decir, el optimizador está en un punto que probablemente no sea óptimo, pero no sabe qué camino tomar para mejorar el objetivo. Por lo tanto, está atascado.
Sven
1
¿Cuál de los dos documentos leyó, y aproximadamente dónde encontró esta información? (También lo hojeé pero no pude hacer la correspondencia entre el papel y el código tan fácilmente ...)
Ben Bolker
Leí el periódico BOBYQA. Revisé la primera mitad en aproximadamente 5 minutos para tener una idea general de lo que van a hacer y qué es Q. Realmente no puedo apuntar a una página específica.
Sven

Respuestas:

13

F(X)Xkk

  • Δk
  • F(X)X=XkQ(X)
  • skQk(Xk+sk)El |El |skEl |El |Δk
  • skXk+1=Xk+sk
  • De lo contrario, refine su modelo e intente nuevamente

sk

Para entender el valor de VQUAD, primero tenemos que entender algunas otras variables. Afortunadamente, hay buenos comentarios justo debajo de la declaración de SUBROUTINE BOBYQB. Las variables más destacadas son:

  • GOPT, el gradiente del modelo
  • HQ, la arpillera de la modelo
  • Dsk

Comenzando unas pocas líneas por encima de 410, verás DO 410 J=1,N. Esto comienza un ciclo for (y un ciclo for anidado) que evalúa el cambio predicho por el modelo utilizando el paso de prueba D. Se acumula el cambio previsto en VQUAD. La primera parte del ciclo for evalúa los términos de primer orden y el ciclo for anidado evalúa los términos de segundo orden. Probablemente sería más fácil de leer si los bucles estuvieran sangrados, como este:

    DO 410 J=1,N
        VQUAD=VQUAD+D(J)*GOPT(J)
        DO 410 I=1,J
            IH=IH+1
            TEMP=D(I)*D(J)
            IF (I .EQ. J) TEMP=HALF*TEMP
410         VQUAD=VQUAD+HQ(IH)*TEMP

Hay otro ciclo for después de esto para incorporar otros parámetros al modelo. Tengo que admitir que no entiendo completamente esto; mi mejor suposición es que es particular de cómo construyen el modelo.

Al final de todo esto, se VQUADmantiene el cambio en la función objetivo predicho por el modelo. Entonces, si VQUADno es negativo, eso es malo. Ahora este solucionador particular puede usar un cálculo alternativo de pasos (probablemente una búsqueda de línea), que es donde NTRITSentra en juego. Entonces, la lógica en 430 dice: "Si la última iteración usó el cálculo alternativo de pasos Y el modelo no predice una disminución YIPRINT > 0, imprima el mensaje de advertencia". Tenga en cuenta que el solucionador terminará independientemente del valor de IPRINT.

Hablando de IPRINTeso, BOBYQAla función de llamada pasa ese valor . En este caso, su rutina R es la función de llamada. Hay un verboseparámetro para glmer: sería diez centavos en dólares a los que se pasa el mismo valor BOBYQA. Intente configurar verbosea 0 y probablemente no verá la advertencia. Pero no cambiará lo que sucede debajo del capó, por supuesto.

Bill Woessner
fuente
1
esto es muy útil; No creo que vaya a hacerlo mejor, otorgando recompensas ...
Ben Bolker
@BenBolker. Entonces , ¿ debería preocuparme lo que está sucediendo aquí, o esto es realmente solo una molestia en el código? (En otras palabras, ¿significa esta advertencia que mis resultados no son válidos?)
theforestecologist
1
El consejo general en este caso es lo que se indica en ?lme4::convergence: antes de una evaluación exhaustiva / detallada del procedimiento de optimización, lo mejor es comparar los resultados de diferentes optimizadores.
Ben Bolker