PCAと欠測値ありのPCA

  • PCAは少ない軸で高次元データを説明する手法(べたにやるならこちらとか)
  • 欠測値がないことを前提にして作られている
  • じゃあ欠測値があるときには、というと、足りないところを埋めながらPCAすることになる。埋めてからPCAする、というのもありだが、PCAしながらその様子を埋め方に反映させたい、というのもわかりやすい気持ち
  • RのpcaMethodsパッケージでは、欠測値なしのPCAの手法(Rの標準実装ではprcomp()関数)をそのやり方を明示してsvdPca()関数としたり、そのラッパーとしてpca(method="svd")として実行するようにしたりしてある。これは欠測値なしのデータのためのPCA関数。
  • 欠測値ありの場合には、複数のや方法が提唱されているが、それをオプションで選び分けて、その性能比較をするように作られたのがこのパッケージ。以下のように、"svd"が欠測値無し用で、他の9手法が欠測値あり用
> source("http://bioconductor.org/biocLite.R")
> biocLite("pcaMethods")
> library(pcaMethods)
> listPcaMethods()
 [1] "svd"          "nipals"       "rnipals"     
 [4] "bpca"         "ppca"         "svdImpute"   
 [7] "robustPca"    "nlpca"        "llsImpute"   
[10] "llsImputeAll"
  • これらは以下のように、同じ関数pca()のオプション指定で実施を分ける
data(iris)
##  Usually some kind of scaling is appropriate
pcIr <- pca(iris, method="svd", nPcs=2)
pcIr <- pca(iris, method="nipals", nPcs=3, cv="q2")
# 推定結果は@completeObsなのd
image(pcIr@completeObs)
  • 出てくる出力オブジェクトは、どの手法でも同じ形(pcaResクラス)で出てくるので、比較しやすい
    • その構造は複雑だが、大きく分ければ、次の2つになる
      • 欠測値を推定値で埋めてくれたもの
      • PCAの結果
  • 欠測値推定方法の特徴を挙げれば
    • svdImpute:PCA軸を推定しながら、その結果を用いて線形で欠測値推定し、「収束」を待つ
    • probabilistic PCA(pPCA):隠れた因子とノイズとに正規分布を仮定しながら、EMアルゴリズムで欠測値推定をしながらPCAする
    • Bayesian PCA:pPCAに似ているが、尤度関数のところが違う(らしい)
    • Inverse non-linear PCA(NLPCA):因子・隠れた因子・ノイズの分布に正規分布を仮定するのが不適当な場合はライフサイエンスでは多く、それに対応したもの。ニューラルネットワーク的に相互依存関係を取扱って最終解を出す。iterationsを繰り返す
    • Nipals PCA:Partial Least Square regressionのアルゴリズムを使って非線形に対応。
    • llsImpute:kNNを用いてLocal 情報重みづけ(非線形)を実現する。距離の定義の仕方で複数の方法に亜分類できる