4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

順序尺度の因子分析

Rで探索的因子分析のやり方をメモ。
R、因子分析共に初心者なので、誤りがある場合は、ご指摘いただきたいです。

ordinal scale(順序変数)を使っている探索的因子分析なので、ポリコリックかスピアマンの相関係数を使わないと行けない.(Polychoric versus Pearson correlations in exploratory and confirmatory factor analysis of ordinal variables | SpringerLink

豊田秀樹(2000)は以下のように述べている。

  • 連続変数&連続変数:ピアソンの相関係数
  • 順序変数&順序変数:ポリコリック相関係数
  • 順序変数&連続変数:ポリシリアル相関係数

カテゴリカルな相関係数が算出できるので、カテゴリカル因子分析や項目反応理論などへ適用できる相関係数。polycorパッケージによる順序相関係数の算出 が参考文献。

前準備

普段Pythonを使っているが、今回はRで実装する。
理由は因子分析を行うのに、Rの方がパッケージが豊富であると判断したから。
パッケージをインポート?(表現を知らない)

library(psych)
library(GPArotation)

因子分析の手順

Brett Williams(2012)の論文より、手順は以下の通り。

  1. データが因子分析に適切か
  2. 因子の抽出
  3. 因子数の決定基準
  4. 回転
  5. 解釈と因子の命名

1.データが因子分析に適切か

Brett Williams(2012) は以下の項目をチェックしろとおっしゃってる。

1_1. Sample size
1_2. Correlation matrix
1_3. Variable Ratio
1_4. (Kaiser-Meyer-Olkin Measure of Sampling Adequacy and Bartlett’s Test of Sphericity)←理解できてないので括弧

1_1.Sample Size

文献何個か乗せてくれてるけど、大体経験則として300以上らしい。(足りなくてもやってはいけない訳ではない)

1_2.Correlation matrix

相関が1つも0.3超えてなかったら考え直せと。
相関使うからそれはそう見たいな感じ。

1_3.Variable Ratio

データ数とカラムの比
From 3:1,6:1,10:1,15:1, or 20:1と書いてあるけど、はっきりとは書いてない。

2.因子の抽出

Rでポリコリックだと以下の5つは使える。(codeのfmで設定)

  • 主因法(pa)
  • 重み付き最小2乗法(wls)
  • 重みない最小二乗法(uls)
  • 最尤法(mle)
  • 最小残差法(minres)

3. 因子数の決定基準

以下の方法で因子数は決定できる。(codeではnfactorsで設定)
Rで因子分析 商用ソフトで実行できない因子分析のあれこれが参考文献であり、素晴らしいスライド。このスライド見れば、正直このページいらない笑

以下実行すれば、因子数を決められる。

スクリープロット

VSS.scree(df)

平行分析

library(psych)
fa.parallel.poly(df,fa="pc")
# fa:factor analysisのやつ
# parallel:平行分析で
# poly:ポリコリックを使うってことね

MAP基準

VSS(df,n=10,use="complete.obs")

固有値の値で決める方法も追記します。

4.回転方法

私は以下の二つしか試していない。(codeではrotatoにて設定)

  • プロマックス回転(promax)
  • バリマックス回転(varimax)

実装

ここまでで、実装して結果が出せる。

result <- fa.poly(df,nfactors = 5,
                  fm = 'minres',
                  rotate = 'promax',
                  use = 'complete.obs')

print(result, sort = T)

sort = Tを使うことで、因子負荷量をソートして出してくれるので、つけるべき。

5.解釈と因子の命名方法

因子分析は一回やるだけで終わるものではない。
負荷量が0.4以下で効いてない変数に関しては、
もし削除しても良いと判断できれば、削除してもう一度分析を行う。これは何度も繰り返す。

あとは、以下の項目をチェックする必要がある。

  • 累積寄与率が低すぎないか(そもそもモデル使えない)
  • 1個の因子が3つ以上の変数か
  • 複数の因子に1つの変数がかかりすぎてないか。
  • 解釈できるか

終わりに

最初にも書きましたが、まだまだサーベイが足りてないので、間違った情報がありましたら、教えていただきたいです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?