バイナリデータの因子分析 [データサイエンス、統計モデル]
統計の講師をしていて、なるほど!と思う質問を受けることがあります。
せっかくなので、その中からピックアップして紹介できればと思います。
【質問】
0,1データ(バイナリデータ)に対して因子分析(共分散構造分析)をしたい。
【回答】
まず、0,1データに対して、通常の方法で因子分析ができないというのは注意した方がいいところ。
このあたり理解していなくて、バイナリデータに対して、そのまま因子分析をかけてしまうケースがあります。
理由は、相関係数がきちんと計算できないから。
【統計の質問】名義変数(カテゴリカルデータ)の相関分析
https://skellington.blog.ss-blog.jp/2019-02-01
↑
このようにきちんと相関係数を計算することができれば、そのデータ(相関行列)を使って因子分析をすることができます。
library(polycor)
library(lavaan)
library(psych)
# 相関係数の比較
with(dat, polychor(x1, x2, ML=TRUE))
with(dat, cor(x1, x2))
# 0,1データをファクタ型に変換する
dat_2 <- sapply(dat, as.factor)
# 相関係数を計算する
het.mat <- hetcor(dat2)$cor
# 因子分析
fa.parallel(het.mat1)
# fa.1 <- fa(r = het.mat, nfactors = 2, n.obs = nrow(dat2), rotate = "varimax")
# fa.1
fa.2 <- factanal(covmat = het.mat, factors = 2, rotation = "varimax")
fa.2
plot(fa.2$loadings[,1:2], type="n")
text(fa.2$loadings[,1:2], colnames(fa.2))
# 因子得点を計算
result <- as.matrix(dat) %*% solve(het.mat) %*% fa.2$loadings
せっかくなので、その中からピックアップして紹介できればと思います。
【質問】
0,1データ(バイナリデータ)に対して因子分析(共分散構造分析)をしたい。
【回答】
まず、0,1データに対して、通常の方法で因子分析ができないというのは注意した方がいいところ。
このあたり理解していなくて、バイナリデータに対して、そのまま因子分析をかけてしまうケースがあります。
理由は、相関係数がきちんと計算できないから。
【統計の質問】名義変数(カテゴリカルデータ)の相関分析
https://skellington.blog.ss-blog.jp/2019-02-01
↑
このようにきちんと相関係数を計算することができれば、そのデータ(相関行列)を使って因子分析をすることができます。
library(polycor)
library(lavaan)
library(psych)
# 相関係数の比較
with(dat, polychor(x1, x2, ML=TRUE))
with(dat, cor(x1, x2))
# 0,1データをファクタ型に変換する
dat_2 <- sapply(dat, as.factor)
# 相関係数を計算する
het.mat <- hetcor(dat2)$cor
# 因子分析
fa.parallel(het.mat1)
# fa.1 <- fa(r = het.mat, nfactors = 2, n.obs = nrow(dat2), rotate = "varimax")
# fa.1
fa.2 <- factanal(covmat = het.mat, factors = 2, rotation = "varimax")
fa.2
plot(fa.2$loadings[,1:2], type="n")
text(fa.2$loadings[,1:2], colnames(fa.2))
# 因子得点を計算
result <- as.matrix(dat) %*% solve(het.mat) %*% fa.2$loadings