主成分分析 SPSS と R の比較をしてみる
主成分分析で主成分負荷量を計算する
R は、psych パッケージの principal を使用する
まず、psych パッケージをインストールする
install.packages("psych")
psych パッケージを呼び出して、principal を用いて主成分分析を行う
サンプルデータは、体力測定に関する 10 変数のデータセット
library(psych) pc <- principal(tairyoku, nfactor=4, rotate="none") print(pc, digits=3)
4 主成分を抽出し、回転はなし、結果は小数点以下 3 桁で出力することとすると、結果は以下のとおりとなる
黄色ハイライト部分が主成分負荷量である
SPSS で解析すると、以下のように同様な結果が得られる
主成分得点係数行列を計算する
R で主成分得点係数行列を計算する方法は、以下のとおりである
A <- unclass(loadings(pc)) W <- A%*%solve(t(A)%*%A) # 主成分得点係数行列
主成分負荷量行列に、転置した行列を左からかけた行列の逆行列を、もとの行列に右からかけると計算できる
SPSS で出力させた結果は以下のとおり
主成分得点係数行列を使った主成分得点の計算
R で主成分得点係数行列を使って主成分得点を計算する方法は以下のとおり
Z <- as.matrix(tairyoku_scaled) # 各変数を標準化したデータセットを行列として扱う score <- Z%*%W head(score)
各変数を標準化したデータセットを準備して行列化する
標準化変数行列を、先ほど計算した主成分得点係数行列に左からかける
すると、主成分得点が計算できる
SPSS で主成分得点を計算させた結果と一致している
先頭 6 行が完全一致している様子を示す
この主成分得点の特徴は、平均 0、標準偏差 1 (分散 1)に標準化されていること
summary(score) for (i in 1:4) { sd.i <- sd(score[,i]) print(sd.i) }
R の結果で、4 つの主成分得点の平均値が 0 であることを示している
標準偏差もすべて 1 であることが示されている
SPSS の記述統計で確認しても、4 つの主成分得点、すべてが平均 0、標準偏差 1 であることがわかる
このようにして、R の psych パッケージの principal 関数を使うと、SPSS と同じ計算ができることがわかる
まとめ
R と SPSS の主成分分析が同じ計算をしていて、R で主成分得点係数行列を計算すると、SPSS の出力と一致していることが確認できる
また、主成分得点も一致して、標準化されていることがわかる
参考になれば
コメント