心理統計法-R の使い方(12)
目次
1 はじめに
ここでは、「因子分析」を行う。
2 サンプルデータ
以下のデータを使う。
ここでは以下のデータを使う。「文章理解」、「語彙」、「作文」、「数学の応用問題」、「数学の計算問題」の5つの変数からなる 300人分 の仮想データを R を使ってデータを発生させ、そのデータを使って因子分析を行う。
(以下、省略)
3 データ作成
> set.seed(111)
> n<- 300
> 因子負荷行列 <- matrix(c(0.8,0.7,0.6,0.4,0.1,0.2,0.2,0.1,0.6,0.8), nrow=5)
> 独自性分散 <- diag(sqrt(c(0.68,0.53,0.37,0.52,0.65)))
> 因子得点 <- matrix(rnorm(2*n), nrow=2)
> 独自因子 <- matrix(rnorm(5*n), nrow=5)
> 変数五 <- round(t(因子負荷行列 %*% 因子得点 + 独自性分散 %*% 独自因子)* 10+50)
> colnames(変数五) <- c("文章理解", "語彙", "作文", "応用問題", "計算問題")
上記のスクリプトを実行すると以下のデータが得られる。
4 要約統計量
> summary(Dataset)
NA. | 文章理解 | 語彙 | 作文 | 応用問題 | 計算問題 |
[1,] : 1 | Min. :17.00 | Min. :18.00 | Min. :22.00 | Min. :22.00 | Min. :21.00 |
[10,] : 1 | 1st Qu.:42.00 | 1st Qu.:43.00 | 1st Qu.:43.00 | 1st Qu.:42.00 | 1st Qu.:42.75 |
[100,] : 1 | Median :50.00 | Median :49.50 | Median :50.00 | Median :49.00 | Median :51.00 |
[101,] : 1 | Mean :49.57 | Mean :49.45 | Mean :49.34 | Mean :49.47 | Mean :50.19 |
[102,] : 1 | 3rd Qu.:57.00 | 3rd Qu.:55.25 | 3rd Qu.:55.00 | 3rd Qu.:56.00 | 3rd Qu.:57.00 |
[103,] : 1 | Max. :85.00 | Max. :75.00 | Max. :72.00 | Max. :84.00 | Max. :86.00 |
(Other):294 |
5 結果
5.1 因子負荷
> 変数五因子分析 <- factanal(変数五, factors=2, rotation="none")
> 変数五因子分析斜交 <- promax(loadings(変数五因子分析), m=4)
> print(変数五因子分析斜交$loadings, digit=2, cutoff=0, sort=TRUE)
Loadings:
Factor1 | Factor2 | |
文章理解 | 0.83 | -0.12 |
語彙 | 0.51 | 0.21 |
作文 | 0.75 | -0.09 |
計算問題 | -0.19 | 0.84 |
応用問題 | 0.31 | 0.48 |
Factor1 | Factor2 | |
SS loadings | 1.65 | 1.00 |
Proportion Var | 0.33 | 0.20 |
Cumulative Var | 0.33 | 0.53 |
factanal は因子分析を行う関数。因子数=2とし、因子回転をなし として設定した。
Loadings :因子負荷
SS loadings:因子負荷の平方和
Proportion Var:因子負荷の平方和を項目数で割った値
Cumulative Var:Proportion Var をFactal から順に累積した値
5.2 共通性
> 共通性 <- 1-変数五因子分析$uniquenesses
> 共通性
文章理解 | 語彙 | 作文 | 応用問題 | 計算問題 |
0.5904545 | 0.4261542 | 0.4959088 | 0.4983486 | 0.5529001 |
以上の結果から、Factor1 の「文章理解」、「語彙」、「作文」に高い負荷をもつことが解った。
これらの項目の背後に仮定できる潜在的な因子を検討してみる必要がある。具体的には、「言語的能力」のようなものが潜在因子となっていると考えられる。
Factor2 では、「計算問題」に高い負荷をもつことが解ったので、「数学的能力」のようなものが潜在因子となっていると考えられる。
5.3 因子間相関
> 因子間相関 <- solve(t(変数五因子分析斜交$rotmat)%*% 変数五因子分析斜交$rotmat)
> 因子間相関
[,1] | [,2] | |
[1,] | 1.0000000 | 0.5769477 |
[2,] | 0.5769477 | 1.0000000 |
上記の結果より、「言語的能力」と「数学的能力」の間には、0.5769477 の相関があることが解った。
5.4 因子構造
> 因子構造 <- 変数五因子分析斜交$loadings %*% 因子間相関
> 因子構造
[,1] | [,2] | |
文章理解 | 0.7624839 | 0.3621148 |
語彙 | 0.6308682 | 0.5010404 |
作文 | 0.7002635 | 0.3432214 |
応用問題 | 0.5849560 | 0.6602723 |
計算問題 | 0.2954724 | 0.7277993 |
5.5 準拠構造
> D <- diag((diag(t(変数五因子分析斜交$rotmat) %*% 変数五因子分析斜交$rotmat))(-1/2))
> 準拠構造 <- 変数五因子分析斜交 $loadings %*%D
> 準拠構造
[,1] | [,2] | |
文章理解 | 0.6777368 | -0.09525017 |
語彙 | 0.4184648 | 0.16780805 |
作文 | 0.6149049 | -0.07443120 |
応用問題 | 0.2497773 | 0.39518949 |
計算問題 | -0.1523416 | 0.68234588 |
5.6 因子寄与
この結果から、因子寄与の値を求める。斜交の場合、因子構造に基づいた「他の因子の影響を無視した因子寄与」と準拠構造に基づいた「他の因子の影響を取り除いた因子寄与」の2種類の因子寄与が定義される。
> 因子寄与1 <- colSums(因子構造2)
> 因子寄与1
(1) 1.899223 1.465621
> 因子寄与2 <- colSums(準拠構造2)
> 因子寄与2
(1) 1.0981448 0.6645428
ここまでで、因子負荷、共通性、因子寄与など必要な情報がすべて得られた。
5.7 相関行列
> 相関行列 <- cor(変数五)
> 相関行列
文章理解 | 語彙 | 作文 | 応用問題 | 計算問題 | |
文章理解 | 1.0000000 | 0.4634173 | 0.5410566 | 0.4102464 | 0.1596490 |
語彙 | 0.4634173 | 1.0000000 | 0.4314247 | 0.4354430 | 0.3008167 |
作文 | 0.5410566 | 0.4314247 | 1.0000000 | 0.3776200 | 0.1570510 |
応用問題 | 0.4102464 | 0.4354430 | 0.3776200 | 1.0000000 | 0.4425098 |
計算問題 | 0.1596490 | 0.3008167 | 0.1570510 | 0.4425098 | 1.0000000 |
上記の相関行列の結果から eigen() により value, vectors を求める。
5.7.1 eigen
> eigen(相関行列)
$values
(1) | 2.5155000 | 0.9932350 | 0.5527749 | 0.4914749 | 0.4470153 |
$vectors
[,1] | [,2] | [,3] | [,4] | [,5] | |
[1,] | -0.4737345 | -0.39489639 | -0.15963899 | -0.1416372 | 0.7576851 |
[2,] | -0.4780557 | -0.04385621 | 0.86533663 | -0.0181760 | -0.1428338 |
[3,] | -0.4583183 | -0.41475980 | -0.34197544 | 0.5228874 | -0.4770327 |
[4,] | -0.4765771 | 0.30789089 | -0.31685281 | -0.6836764 | -0.3320668 |
[5,] | -0.3314469 | 0.75849257 | -0.09146042 | 0.4886551 | 0.2601599 |
5.7.2 プロマックス回転後
> local({
+ .FA <- factanal(~応用問題+計算問題+語彙+作文+文章理解, factors=2, rotation="promax", scores="none", data=Dataset)
+ print(.FA)
+ })
Call:
factanal(x = ~応用問題 + 計算問題 + 語彙 + 作文 + 文章理解, factors = 2, data = Dataset, scores = "none", rotation = "promax")
Uniquenesses:
応用問題 | 計算問題 | 語彙 | 作文 | 文章理解 |
0.502 | 0.447 | 0.574 | 0.504 | 0.410 |
Loadings:
Factor1 | Factor2 | |
応用問題 | 0.306 | 0.484 |
計算問題 | -0.187 | 0.835 |
語彙 | 0.512 | 0.205 |
作文 | 0.753 | |
文章理解 | 0.830 | -0.117 |
Factor1 | Factor2 | |
SS loadings | 1.646 | 0.996 |
Proportion Var | 0.329 | 0.199 |
Cumulative Var | 0.329 | 0.528 |
Factor Correlations:
Factor1 Factor2 | |
Factor1 | 1.000 -0.577 |
Factor2 | -0.577 1.000 |
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 0.02 on 1 degree of freedom.
The p-value is 0.88
最後に散布図行列をグラフ化すると以下のようになる。
6 参考文献
山田剛史, 村井潤一郎, & 杉澤武俊. (2015). Rによる心理データ解析: ナカニシヤ出版.