読者です 読者をやめる 読者になる 読者になる

Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

第38回 因子分析

多変量解析

第38回は因子分析について書きます。

そもそも因子分析は、「探索的因子分析」と「検証的因子分析」の2つに分けられます。ここでは、「探索的因子分析」のことについて書いていきます。

因子分析は端的に言うと、「データの背後に存在するであろう説明変数」を見つけるための手法といえます。主成分分析はたくさんある説明変数から情報を集約して「目的変数」を作り出しますが、因子分析では「観測されたデータを目的変数として扱い、その背後に潜む因子(説明変数)から説明しようとする」ような分析手法です。もうすこし統計学的に言うと、以下のようになります。

主成分分析:観測された変数間の相関関係を利用して、無相関な合成変数を求めることを目的に変数が持つ情報量を縮約していきます。

因子分析:変数間の相関関係から、その変数間の背後に潜む因子の数を想定し、多くの観測されたデータをまとめることを目的にしています。

では、因子分析の用語から見ていきましょう。

・共通因子
観測データ間の共通する成分をまとめたもの

・独自因子
他の変数とは関係がなく、そのデータが独自に持つ成分

因子分析に使う関数はfa関数です。

fa(x,nfactors,fm,rotate,scores)

x:データまたは相関行列
nfactors:想定する因子の数
fm:推定法(pa:因子法、ml:最尤推定法、wls:重みつき最小ニ乗法)
rotate:回転法(varimax:直交回転、promax:斜交回転)
scores:因子得点を算出


前回同様、今回もマンガでわかる統計学(因子分析)のノルンのアンケート調査を利用して、分析してみます。この本では、「主因子法」「バリマックス回転」で因子分析を行っています。
※最近では、バリッマックス回転を使うことを避けて、プロマックス回転を使うことが主流となりつつあります。

satisfaction<-read.csv("satisfaction.csv",header=TRUE)
satisfaction
      X  outside   inside    service   taste   value   sense
1    a      5        5        5       4       4        2
2     b       5         4          5       2       2        2
3     c       4         4          4       4       4        4

・・・・・
fa.parallel(satisfaction[,2:7],n.iter=15,error.bars=TRUE)

Parallel analysis suggests that the number of factors = 2 and the number of components = 2
f:id:teruaki-sugiura:20150801051349p:plain

 

平行分析より、因子の数は「2個」にします。マンガでも因子の数は2個にして分析しています。

satisfaction.fa.vari


PA1をみると、outside、inside、serviceの3つ因子負荷量が第1共通因子に影響を及ぼしており、PA2をみると、taste、value、senceの3つの因子負荷量が第2共通因子に影響を及ぼしていることがわかります。

マンガでわかる統計学(因子分析)に倣うと、第1共通因子は「お店の雰囲気」因子、第2共通因子は「紅茶」因子と解釈できます。<共通因子の累積寄与率(Cumulative Var)をみると、第1共通因子で0.40、第2共通因子で0.78となっており、2つの共通因子で80%に達していることがわかります。

satisfaction.fa.vari$rotation
[1] “varimax”

round(satisfaction.fa.vari$scores,2) PA1 PA2 [1,] 1.32 0.40 [2,] 1.50 -1.35 [3,] -0.18 0.56 [4,] 0.93 -0.34 [5,] -0.53 -0.42 [6,] 1.22 -0.43 [7,] 1.00 0.48 [8,] -1.91 1.29 [9,] -0.44 -0.57 [10,] -2.17 -0.96 [11,] -0.67 -2.09 [12,] 0.19 0.46 [13,] -0.43 0.40 [14,] 0.24 1.30 [15,] -0.06 1.27 biplot(satisfaction.fa.vari$scores,satisfaction.fa.vari$loadings,xlab=“FA1”,ylab=“FA2”)

因子得点を確認してみましょう。因子得点は、個人における共通因子の具体的な数値として考えることができますので、個人の特徴を理解する上で役に立ちます。第1共通因子は「お店の雰囲気」因子、第2共通因子は「紅茶」因子でした。

第1共通因子「お店の雰囲気」を一番評価しているのは、個体番号「2」で、一番評価が悪いのは個体番号「10」ということがわかります。 第2共通因子「紅茶」を一番評価しているのは、個体番号「14」で、一番評価が悪いのは個体番号「11」ということがわかります。

−−−−−−−Promax(斜交回転)バージョン−−−−−−−−−−

fa.parallel(satisfaction[,2:7],n.iter=15,error.bars=TRUE)
Parallel analysis suggests that the number of factors = 2 and the number of components = 2

satisfaction.fa.pro<fa(satisfaction[,2:7],nfactors=2,fm=“pa”,rotate=“promax”,scores=TRUE,scale=TRUE)

satisfaction.fa.pro

Factor Analysis using method = pa Call: fa(r = satisfaction[, 2:7], nfactors = 2, rotate = “promax”, scores = TRUE, fm = “pa”, scale = TRUE)

Warning: A Heywood case was detected. Standardized loadings (pattern matrix) based upon correlation matrix       PA1 PA2 h2 u2 com outside   0.76 0.03 0.59 0.410 1 inside   0.85 0.00 0.72 0.277 1 service 1.05 -0.04 1.10 -0.096 1 taste -0.05 1.00 0.99 0.011 1 value 0.01 0.83 0.69 0.314 1
sense 0.02 0.78 0.60 0.395 1

                 PA1 PA2

SS loadings 2.41 2.28 Proportion Var 0.40 0.38 Cumulative Var 0.40 0.78 Proportion Explained 0.51 0.49 Cumulative Proportion 0.51 1.00

With factor correlations of PA1 PA2 PA1 1.00 0.11 PA2 0.11 1.00

Mean item complexity = 1 Test of the hypothesis that 2 factors are sufficient.

The degrees of freedom for the null model are 15 and the objective function was 5.34 with Chi Square of 59.61 The degrees of freedom for the model are 4 and the objective function was 0.62

The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is 0.09

The harmonic number of observations is 15 with the empirical chi square 0.88 with prob < 0.93 The total number of observations was 15 with MLE Chi Square = 6.06 with prob < 0.19

Tucker Lewis Index of factoring reliability = 0.794 RMSEA index = 0.287 and the 90 % confidence intervals are NA 0.464 BIC = -4.77 Fit based upon off diagonal values = 0.99> satisfaction.fa.pro$rotation [1] “promax”

round(satisfaction.fa.pro$scores,2) PA1 PA2 [1,] 1.33 0.50 [2,] 1.46 -1.24 [3,] -0.16 0.55 [4,] 0.92 -0.27 [5,] -0.54 -0.46 [6,] 1.20 -0.34 [7,] 1.02 0.55 [8,] -1.87 1.14 [9,] -0.46 -0.60 [10,] -2.20 -1.11 [11,] -0.74 -2.14 [12,] 0.21 0.48 [13,] -0.42 0.36 [14,] 0.28 1.32 [15,] -0.02 1.26

biplot(satisfaction.fa.pro$scores,satisfaction.fa.pro$loadings,xlab=“FA1”,ylab=“FA2”) f:id:teruaki-sugiura:20150801051554p:plain

以上で第38回お終い。

広告を非表示にする