Rの欠損データの完全情報最尤法


18

コンテキスト:いくつかの欠損データがある階層回帰。

質問:完全な情報最尤法(FIML)推定を使用して、Rの欠落データに対処するにはどうすればよいですか?推奨するパッケージはありますか?また、一般的な手順は何ですか?オンラインリソースと例も非常に役立ちます。

PS:私は最近Rの使用を開始した社会科学者です。多重代入はオプションですが、MplusのようなプログラムがいかにエレガントにFIMLを使用して欠損データを処理するかが大好きです。残念ながら、現時点では、Mplusは階層回帰のコンテキストでモデルを比較していないようです(その方法を知っている場合はお知らせください!)。Rに似たようなものがあるのだろうか?どうもありがとう!


1
WinBugsを検討しましたか?欠損データを美しく自然な方法で処理します。
マイクダンラベイ

WinBUGSの代替はOpenBUGSまたはSTANです。これらはよりMacに優しいはずです。
マキシム.K 14年

回答:


15

この回答の功績は、この質問をGoogle+のR and Statisticsコミュニティに投稿したときに素晴らしい回答をした@Joshuaにあります。私は単に彼の答えを以下に貼り付けています。

(潜在変数モデリングなしで)回帰を実行するには、引用テキストの後に入力されたメモを読んでください。

利用可能なすべてのデータ(いわゆるFIML)で最尤法を使用して欠損データを処理することは、非常に便利な手法です。ただし、一般的な方法で実装するのが困難になる多くの問題があります。たとえば、年齢、性別、職業タイプからの継続的な結果を予測する単純な線形回帰モデルを検討してください。OLSでは、年齢、性別、職業の分布については心配せず、結果のみを心配します。通常、カテゴリカル予測子の場合、それらはダミーコード化されています(0/1)。MLを使用するには、欠損のあるすべての変数に分布の仮定が必要です。最も簡単なアプローチは、多変量正規(MVN)です。これは、たとえば、変数のタイプ(カテゴリなど)を宣言する方法に出かけない場合、デフォルトでMplusが行うことです。私が挙げた簡単な例では、年齢は普通、性別はベルヌーイ、職種は多項と仮定した方がいいでしょう。実際に持っているのはいくつかのバイナリ変数であるため、後者は扱いにくいですが、それらをベルヌーイとして扱いたくないのです。これは、ダミーのコード化された変数を使用したくないことを意味し、実際のカテゴリ変数を使用してML推定器が多項式を適切に使用できるようにする必要がありますが、これはダミーのコード化プロセスをモデルに組み込む必要があることを意味します、データではありません。再び人生を複雑にします。さらに、連続変数とカテゴリ変数の共同分布を計算するのは簡単ではありません(Mplusでこのような問題に遭遇すると、すぐに壊れて苦労し始めます)。最後に、あなたは本当に理想的には欠落データメカニズムを指定します。SEMスタイル、FIMLでは、すべての変数は基本的に他のすべての変数に依存していますが、これは必ずしも正しいとは限りません。たとえば、性別や職業の種類ではなく、それらの相互作用の関数として年齢が欠落している可能性があります。相互作用は焦点の結果にとって重要ではないかもしれませんが、年齢の欠落について重要である場合、それはまた、対象の実体モデルではなく、欠落データモデルのモデルになければなりません。

lavaanはMVNにMLを使用しますが、現在のところ、カテゴリデータのオプションは限られていると考えています(これもSEMフィールドから来ています。これは標準です)。多重代入は、FIMLの背後にある多くの隠れた仮定(すべての変数の分布仮定や、すべての変数の欠損について仮定された予測モデルなど)を明示的に行うため、最初はエレガントではないようです。ただし、それにより多くの制御が可能になり、各変数の分布について明示的に考えることができます。また、各変数の最適な欠損データメカニズムは重要です。

私は、ベイジアンモデルが欠損データを処理する方法であるとますます確信しています。その理由は、各変数の分布を含めるのに非常に柔軟性があり、さまざまな種類の分布を可能にし、予測子の欠損データによって導入された変動性をモデル全体の推定値に簡単に組み込むことができるためです(これは、複数の代入によるトリックです)その後、何らかの方法で結果を組み合わせる必要があります)。もちろん、これらの方法は最も簡単な方法ではなく、使用するのに多くのトレーニングと時間がかかります。

したがって、それはあなたの質問には本当に答えませんが、欠落を処理するための完全に一般的なフレームワークがトリッキーである理由を少し説明します。共分散行列のsemutilsパッケージでは、下にlavaanを使用してMLを使用しています。分散共分散行列については、とにかく連続変数を使用していると想定しているため、ユーザーが既にデータのMVNを想定していると想定しているためです。

これは、欠損のある変数がすべて連続である場合、lavaan、構造方程式モデリング(SEM)パッケージがRのFIMLに使用するのに適していることを意味します。

最初の質問に戻りましょう。私の意図は、線形回帰を実行する際の欠落に対する魔法の修正をすることでした。行方不明の私の変数はすべて素晴らしく、連続的でした。そこで、次の2つのスタイルで分析を実行しました。

  • 複数の代入による通常の方法
  • FIMLを使用した溶岩を使用したSEMスタイル。

SEMスタイルでリグレッションを行うことで、多くのことを逃していました。両方のスタイルで同様の係数とRの二乗が得られましたが、SEMスタイルでは回帰の有意性テスト(dfを使用した一般的なF値)が得られず、代わりにすべての学位を使い果たしたために役に立たないフィットインデックスが得られました自由の。また、あるモデルのR2が別のモデルよりも大きい場合、その差が有意かどうかを比較する方法を見つけることができませんでした。さらに、通常の方法で回帰を行うと、非常に貴重な回帰の仮定に関する一連のテストにアクセスできます。この問題に関するより詳細な回答については、@ StasKが適切に回答した他の質問を参照しください。

したがって、結論は、溶岩はRのFIMLのまともなパッケージであると思われますが、FIMLの使用は統計的仮定と実行している分析のタイプに依存します。回帰(潜在変数モデリングなし)に関しては、SEMプログラムから除外し、複数の代入を使用することはおそらく賢明な動きです。



-3

欠落したデータ/レコードを処理する主な方法は2つあります。Uは、欠損値を持つ観測の行全体を削除するか、この欠損値を生成する方法を見つけます。最初のアプローチを取ると、大量のデータが失われる可能性があります。2番目のアプローチでは、新しいデータセットのパラメーター推定値が、観測されたデータセットのパラメーター推定値とあまり変わらないように、この欠損データを生成する「賢い」方法を見つける必要があります。

この2番目のアプローチはデータ代入と呼ばれ、それを行うRパッケージがいくつかあります。それらの1つはmclustと呼ばれ、必要な関数はimputeDataと呼ばれます。この関数は、EM(期待値最大化)アルゴリズムを使用して、観測された部分が与えられた場合に、データセットの観測されていない部分のパラメーターを推定します。パラメータが見つかると、新しいデータポイントが生成されます。欠損データ、観測データ、およびデータセット全体の分布の仮定は、ガウス分布であると仮定されます。

この説明があなたがやろうとしていることを達成するのに役立つことを願っています


ありがとう。複数の代入のパッケージは知っていますが、最尤推定を行う比較的簡単な方法があるかどうかを確認したいと思います。
-Sootica

尤度関数は、サンプルxが欠落している場合には定義されません。だから私はあなたが存在しない何かを探しているかもしれないと思う。
ララス

2
欠損データへの最尤アプローチの利用に関する説明については、このペーパーを参照してください(Allison、2012)。OPが記述するものが存在します。
アンディW

2
そして、それについてSASからの何かがあります。 support.sas.com/documentation/cdl/en/statug/63347/HTML/default/...私はR.で何かを見たことがない
ジェレミー・マイルに

@JeremyMilesに感謝します。この質問に答えるのに役立ったものを投稿しました。PS。Andy Fieldで書いたR本はすごい!! :D
Sootica
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.