Chapter 6 Exploratory Factor Analysis
6.1 Data Import
먼저, 과제에서 사용할 패키지를 불러옵니다.
데이터를 불러옵니다.
# 프로젝트와 동일한 폴더에 들어있는 csv파일을 읽어와서 DATA5에 저장합니다.
<- read.csv("efa_example.csv")
data5 glimpse(data5)
## Rows: 299
## Columns: 14
## $ v1 <int> 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 3, 3, 2, 1, 1, 1, 4, …
## $ v2 <int> 1, 1, 1, 1, 3, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, …
## $ v3 <int> 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, …
## $ v4 <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, …
## $ v5 <int> 1, 1, 1, 2, 1, 2, 3, 2, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, …
## $ v6 <int> 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ v7 <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, …
## $ v8 <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ v9 <int> 2, 3, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 3, 1, 3, 2, …
## $ v10 <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, …
## $ v11 <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, …
## $ v12 <int> 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, …
## $ v13 <int> 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, …
## $ v14 <int> 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, …
- 데이터를 보면, v1 ~ v14까지 총 14개의 variable로 구성되어 있습니다.
- 과제에서 요구하는 질문은 다음과 같이 총 4가지 입니다.
1. efa_example.csv 파일을 사용하여 탐색적요인분석(EFA)을 다음의 절차에 맞게 분석하라.
1-1. 본 데이터는 요인분석을 실시하기에 적합한 데이터인가? (2가지 방법 모두를 활용)
1-2. 본 데이터는 몇 가지 요인을 추출하는 것이 적절한가? (3가지 방법 모두를 활용)
1-3. 1-2의 결과를 바탕으로 최대우도를 사용하여 탐색적 요인분석을 실시하고 그 결과를 보고하라.
1-4. fa.diagram()을 사용하여 1-3의 결과를 제목은 EFA Results이고 factor 간의 상관관계가 모두 표현된 plot으로 표현하라.
6.2 요인분석 적절성 판단
- 요인분석을 실시하는 것이 의미가 있는지 파악하기 위해
Bartlett의 구형성 검정과 KMO검정, 두 가지 검정을 실시합니다.
6.2.1 Bartlett의 구형성 검정
변수간 상관계수 행렬의 행렬식 값을 계산하여,
단위행렬에 대항하는지 아닌지 카이제곱 분포를 활용하여 검증합니다.상관계수가 대각행렬일 경우, 변수들간 상관관계가 없기 때문에
요인분석을 하기에 적절하지 않다는 것을 의미합니다.Bartlett의 구형성 검정은 p value가 .05 이하인 경우,
변수가 대각행렬이 아니라는 뜻으로 요인분석에 적합하다는 뜻입니다.변수의 상관관계 matrix를 cortest.bartlett 함수에 넣어 검증합니다.
# 1. Bartlett 구형성 검증을 위한 샘플사이즈 계산
%>% nrow() # 299개, n이 30개 이상이므로 CLT에 의해 정규성을 띈다 가정하고 진행 data5
## [1] 299
%>%
data5 cor() %>%
cortest.bartlett(n = 299) %>%
as.data.frame() %>%
::kable(digits = c(2, 0, 1), caption = c("Bartlett의 구형성 검증 결과"), format = "html", align = "ccc") knitr
chisq | p.value | df |
---|---|---|
1148.87 | 0 | 91 |
Bartlett의 구형성 검증 결과, p value가 0.00으로 유의하므로, 요인분석을 하기에 적절합니다.
Bartlett Test의 경우, 데이터의 비정규성에 매우 민감하며, 유의한 상관이 없더라도
유의한 결과를 제공하는 경향이 있기에 n=30 이하인 경우에는 cor.mtest()함수를
사용하여 변수간 상관관계를 살펴보는 것이 좋습니다.
6.2.2 KMO 검정
- Kaiser-Meyer-Olkin 검정은 변수들간 상관관계가 다른 변수들에 의해 잘 설명되는지 여부를 알려줍니다.
- KMO값이 .5 이상이 되어야 설명력이 있다고 보며, 기준은 아래와 같습니다.
KMO값 | 기준 |
---|---|
0.9 이상 | 좋음 |
0.8 이상 | 양호 |
0.6~0.7 | 보통 |
0.5 이하 | 부적절 |
- KMO 검정을 실시합니다.
%>% KMO() data5
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = .)
## Overall MSA = 0.75
## MSA for each item =
## v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14
## 0.73 0.70 0.71 0.76 0.72 0.77 0.79 0.75 0.62 0.69 0.87 0.83 0.80 0.75
- KMO 값 기준은 아래와 같고, 모두 0.6 이상이므로 요인분석에 적합하다고 볼 수 있습니다.
6.2.3 요인분석 적절성 판단 결과
- Bartlett의 구형성 검정과 KMO검정 실시 결과, efa_example 데이터는
요인분석에 적합한 것으로 확인되었습니다.
1. efa_example.csv 파일을 사용하여 탐색적요인분석(EFA)을 다음의 절차에 맞게 분석하라.
1-1. 본 데이터는 요인분석을 실시하기에 적합한 데이터인가?
(2가지 방법 모두를 활용)
-> 두 가지 방법으로 분석 결과 적합한 것으로 확인됨
6.3 요인추출
- efa_example 데이터로부터 몇개의 요인을 추출하는 것이 적합한지 확인하기 위해
Kaiser’s rule, Scree test, *Parallel analysis 방법을 활용하겠습니다.
6.3.1 Kaiser’s Rule
Kaiser’s Rule은 상관행렬의 eigen value이 1보다 큰 것의 개수를 구해
해당 값을 요인의 개수로 결정합니다.하지만, 표본이 작은 경우 요인 수를 과대평가하는 경향이 있어서,
최근에는 참고용으로만 보고 있습니다.
::p_load(nFactors)
pacman
# Kaiser's Rule with scree plot
%>%
data5 cor() %>%
scree(pc = FALSE, main = c(" Scree plot for efa_example data"), hline = 1)
- Scree plot으로 eigen value가 1을 넘는 요인의 수를 간단하게 확인하실 수 있습니다.
- eigen value가 1보다 큰 요인의 수가 2개임을 알 수 있습니다.
# Kaiser's Rule with eigen value table
%>% eigenComputes(model = "factors") -> eigenTable
data5 %>%
eigenTable as.data.frame() %>%
mutate(factor_number = c(1:14))
## . factor_number
## 1 2.891881952 1
## 2 1.534475036 2
## 3 0.959932562 3
## 4 0.855368932 4
## 5 0.105713004 5
## 6 0.004064692 6
## 7 0.003397895 7
## 8 -0.071110194 8
## 9 -0.101914687 9
## 10 -0.120464827 10
## 11 -0.183663813 11
## 12 -0.205283859 12
## 13 -0.231170886 13
## 14 -0.266734908 14
주성분 분석과 다르게, 탐색적 요인분석의 경우,
reduced correlation matrix로 eigen value를 계산해야 합니다.eigenComputes함수를 활용하여 요인분석의 eigen value를 계산하면,
Scree plot과 동일하게 eigen value가 1 이상인 요인은 2개 입니다.
6.3.2 Scree plot
- Scree plot은 새로운 차원(요인 수)을 추가할 경우, 설명분산을 유의미하게 증가시키지 않으면 요인을 포함하지 않는 방법입니다.
바꿔 말하면, eigen value 곡선에서 변곡점을 찾아내고, 해당 변곡점을 요인의 수로 결정하는 방법입니다.
# Scree plot
%>%
data5 cor() %>%
scree(pc = FALSE, main = c(" Scree plot for efa_example data"), hline = -1)
Scree Plot을 통해 확인해보면, 요인이 1개인 경우와 4개인 경우가 변곡점인 것 같습니다.
정확한 판단을 위해 요인분석을 하면서 누적분산비율을 보기도 하는데,
우선 다음 분석으로 넘어가 보겠습니다.
6.3.3 Parallel Analysis
- 마지막으로 평행분석을 진행합니다.
평행분석기법은 표본상관계수 행렬의 크기와 동일한 무선 상관행렬을 생성한 다음
eigen value를 계산하고 평균 eigen value보다 큰 eigen value의 개수로 요인의 수를 추정합니다.
-이 기법은 표집의 오차를 고려하는 방법 이기 때문에
앞서 진행했던 Kaiser’s Rule보다는 더 논리적인 방법입니다.
%>% paran(iterations = 5000, cfa = TRUE, graph = TRUE, all=TRUE) data5
##
## Using eigendecomposition of correlation matrix.
## Computing: 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
##
##
## Results of Horn's Parallel Analysis for factor retention
## 5000 iterations, using the mean estimate
##
## --------------------------------------------------
## Factor Adjusted Unadjusted Estimated
## Eigenvalue Eigenvalue Bias
## --------------------------------------------------
## No components passed.
## --------------------------------------------------
## 1 2.458816 2.891881 0.433065
## 2 1.196926 1.534475 0.337548
## 3 0.694034 0.959932 0.265898
## 4 0.651108 0.855368 0.204260
## 5 -0.042707 0.105713 0.148420
## 6 -0.092946 0.004064 0.097010
## 7 -0.045230 0.003397 0.048628
## 8 -0.073293 -0.07111 0.002183
## 9 -0.059646 -0.10191 -0.04226
## 10 -0.035009 -0.12046 -0.08545
## 11 -0.054469 -0.18366 -0.12919
## 12 -0.032379 -0.20528 -0.17290
## 13 -0.010479 -0.23117 -0.22069
## 14 0.009683 -0.26673 -0.27641
## --------------------------------------------------
##
## Adjusted eigenvalues > 0 indicate dimensions to retain.
## (4 factors retained)
- 평행분석 결과, Random Sampling에 의한 EV인 파란색 선보다 위에 있는
Adjusted Ev가 4개임을 확인할 수 있으며, 4 factors retained라고 출력된 것을 확인할 수 있습니다.
6.3.4 추가 방법(1)
nFactors 라이브러리의 nScree, plotnScree 함수를 사용하면,
Kaiser’s Rule과 Parallel Analysis, Optimal Coordinate, Acceleration Factor,
총 네가지 방법에 의한 적절한 요인의 수를 계산해줍니다.nScree 함수의 경우, default model이 주성분분석인 components로 되어 있으므로,
반드시 factors로 지정해주셔야 제대로 요인분석을 하실 수 있습니다.nScree에서는 Raiche et al.,(2006)의 Acceleration Factor 와 Optimal Coordinates 에 의한 요인 개수 추정값도 보여줍니다. Acceleration Factor 방법은 곡선의 기울기가 가장 급격하게 변하는 요인 개수를 추정하며,
Optimal Coordinates는 eigen value의 이전 값과 현재 값의 기울기를 기반으로 요인 개수를 추정합니다.
# eigen value 계산
%>% eigenComputes(model = "factors") -> ev
data5
# parallel analysis
parallel(subject = nrow(data5), var = ncol(data5), rep = 100, quantile = .95, model = "factors") -> ap
# nScree 통해 Vairous Scree Test
nScree(x = ev, aparallel = ap$eigen$qevpea, model = "factors") %>%
plotnScree(main = c("Various Scree Test for efa_example"))
- nFactors package에 의한 결과는 앞서 했던 것과 동일하게 나왔으며, OC에 의해서는 2개, AF에 의해서는 1개를 추천해주고 있습니다.
6.3.5 추가 방법(2)
- 이번엔 psych 패키지에 내장되어 있는 평행분석 함수를 사용해보겠습니다.
%>% fa.parallel(n.iter = 1000, fa = "fa", fm = "ml", plot = TRUE) data5
## Parallel analysis suggests that the number of factors = 4 and the number of components = NA
- 누적 분산비율을 확인하고 싶을 때는, fa()함수나 factanl()함수를 활용하면 됩니다.
fa와 factanal은 둘다 탐색적 요인분석을 위한 함수이지만,
factanal은 Maximum likelihood 방법만을 활용하며, fa는 Ordinary least square regression 과
같은 방법도 활용할 수 있습니다.
fa(data5, nfactors = 4, fm = "ml", rotate = "promax")%>%print
## Factor Analysis using method = ml
## Call: fa(r = data5, nfactors = 4, rotate = "promax", fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## ML1 ML3 ML4 ML2 h2 u2 com
## v1 0.00 0.09 0.63 -0.13 0.40 0.60 1.1
## v2 0.00 -0.08 0.76 -0.04 0.54 0.46 1.0
## v3 -0.01 -0.05 0.67 0.17 0.53 0.47 1.1
## v4 -0.02 0.47 0.05 0.13 0.28 0.72 1.2
## v5 -0.01 0.65 -0.16 -0.06 0.38 0.62 1.1
## v6 0.00 0.74 0.07 -0.03 0.57 0.43 1.0
## v7 0.07 0.71 0.06 -0.04 0.56 0.44 1.0
## v8 -0.05 0.12 -0.01 0.50 0.28 0.72 1.1
## v9 0.00 -0.13 -0.09 0.71 0.46 0.54 1.1
## v10 0.08 0.00 0.09 0.76 0.65 0.35 1.1
## v11 0.58 0.03 -0.03 0.02 0.34 0.66 1.0
## v12 0.70 -0.03 0.02 0.05 0.49 0.51 1.0
## v13 0.76 -0.02 0.04 -0.07 0.57 0.43 1.0
## v14 0.82 0.04 -0.05 0.01 0.69 0.31 1.0
##
## ML1 ML3 ML4 ML2
## SS loadings 2.11 1.73 1.49 1.40
## Proportion Var 0.15 0.12 0.11 0.10
## Cumulative Var 0.15 0.27 0.38 0.48
## Proportion Explained 0.31 0.26 0.22 0.21
## Cumulative Proportion 0.31 0.57 0.79 1.00
##
## With factor correlations of
## ML1 ML3 ML4 ML2
## ML1 1.00 0.41 0.17 0.05
## ML3 0.41 1.00 0.24 0.22
## ML4 0.17 0.24 1.00 0.27
## ML2 0.05 0.22 0.27 1.00
##
## Mean item complexity = 1.1
## Test of the hypothesis that 4 factors are sufficient.
##
## The degrees of freedom for the null model are 91 and the objective function was 3.93 with Chi Square of 1148.87
## The degrees of freedom for the model are 41 and the objective function was 0.2
##
## The root mean square of the residuals (RMSR) is 0.03
## The df corrected root mean square of the residuals is 0.04
##
## The harmonic number of observations is 299 with the empirical chi square 34.14 with prob < 0.77
## The total number of observations was 299 with Likelihood Chi Square = 56.64 with prob < 0.053
##
## Tucker Lewis Index of factoring reliability = 0.967
## RMSEA index = 0.036 and the 90 % confidence intervals are 0 0.057
## BIC = -177.08
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy
## ML1 ML3 ML4 ML2
## Correlation of (regression) scores with factors 0.92 0.89 0.87 0.87
## Multiple R square of scores with factors 0.84 0.79 0.76 0.76
## Minimum correlation of possible factor scores 0.68 0.57 0.51 0.52
factanal(data5, rotation = 'promax', factors = 4)
##
## Call:
## factanal(x = data5, factors = 4, rotation = "promax")
##
## Uniquenesses:
## v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13
## 0.597 0.461 0.470 0.724 0.619 0.434 0.442 0.722 0.541 0.351 0.656 0.508 0.429
## v14
## 0.310
##
## Loadings:
## Factor1 Factor2 Factor3 Factor4
## v1 0.124 0.618 -0.112
## v2 0.748
## v3 0.666 0.187
## v4 0.476 0.135
## v5 0.644 -0.182
## v6 0.750
## v7 0.715
## v8 0.117 0.496
## v9 -0.130 0.706
## v10 0.768
## v11 0.573
## v12 0.699
## v13 0.756
## v14 0.818
##
## Factor1 Factor2 Factor3 Factor4
## SS loadings 2.071 1.766 1.445 1.412
## Proportion Var 0.148 0.126 0.103 0.101
## Cumulative Var 0.148 0.274 0.377 0.478
##
## Factor Correlations:
## Factor1 Factor2 Factor3 Factor4
## Factor1 1.0000 -0.0523 0.406 -0.154
## Factor2 -0.0523 1.0000 -0.228 0.243
## Factor3 0.4058 -0.2279 1.000 -0.224
## Factor4 -0.1544 0.2425 -0.224 1.000
##
## Test of the hypothesis that 4 factors are sufficient.
## The chi square statistic is 56.64 on 41 degrees of freedom.
## The p-value is 0.0528
- 앞서 진행했던 것과 마찬가지로 prallel analysis를 통해 4개의 요인을 추출해줍니다.
1-2. 본 데이터는 몇 가지 요인을 추출하는 것이 적절한가? (3가지 방법 모두를 활용)
-> parallel 분석 결과, 4개의 요인을 추출하는 것이 적절한 것으로 보입니다.
6.4 EFA(ML)
1-3. 1-2의 결과를 바탕으로 최대우도를 사용하여 탐색적 요인분석을 실시하고 그 결과를 보고하라.
- 이제 4개 요인으로 EFA 를 진행해보겠습니다.
6.4.1 Mardia’s test
ML은 다변량 정규분포를 가정하고 진행하는 방법이기에 다변량 정규성 가정을 충족하는지
Mardia’s test를 진행해보겠습니다.Mardia’s test는 MVN패키지의 mvn()함수로 확인하실 수 있습니다.
library(MVN)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## sROC 0.1-2 loaded
mvn(data5,mvnTest ="mardia")
## $multivariateNormality
## Test Statistic p value Result
## 1 Mardia Skewness 1050.15474600308 2.84348330414713e-32 NO
## 2 Mardia Kurtosis 7.99445729064163 1.33226762955019e-15 NO
## 3 MVN <NA> <NA> NO
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Shapiro-Wilk v1 0.8667 <0.001 NO
## 2 Shapiro-Wilk v2 0.8765 <0.001 NO
## 3 Shapiro-Wilk v3 0.8761 <0.001 NO
## 4 Shapiro-Wilk v4 0.8338 <0.001 NO
## 5 Shapiro-Wilk v5 0.8148 <0.001 NO
## 6 Shapiro-Wilk v6 0.7829 <0.001 NO
## 7 Shapiro-Wilk v7 0.7156 <0.001 NO
## 8 Shapiro-Wilk v8 0.6886 <0.001 NO
## 9 Shapiro-Wilk v9 0.8850 <0.001 NO
## 10 Shapiro-Wilk v10 0.8535 <0.001 NO
## 11 Shapiro-Wilk v11 0.7127 <0.001 NO
## 12 Shapiro-Wilk v12 0.8624 <0.001 NO
## 13 Shapiro-Wilk v13 0.8326 <0.001 NO
## 14 Shapiro-Wilk v14 0.8304 <0.001 NO
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th 75th Skew Kurtosis
## v1 299 2.314381 0.8363555 2 1 5 2 3.0 0.04637994 -0.5032636
## v2 299 2.498328 0.8722977 2 1 4 2 3.0 0.00510207 -0.6969371
## v3 299 2.501672 0.9099546 3 1 4 2 3.0 -0.11147207 -0.8104620
## v4 299 1.926421 0.8560508 2 1 4 1 2.5 0.52418934 -0.5971154
## v5 299 1.882943 0.7438856 2 1 4 1 2.0 0.58001549 0.1107384
## v6 299 1.712375 0.6981861 2 1 4 1 2.0 0.69239819 0.1656159
## v7 299 1.515050 0.6520033 1 1 4 1 2.0 1.10292414 0.9791819
## v8 299 1.494983 0.7252458 1 1 4 1 2.0 1.35881437 1.1921259
## v9 299 2.448161 1.0712009 2 1 5 2 3.0 0.10161450 -1.0621436
## v10 299 2.063545 0.8857421 2 1 4 1 3.0 0.33860739 -0.8077635
## v11 299 1.538462 0.7380086 1 1 4 1 2.0 1.26578494 1.0343536
## v12 299 2.163880 0.9249885 2 1 4 1 3.0 0.40708549 -0.6857645
## v13 299 1.949833 0.9452238 2 1 5 1 3.0 0.76476180 -0.1269546
## v14 299 1.929766 0.8660740 2 1 4 1 2.0 0.66001637 -0.2751217
- 분석결과 다변량 정규성을 만족하지 못하는 것으로 나왔기에,
다변량 정규분포에 민감한 최대우도법을 사용해서는 안되지만,
과제의 조건에 맞춰 최대우도법을 활용하여 탐색적 요인분석을 진행해보겠습니다.
6.4.2 탐색적 요인분석
%>%
data5 fa(nfactors = 4, fm = "ml", rotate = "promax") %>%
summary()
##
## Factor analysis with Call: fa(r = ., nfactors = 4, rotate = "promax", fm = "ml")
##
## Test of the hypothesis that 4 factors are sufficient.
## The degrees of freedom for the model is 41 and the objective function was 0.2
## The number of observations was 299 with Chi Square = 56.64 with prob < 0.053
##
## The root mean square of the residuals (RMSA) is 0.03
## The df corrected root mean square of the residuals is 0.04
##
## Tucker Lewis Index of factoring reliability = 0.967
## RMSEA index = 0.036 and the 10 % confidence intervals are 0 0.057
## BIC = -177.08
## With factor correlations of
## ML1 ML3 ML4 ML2
## ML1 1.00 0.41 0.17 0.05
## ML3 0.41 1.00 0.24 0.22
## ML4 0.17 0.24 1.00 0.27
## ML2 0.05 0.22 0.27 1.00
- 표본의 크기에 따른 최소 factor loading 값은 아래와 같습니다.
표본의 크기 | 최소 요인 적재 값 |
---|---|
50 | .75 |
100 | .55 |
150 | .45 |
200 | .40 |
250 | .35 |
350 | .30 |
이번 과제의 표본은 n=299이므로, 최소 .35만 넘으면 됩니다.
4개의 요인으로 잘 묶였는지 factor loading값 기준으로 살펴보면,
아래와 같이 네개의 요인으로 묶이는 것을 확인할 수 있습니다.- ML1: V11, V12, V13, V14
- ML2: V8, V9, V10
- ML3: V4, V5, V6, V7
- ML4: V1, V2, V3
%>% fa(nfactors = 4, fm = "ml", rotate = "promax") -> fa5
data5 %>% print.psych(sort = TRUE) fa5
## Factor Analysis using method = ml
## Call: fa(r = ., nfactors = 4, rotate = "promax", fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## item ML1 ML3 ML4 ML2 h2 u2 com
## v14 14 0.82 0.04 -0.05 0.01 0.69 0.31 1.0
## v13 13 0.76 -0.02 0.04 -0.07 0.57 0.43 1.0
## v12 12 0.70 -0.03 0.02 0.05 0.49 0.51 1.0
## v11 11 0.58 0.03 -0.03 0.02 0.34 0.66 1.0
## v6 6 0.00 0.74 0.07 -0.03 0.57 0.43 1.0
## v7 7 0.07 0.71 0.06 -0.04 0.56 0.44 1.0
## v5 5 -0.01 0.65 -0.16 -0.06 0.38 0.62 1.1
## v4 4 -0.02 0.47 0.05 0.13 0.28 0.72 1.2
## v2 2 0.00 -0.08 0.76 -0.04 0.54 0.46 1.0
## v3 3 -0.01 -0.05 0.67 0.17 0.53 0.47 1.1
## v1 1 0.00 0.09 0.63 -0.13 0.40 0.60 1.1
## v10 10 0.08 0.00 0.09 0.76 0.65 0.35 1.1
## v9 9 0.00 -0.13 -0.09 0.71 0.46 0.54 1.1
## v8 8 -0.05 0.12 -0.01 0.50 0.28 0.72 1.1
##
## ML1 ML3 ML4 ML2
## SS loadings 2.11 1.73 1.49 1.40
## Proportion Var 0.15 0.12 0.11 0.10
## Cumulative Var 0.15 0.27 0.38 0.48
## Proportion Explained 0.31 0.26 0.22 0.21
## Cumulative Proportion 0.31 0.57 0.79 1.00
##
## With factor correlations of
## ML1 ML3 ML4 ML2
## ML1 1.00 0.41 0.17 0.05
## ML3 0.41 1.00 0.24 0.22
## ML4 0.17 0.24 1.00 0.27
## ML2 0.05 0.22 0.27 1.00
##
## Mean item complexity = 1.1
## Test of the hypothesis that 4 factors are sufficient.
##
## The degrees of freedom for the null model are 91 and the objective function was 3.93 with Chi Square of 1148.87
## The degrees of freedom for the model are 41 and the objective function was 0.2
##
## The root mean square of the residuals (RMSR) is 0.03
## The df corrected root mean square of the residuals is 0.04
##
## The harmonic number of observations is 299 with the empirical chi square 34.14 with prob < 0.77
## The total number of observations was 299 with Likelihood Chi Square = 56.64 with prob < 0.053
##
## Tucker Lewis Index of factoring reliability = 0.967
## RMSEA index = 0.036 and the 90 % confidence intervals are 0 0.057
## BIC = -177.08
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy
## ML1 ML3 ML4 ML2
## Correlation of (regression) scores with factors 0.92 0.89 0.87 0.87
## Multiple R square of scores with factors 0.84 0.79 0.76 0.76
## Minimum correlation of possible factor scores 0.68 0.57 0.51 0.52
6.5 EFA(ML) Plot
1-4. fa.diagram()을 사용하여 1-3의 결과를 제목은 EFA Results이고 factor 간의 상관관계가 모두 표현된 plot으로 표현하라.
%>%
data5 fa(nfactors = 4, fm = "ml", rotate = "promax") %>%
fa.diagram(digits = 3, errors = FALSE, main = "EFA Results", cut = .35)
위와 같이 간단하게 그림으로 표현할 수 있습니다.
수업에서 말씀해주셨듯이, 잠재변수가 원 안에 들어가 있어야 하므로, structure.diagram을 활용해서 그려봅니다.
fa(data5, nfactors = 4, fm = "ml", rotate = "promax")$loadings %>% fa.sort %>%
structure.diagram(e.size = .15, digits = 3, cut = .35, main = "EFA Results")

그림1
- 이번에는 semPlot Package를 활용하여 semPaths함수로 그려봅니다.
library(semPlot)
## Registered S3 methods overwritten by 'lme4':
## method from
## cooks.distance.influence.merMod car
## influence.merMod car
## dfbeta.influence.merMod car
## dfbetas.influence.merMod car
fa(data5, nfactors = 4, fm = "ml", rotate = "promax")$loadings %>%
semPaths(what = "est", edge.label.cex = 1.5, edge.label.position = .8,
edge.color = "black", edge.width = .2, rotation = 4, sizeMan = 4,
shapeMan = "rectangle", sizeLat = 8, title = TRUE, style = "mx",
minimum = .35, cut = .35, width = 600)
title("EFA Result")