glmer에서 수렴 경고의 의미 “설명을 위해 Powell에 문의하십시오”라는 정보를

내가 사용하고 glmer으로부터 기능을 lme4R의 패키지, 그리고 내가 사용하고 bobyqa최적화 (내 경우에는 기본 즉). 경고 메시지가 표시되며 그 의미가 무엇인지 궁금합니다.

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

“신뢰 영역 단계에서 q를 줄이는 데 실패했습니다.”를 검색했습니다. minqa 패키지 에서 “설명을 위해 Powell에 문의하십시오”라는 정보를 찾았습니다 . 나는 (당신이 원한다면 당신도 할 수 있습니다! 아래의 참고 문헌과 링크를 참조하십시오), 나는 이해하지 못합니다. 사실, 나는 q를 줄이는 것에 대해 아무것도 찾지 못했습니다.

MJD Powell (2007) “미분없는 제약없는 최소화를위한 NEWUOA 개발”, Cambridge University, 응용 수학 및 이론 물리학과, 수치 분석 그룹, 보고서 NA2007 / 05, http://www.damtp.cam.ac.uk/ user / na / NA_papers / NA2007_05.pdf .

MJD Powell (2009), “미분없는 구속 구속 최적화를위한 BOBYQA 알고리즘”, 보고서 번호 DAMTP 2009 / NA06, 영국 케임브리지 대학교 수학 과학 센터. http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf .

추신 내가 최적화를 변경할 수 있다는 것을 알고 경고 나 오류없이 출력을 얻을 수 있는지 확인할 것입니다. Ben Bolker의견 / 답변에 따라 가능한 경우 그라디언트 및 Hessian도 확인합니다 . 나는 from을 사용하고 glmer있으며 Ben의 대답이 추가 땜질없이 작동하는지 확실하지 않지만 컴퓨터가 수행중인 작업을 마친 후에는 계속 노력할 것입니다.dredgeMuMIn

최신 정보

아래 Bolker의 의견에 따라 FORTRAN 코드를 살펴보기 시작했습니다 (보기에 관심이 있지만 다운로드하지 않는 사람을위한 코드는 다음과 같습니다 ). “430”이 코드의 bobyqb.f 부분에 나타납니다. “430”또는 “Q 줄이기”를 검색하여 관련 코드를 찾으십시오.

이것은 FORTRAN 코드와의 첫 만남이지만 코드에서 다음 조건이 충족되면 경고를 생성한다고 말합니다. NTRITS> 0, VQUAD> = 0, IPRINT> 0. “정수 NTRITS는”trust region “숫자로 설정됩니다. 마지막 “대체”반복 이후에 발생한 반복. ” VQUAD값이 여러 다른 변수에 의존하는 것처럼 보이므로 그 값이 다른 변수에 의존하는 것으로 보이므로 아직 그 중요성에 대해 명확하지 않다. bobyqa.f : “IPRINT의 가치는 0, 1, 2 또는 3으로 설정하여 인쇄량을 제어합니다. 특히 IPRINT = 0이면 출력이없고 IPRINT = 1이면 반환시에만 출력됩니다. “

따라서, 과제는 VQUAD> = 0 의 중요성을 파악 하고, 아마도 / 언제 IPRINT> 0이 되었는지 이해하는 것입니다. 나는 종이로 돌아가서 수학을 보거나 적어도 그 상징적 표현은 나에게 약간의 장벽입니다. 누군가가 알고리즘에 대해 알고 있거나 그것에 대해 배우고 싶지 않다면, 나는 그것이 무엇을 이해할 때까지 종이, 코드 및 인터넷 사이를왔다 갔다하면서 경고에 대한 이해를 반복적으로 증가시켜야한다고 생각합니다. 방법.



답변

f(x)

x케이

케이

  • Δk


  • f(x)

    x=xk

    Q(x)


  • sk

    Qk(xk+sk)

    ||sk||≤Δk


  • sk

    xk+1=xk+s케이

  • 그렇지 않으면 모델을 수정하고 다시 시도하십시오.

s케이

의 가치를 이해하려면 VQUAD먼저 몇 가지 다른 변수를 이해해야합니다. 다행히의 선언 바로 아래에 좋은 의견이 SUBROUTINE BOBYQB있습니다. 두드러진 변수는 다음과 같습니다.

  • GOPT, 모델의 기울기
  • HQ, 모델의 헤 시안
  • D
    s케이

410을 약간 넘어 서면을 볼 수 DO 410 J=1,N있습니다. 이것은 시행 단계를 사용하여 모델에 의해 예측 된 변화를 평가하는 for 루프 (및 중첩 된 for 루프)를 시작합니다 D. 의 예측 된 변화를 누적합니다 VQUAD. for-loop의 첫 번째 부분은 1 차 항을 평가하고 중첩 된 for-loop는 2 차 항을 평가합니다. 다음과 같이 루프가 들여 쓰기 된 경우 읽기가 더 쉬울 것입니다.

    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

다른 매개 변수를 모델에 통합하기위한 또 다른 for-loop가 있습니다. 나는 이것을 완전히 이해하지 못한다는 것을 인정해야한다. 내 최선의 추측은 모델을 만드는 방법에 따라 다르다는 것이다.

이 모든 것이 끝날 VQUAD때 모델에 의해 예측 된 목적 함수의 변화를 유지합니다. VQUAD음수가 아닌 경우 , 그것은 나쁘다. 이제이 특정 솔버는 대체 단계 계산 (아마도 라인 검색)을 사용할 NTRITS수 있습니다. 따라서 430의 논리는 “마지막 반복이 대체 단계 계산을 사용하고 모델이 감소를 IPRINT> AND 0으로 예측하지 않으면 경고 메시지를 인쇄합니다”라고 말합니다. 값에 관계없이 솔버가 종료됩니다 IPRINT.

로 말하면 IPRINT, 그 값은 BOBYQA호출 함수 에 의해 전달됩니다 . 이 경우, R 루틴은 호출 기능입니다. 거기에verbose 에 대한 매개 변수 glmer– 나는 같은 값이 전달되는 달러짜리 것이다 BOBYQA. verbose0으로 설정 하면 경고가 표시되지 않을 수 있습니다. 그러나 그것은 물론 후드 아래에서 일어나는 일을 바꾸지 않을 것입니다.