glmerの収束警告の意味


16

R glmerlme4パッケージの関数を使用しており、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パッケージで情報を見つけました。私はやりました(もし望むなら、あなたもできます!以下への参照とリンクを見てください)が、理解できません。実際、qを減らすことに関して何も見つけることができませんでした。

MJDパウエル(2007)「派生物のない制約のない最小化のためのNEWUOAの開発」、ケンブリッジ大学、応用数学および理論物理学、数値解析グループ、レポートNA2007 / 05、http: //www.damtp.cam.ac.uk/ ユーザー/ NA / NA_papers / NA2007_05.pdf

MJDパウエル(2009)、「デリバティブを使用しないバインド制約付き最適化のためのBOBYQAアルゴリズム」、レポート番号DAMTP 2009 / NA06、英国ケンブリッジ大学数学科学センター http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf

Psオプティマイザーを変更できることはわかっているので、警告やエラーなしで出力を取得できるかどうかを確認します。Ben Bolkerのコメント/回答に従って、可能な場合は勾配とヘッセ行列もチェックします。私はfrom glmer内で使用しています。ベンの答えが追加の調整なしで機能するかどうかはわかりませんが、コンピューターがそれを行っていることを完了したら、それで作業します、とにかく、私は脱線します。dredgeMuMIn

更新

以下のBolker博士のコメントに従って、私はFORTRANコードを調べ始めました(これは、ダウンロードするのではなく、見ることに興味がある人のためのコードです)コードのbobyqb.f部分に「430」が表示されます。「430」または「Qを減らす」を検索して、関連するコードを見つけます。

これはFORTRANコードとの最初の出会いですが、次の条件が満たされた場合に警告が生成されるとコードに書かれていると思います:NTRITS> 0、VQUAD> = 0、IPRINT> 0。最後の「代替」反復以降に発生した反復。VQUADが何度か表示されますが、その値はさまざまな他の変数に依存しているように見えるため、その重要性についてはまだ明確ではありません。その値は他の変数に依存する場合があります。 0、1、2、または3に設定して、印刷量を制御します。具体的には、IPRINT = 0の場合は出力がなく、IPRINT = 1の場合は戻り時にのみ出力されます。

だから、タスクはVQUAD> = 0 であることの重要性を理解し、おそらく、どのように/ IPRINTが> 0になったのかを理解することであると思われます。私は論文に戻って見てみましょう。少なくともその象徴的な表現は、私にとってちょっとした障壁です。誰かがアルゴリズムについて知っているか、それについて学びたいという願望がない限り、私はそれが何であるかを理解するまで、論文、コード、およびインターネットを行き来することによって、警告の理解を反復的に高めなければならないと思う手段。


3
この質問はCV b / cのトピックに当てはまると思いますが、R自体を助けるのではなく、アイデアを理解することについてのようです。
GUNG -復活モニカ

この場合、論文とFORTRANコード(cran.r-project.org/src/contrib/minqa_1srcディレクトリに含まれています)を少しずつ調べる以外に、提案することがたくさんあるかどうかはわかりません。 2.3.tar.gz)およびこのエラー(コード内のエラーコード430)がトリガーされたときに何が起こっているかを正確に確認します...
ベンボルカー

1
すぐに論文をざっと読むと、警告は、オプティマイザーが、最小化する関数Fに対する2次近似Qが減少する方向を見つけることができないことを示していると思います。つまり、オプティマイザは最適ではない可能性が最も高い時点にありますが、目的を改善するための方法はわかりません。したがって、スタックしています。
スヴェン

1
2つの論文のうち、どちらをざっと読みましたか。この情報はどこで見つけましたか?(私も
ざっと目を通しましたが

BOBYQAの論文を読みました。前半を5分ほどかけて、彼らが何をしているのか、そしてQが何であるのかについての幅広いアイデアを得るために行きました。特定のページを実際に指すことはできません。
スベン

回答:


13

fバツバツkk

  • k
  • でモデルを作成します。と呼びます。x = x k Q x fバツバツ=バツkQバツ
  • 制約の対象となるを最小化するステップを見つけますQ kx k + s k| | s k | | Δ KskQkバツk+sk||sk||k
  • が「十分」であれば、x k + 1 = x k + s kskバツk+1=バツk+sk
  • そうでない場合は、モデルを改良して再試行してください

が「十分」であるかどうかを判断する方法の1つは、モデルによって予測された減少を目的関数の実際の減少と比較することです。これは、430の後のコード部分が行うことです。ただし、その前に、モデルがAT ALLの減少を予測するかどうかを確認するための簡単な健全性チェックがあります。そして、それが430で起こっていることです。sk

の値を理解するにはVQUAD、まず他のいくつかの変数を理解する必要があります。幸いなことに、の宣言のすぐ下に良いコメントがありますSUBROUTINE BOBYQB。顕著な変数は次のとおりです。

  • GOPT、モデルの勾配
  • HQ、モデルのヘッセ行列
  • D、試用段階(上記のます)sk

410を超える数行から始まるが表示されDO 410 J=1,Nます。これにより、試行ステップを使用してモデルによって予測された変化を評価するforループ(およびネストされたforループ)が開始されDます。の予測される変化を蓄積しVQUADます。forループの最初の部分は1次の項を評価し、ネストされたforループは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ループがあります。私はこれを完全に理解していないことを認めざるを得ません-私の最良の推測は、彼らがどのようにモデルを構築するかということです。

このすべての最後にVQUAD、モデルによって予測された目的関数の変化を保持します。がVQUAD負でない場合、それは悪いことです。この特定のソルバーは、代替ステップ計算(おそらくライン検索)を使用できますNTRITS。したがって、430のロジックは、「最後の反復で代替ステップ計算を使用し、かつモデルが減少AND IPRINT> 0を予測しない場合、警告メッセージを出力します」と言っています。ソルバーはの値に関係なく終了することに注意してくださいIPRINT

と言えばIPRINT、その値はBOBYQA呼び出し元の関数によって渡されます。この場合、Rルーチンは呼び出し関数です。verboseパラメータがありますglmer-同じ値がに渡されるドルに10セント硬貨になりますBOBYQAverbose0に設定すると、おそらく警告は表示されません。しかし、それはもちろん、内部で起こっていることを変えません。


1
これは非常に役立ちます。私は...奨励金を授与、よりよいするつもりですとは思わない
ベンBolker

@BenBolker。だから、必要がある私はここで何が起こっているかを心配する、またはこれは実際のコードでは、単に迷惑なのですか?(言い換えれば、この警告は私の結果が有効でないことを意味しますか?)
森林生態学者

1
この場合の一般的なアドバイス?lme4::convergenceは、最適化手順の網羅的/詳細な評価を除いて、さまざまなオプティマイザーの結果を比較することです。
ベンボルカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.