PCAの欠損値の代入


23

prcomp()RでPCA(主成分分析)を実行するためにこの関数を使用しました。ただし、その関数にはバグがあり、na.actionパラメーターが機能しません。私はstackoverflowの助けを求めました。そこで2人のユーザーが、NA値を処理する2つの異なる方法を提供しました。ただし、両方のソリューションの問題は、NA値がある場合、その行が削除され、PCA分析で考慮されないことです。私の実際のデータセットは100 x 100のマトリックスであり、単一のNA値が含まれているという理由だけで行全体を失いたくありません。

次の例はprcomp()NA値が含まれているため、関数が行5の主成分を返さないことを示しています。

d       <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10), 
                      V3 = sample(1:100, 10))
result  <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x                                # $
d$V1[5] <- NA                           # $
result  <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x

私が設定できる場合、私は思っていたNAとき、具体的な数値に値をcenterscaleに設定されてTRUEいるのでprcomp()、関数作品や含む行は削除されませんNAさんを、だけでなく、PCA分析の結果に影響しません。

NA値を単一の列の中央値または0に非常に近い値に置き換えることを考えました。しかし、それがPCA分析にどのように影響するかはわかりません。

誰もがその問題を解決する良い方法を考えることができますか?


8
問題はPCAの問題ではなく、より広い欠損値の問題です。よく知らない場合は、少し読んでください。多くの機会があります:(1)リストごとにケースを削除するか、(2)ペアごとにケースを削除するか、(3)欠損を平均または中央値で置き換えます。または、(4)有効な値からランダムに選択したものに置き換えます(ホットデッキアプローチ)。または、(5)相互回帰(ノイズの追加の有無にかかわらず)アプローチまたはより優れた(6)EMアプローチによって欠損を補完します。
ttnphns

コメントと回答が示しているように、適切な回答を得るための鍵は、NA値の意味を説明することです。「欠落」の原因は何ですか?
whuber

2
「pcaMethods」パッケージで問題を解決できると思います(こちら
ToNoY 14年

回答:


22

gappy行列に対処するための十分に文書化の方法は、実際にはあります-あなたが分解A共分散行列ができ、あなたのデータのからcontructed共有値の数によってスケーリングされ、:X n C = 1Cバツn

C=1nバツTバツ                Cjl=バツjYl¯

(@ user969113が言及しているように)最小二乗法で主係数を展開します。以下に例を示します。

ただし、この方法には、共分散行列が半正定ではなくなり、固有値/特異値が大きくなる傾向があるという事実に関連するいくつかの問題があります。これらの問題の素晴らしいレビューは、Beckers and Rixen(2003)にあります。ここでは、欠落しているギャップを最適に補間する方法-DINEOF(経験的直交関数を補間するデータも提案しています。私は最近DINEOFを実行する関数を作成しましたが、それは実際にははるかに良い方法のようです。データセット DINEOFを直接実行し、補間されたデータセットをへの入力として使用できます。バツprcomp

更新

ギャップのあるデータセットでPCAを実行する別のオプションは、「再帰的に減算された経験的直交関数」(Taylor et al。2013)です。また、最小二乗アプローチのいくつかの問題を修正し、DINEOFよりも計算上はるかに高速です。この投稿では、PCを使用したデータ再構築の精度に関して、3つのアプローチすべてを比較しています。

参照資料

ベッカーズ、ジャン=マリー、M。リクセン。「不完全な海洋データセットからのEOF計算とデータ入力。」Journal of Atmospheric and Oceanic Technology 20.12(2003):1839-1856。

Taylor、M.、Losch、M.、Wenzel、M.、&Schröter、J.(2013)。ギャップのあるデータから導出された経験的直交関数を使用した場の再構成と予測の感度について。Journal of Climate、26(22)、9194-9205。


(+1)これは斬新なアイデアであるため、私にとって貴重な貢献のようです。ずっと前に、ような質問をしましたが、それは驚くほど似ています。データが打ち切られたとき(欠落ではなく)、共分散行列をどのように推定しますか?あなたがその状況について何か考えがあれば、私は返事を喜んでいるでしょう!
whuber

@whuberに感謝します。この方法には多くのメリットがあると思います。補間された値に関心がない場合でも、この方法はデータセットのEOF / PCを記述するよりもはるかに優れています。たとえば、再構築されたデータと元のデータ間のエラーはアルゴリズムによって最小化されます。
ボックス内のマーク

@whuber-検閲データについて-これは私の専門分野ではありませんが、興味深いことに、数週間前にこの方向で質問しました(あなたがコメントしました!)。私の考えでは、検出限界以下のランダムな値でゼロを埋める必要があります。これは、観測値の分布に近似しています。私はあなたの投稿から引用された文献のいくつかを調べます-これは確かに非常に興味深いトピックです。
ボックスのマーク

@whuber-スパースデータに対する類似の反復共分散行列近似手順を説明している次の論文に興味があるかもしれません:Bien、Jacob、およびRobert J. Tibshirani。「共分散行列のスパース推定。」Biometrika 98.4(2011):807-820。
ボックスのマーク

ありがとう@Marc。残念ながら、検閲と予備調査は、異なる懸念を持つ2つの異なるものです。
whuber

6

私の提案は、欠落しているデータの量と欠落している理由によって異なります。しかし、これはPCAとはまったく関係ありません。欠落しているデータが非常に少ない場合は、何をするかは重要ではありません。中央値で置き換えることは理想的ではありませんが、欠落があまりない場合は、より良いソリューションと大差ありません。中央値の置換とリストごとの削除の両方でPCAを実行し、結果に大きな違いがあるかどうかを確認できます。

次に、さらに多くのデータが欠落している場合、完全にランダムに欠落しているか、ランダムに欠落しているか、またはランダムに欠落していないかを考慮する必要があります。最初の2つのケースでは複数の代入を、3番目のケースではいくつかの時間を提案します-データがNMARステータスによって大きく歪められない限り、複数の代入はリストごとの削除よりも優れていると思います(ペンシルベニア州のジョー・シェーファーは欠損データに関する多くの作業-複数の代入が一部のNMARケースでも非常にうまく機能したことを示した彼の作業を思い出します。ただし、データがMCARまたはMARである場合、複数の代入のプロパティを証明できます。

MIを使用することにした場合、PCAのコンポーネントの符号はarbitrary意的であり、データのわずかな変更によって符号が反転する可能性があるため、注意が必要です。その後、PCAを実行すると、ナンセンスが得られます。ずっと前に、私はSASで解決策を考え出しました-それは難しくありませんが、注意するべきことです。


1

問題に対する正しい解決策はありません。主成分の正しいセットを取得するには、ベクトル内のすべての座標を指定する必要があります。座標が欠落していて、いくつかの代入値に置き換えられた場合、結果は得られますが、代入値に依存します。したがって、代入値に2つの妥当な選択肢がある場合、異なる選択肢によって異なる答えが得られます。


3
PCAと欠落データをグーグルで検索したところ、次のことがわかりました。4.2 SIMCAは欠落データにどのように対処しますか?簡単に言えば、NIPALSアルゴリズムは最小二乗近似を使用して欠損点を補間しますが、欠損データはモデルに影響を与えません。連続した反復では、スコアとそのポイントのロードを単純に乗算することにより、欠損値を改善します。推定など、欠落データに対して多くの異なる方法が存在しますが、通常は同じソリューションに収束します。欠落しているデータがランダムに分散している場合は許容できます。欠落したデータの体系的なブロックには問題があります。
user969113

1
モデルに影響を与えないという意味はわかりません。座標の欠損値の選択は、主成分に影響します。
マイケルR.チャーニック

1

PCA分析で欠損値を処理するためのアプローチをレビューする最近の論文は、Dray&Josse(2015)による「欠損値を伴う主成分分析:メソッドの比較調査」です。欠損値を許可PCA法の最良の既知の方法の二つが実装NIPALSアルゴリズム、あるnipals機能ade4で実装、パッケージ、および反復PCA(IPCAまたはEM-PCA)imputePCAの機能missMDAパッケージ。この論文は、Ipca法が最も広い範囲の条件下で最高の性能を発揮すると結論付けました。

例の構文は次のとおりです。

NIPALSの場合:

library(ade4)
nipals(d[,c(1,2)])

IPCAの場合:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.