- 欠損値の種類と、対応方法についてメモ
- 大体、[欠損データ分析 (missing data analysis)
-完全情報最尤推定法と多重代入法]を参考にしてる
種類
Missing Completely At Random (MCAR)
- ある変数で、欠損値がランダムに発生している
- 欠損値の発生が、「その変数自体の値」や「他の変数の値」に影響されていない
- リストワイズ法(後述)を用いても、他の変数の統計量に影響を与えにくい。ただし、データ数を減らしたくない場合はFIMLや多重代入法を使っても良い。
Missing At Random (MAR)
- 欠損値の発生が、「他の変数の値」に影響されている
- 欠損値の発生が、「その変数自体の値」には影響されていない
- 例:「試験1の点数が一定以上だと、試験2を受けられる」という場合の試験2の点数の欠損
- この場合、試験2の点数が欠損かどうかは試験1の点数のみによって決まる
- 「試験2の点数」と「試験1の点数」で相関がありそうな場合、「試験2の点数が欠損かどうかは試験2の点数に影響を受ける」ように見えるが、試験1の点数を統制すると試験2の点数は関係なくなるため、問題ない。
- リストワイズ法(後述)を用いると、他の変数の統計量に影響を与えてしまう。FIMLや多重代入法を適用するのが良い。
Missing Not At Random (MNAR)
- 欠損値の発生が、「その変数自体の値」に影響されている
- 他の変数を統制しても、ある変数の欠損が「その変数自体の値」と関係が残っている
- MARのときの例で、もし試験1の点数がなくなった場合、「試験2の点数が欠損かどうかは試験2の点数に影響を受ける」となり、MNARとなる。
- 逆に言うと「最初はMNARであっても、他に欠損を説明できる変数(補助変数)を設定し、欠損している変数とその変数自体の値の因果関係を消すことができれば、MARにできる」
- まだ、分析方法は十分に発展していない。とりあえず補助変数を併用してMARに近づけ、MARに基づいたFIMLや多重代入法を用いるという手もある。
対処方法
リストワイズ法 (list-wise deletion)
- 1変数でも欠損している場合、データごと削除する方法
- MCAR以外の場合に適応すると、他の変数の統計量や分布を歪める可能性がある
ペアワイズ法 (pair-wisedeletion)
- 欠損箇所を削除したり、埋めるわけではない
- 2変数間の関係(相関とか)を、「対象の変数に欠損がある場合は除外」「対象の変数に欠損がなければ入れて計算」する
- MCAR以外の場合に適応すると、本来のデータと大きく異なる結果となる可能性がある
完全情報最尤推定法 (full information maximum likelihood method, FIML)
- 変数たちがある分布(例:多変量正規分布)に従っていると考え、実際の変数の値を取る確率が一番高くなるような平均,分散共分散を求める(=最尤推定)
- 平均,分散共分散が決まったら密度関数が最大になるような値が求まるので、それを推定値として代入する
- ある変数が欠損しているデータも、他の変数を利用できる
- MARでもバイアスのない推定値が得られる
多重代入法(multiple imputation method)
- 欠損箇所に予測値を入れたデータセットをいくつか作り、最後に合体させる
- 予測値の作り方はいくつかあるが、説明は割愛。(あまり詳しくない)
- 回帰モデルで予測した後,その予測値にランダム誤差(回帰モデルの誤差分散に相当)を加えて代入する方法。(stochastic regression imputation)
- データ拡大法(data augmentation method)
他
- 前の行の値を入れる
- 時系列データなどで、直前(前日とか)のデータの値を入れる
- 線形補間する
- 時系列データなどで、前後のデータの間の値を入れる
- 平均値・中央値
- 欠損でないデータの平均値or中央値を一律で入れる
- 回帰代入法(regression imputation)
- 欠損値のないサンプルで回帰分析し、推定式を元に欠損値を補完
参考にしたサイト
- 欠損データ分析 (missing data analysis)
-完全情報最尤推定法と多重代入法 - R 欠損値の対応(missing value treatment)
- 「ある変数を統制する」=「ある変数の影響を除去する」「変数の値を一定にする」
- Python+Pandasでリストワイズ削除とペアワイズ削除で欠損値に対処する話。
- 欠損値の種類と補完とRでのワークフロー
- 完全情報最尤推定法