SSブログ

主成分分析と因子分析で正規化が必要か? [データサイエンス、統計モデル]

統計の講師をしていて、なるほど!と思う質問を受けることがあります。
せっかくなので、その中からピックアップして紹介できればと思います。

【質問】
主成分分析と因子分析で正規化が必要か?

【回答】
まず、主成分分析と因子分析で何を元に計算されているかですが、
主成分分析:分散共分散行列
因子分析:相関行列
となっています。

主成分分析では分散共分散行列を使うため、単位の影響を受けてしまいます。
なので、単位が1000倍近くあると(gとkgみたいに)何かと問題になりやすい。

一方で、因子分析では相関行列を使っているため、標準化は必須ではないです。
パッケージのlavaanを使っていると、
lavaan WARNING: some observed variances are (at least) a factor 1000 times larger than others; use varTable(fit) to investigate
という警告文が出てくる場合があります。

モデル1とモデル2(100倍したもの)でモデルを作って比較すると、CFI、RMSEA、SRMRなどは同じ値になっていることが確認できるかと思います。
一方で、データそのものの値を使うAICなどは値が当然変わっています。
データが違うので、AICではモデル1とモデル2の比較は比較できません。

係数を見てみると、100倍したモデル2では、係数も100倍となっています。

########################################
library(lavaan)
library(psych)

#分析前にNA(欠測)を含む個体(対象者)を除外する
#リストワイズ削除
bfi2<-na.omit(bfi[ , c("A1", "A2", "A3", "A4", "A5", "gender")])

#変数に名前を付ける
colnames(bfi2)<-c("a1","a2","a3","a4","a5","gender")

bfi2_100 <- bfi2
bfi2_100$a1 <- bfi2_100$a1 * 100

#分析モデル 1
model <- '
A =~ a1 + a2 + a3 + a4 + a5
a1 ~~ a1;a2 ~~ a2;a3 ~~ a3;a4 ~~ a4;a5 ~~ a5
A ~~ 1*A
'
fit1 <- lavaan(model, data=bfi2)
summary(fit1, standardized=T, fit.measures = TRUE)

#分析モデル 2
fit2 <- lavaan(model, data=bfi2_100)
summary(fit2, standardized=T, fit.measures = TRUE)

nice!(3)  コメント(0) 
共通テーマ:学問