38.차원분석 - 요인분석(FA).Rmd
0.03MB
38.차원분석---요인분석-FA-.html
2.42MB

 

https://www.youtube.com/watch?v=QBg9R0uIBKY&list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&index=38

목표: 요인분석 이해

\(PC_1 = a_{11}x_1 + a_{12}x_2 + a_{13}x_3 + a_{14}x_4 + a_{15}x_5\)

1. 요인분석 개요

  • 요인분석 개요
    • 요인분석은 관측 가능한 여러 변수로부터 소수의 요인을 추출하여 이 요인들로 통해 변수 간 관련성을 설명하려는 통계 데이터 분석기법임
      • 제품에 대한 소비자 평가를 위한 다수의 제품 평가 설문항목을 만들어 소비자로부터 데이터를 수집한 후 그 데이터를 바탕으로 다수의 항목을 소수의 요인으로 축약해서 나타낼 수 있음
      • 이 경우, 20개 제품평가 항목을 품질·비스·가치 등과 같은 3가지 잠재요인의 함수로 표현가능
  • 요인분석 산출값
    • 요인분석은 여러 관측변수로부터 직접적으로 관측이 불가한 공통의 요인 추출에 이용됨
    • 요인분석을 수행하면 요인과 변수 간의 관계를 보여주는 요인적재값이 산출됨
    • 또한 변수들의 선형결합으로 산출되는 요인점수도 구할 수 있음
  • 주성분분석 - 요인분석 비교
    • 요인적재값과 요인점수는 각각 주성분분석에서의 성분적재값과 성분점수에 대응 됨
    • 이런 점에서 요인분석은 그 결과만 보면 주성분분석과 유사함
    • 하지만 주성분분석과 달리 요인분석은 측정가능한 변수들로부터 그 안에 잠재되어 있는 해석 가능한 소수의 요인을 찾는 것을 주요 목적으로 함
  • 이를 위해 요인과 변수 간의 관계가 명확히 드러나도록 요인의 축을 회전시키는 방법을 사용함
    • 요인의 축을 회전시키면
      • 각 요인은 몇몇 변수와의 요인적재값이 커지는 반면
      • 다른 변수와의 요인적재값은 작아지게 됨
    • 그렇게 되면 요인적재값이 큰 변수들로
      • 각 요인을 의미있게 해석하는 것이 가능해지고
      • 각 요인들은 서로 쉽게 구별될 수 있음

2. 요인분석을 위한 개념적 모델

  • 슬라이드 설명
    • 여기서 F1과 F2는 우리가 찾고자 하는 잠재요인임
    • \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(x_5\) 는 실제 관측된 변수임
    • 제품평가의 예에서 본다면 F1과 F2는 품질·서비스·가치 등에 해당 됨
    • \(x_1\) \(\sim\) \(x_5\) 까지는 실제 제품 평가를 위해 사용한 설문항목에 해당 됨
  • 요인 설명
    • 요인 F1가 F2는 변수 \(x_1\) \(\sim\) \(x_5\) 기저에 내재돼 있는 것으로 가정함
    • 따라서 잠재된 요인은 관측된 변수를 설명하는 것으로 가정함
    • 위 그림에서도 요인은 변수에 영향을 미치는 것으로 화살표로 표시돼 있음
  • 오차 설명
    • \(U_1\) \(\sim\) \(U_5\)는 오차를 나타냄
    • 이 오차들은 요인에 의해서 설명되지 않는 관측변수의 분산을 나타냄
  • 요인과 오차 추정
    • 관측변수를 제외한 요인과 오차는 직접 측정이 불가하여 변수 간 상관관계를 통해 간접 추정
    • 여기서 요인 간의 곡선은 두 요인이 상관관계를 갖는다는 것을 나타냄
    • 요인추출 방법에 따라 요인간의 상관관계를 그림처럼 허용할 수도 있고 그렇지 않을 수도 있음
  • 요인과 변수와 오차 간 관계를 수식으로 표현
    • 요인과 변수와 오차 간 관계는 아래와 같은 수식으로 표현 가능
    • \(x_1 = b_{11} \,×\, F1 \,+\, b_{12} \,×\, F_2 \,+\, U_1\)
    • 변수 \(x_1\)\(b_{11}\)\(b_{12}\) 2개의 가중치에 의해 두 요인의 선형결합으로 설명됨
    • 두 요인의 의해서 설명되지 않는 부분은 오차항으로서 \(U_1\)으로 표현됨
    • 이 수식에는 두가지 종류의 요인이 있음
        1. 공통요인: \(F_1\)\(F_2\)가 해당되고, 모든 변수는 이 두 요인의 함수로서 표현될 수 있음
        1. 고유요인: \(U_1\)으로 공통요인에서 설명될 수 없는 변수 고유의 성분과 오차를 나타냄
    • 이 수식을 i번째 변수에 대해서 일반화한 수식은 아래와 같음
      • 요인적재값
        • 여기서 요인을 결합하기 위해 사용한 계수 \(b_{ik}\)요인적재값이라고 함
        • 요인적재값은 각 요인에 할당된 가중치로써의 역할을 수행함
    • \(x_i = b_{i1}F1 \,+\, b_{i2}F_2 \,+\, \dots \,+\, b_{ik}F_k \,+\, U_i\)
  • 요인 산출
    • 요인은 직접 측정이 불가하여 관측된 변수로부터 추론되며 변수들의 선형결합으로 추정됨
    • 예) \(F_1\)요인은 5개 변수에 의해 이와 같이 표현될 수 있음
    • \(F_1 = w_{11} \,×\, x_1 \,+\, w_{12} \,×\, x_2 \,+\, w_{13} \,×\, x_3 \,+\, w_{14} \,×\, x_4\,+\, w_{15} \,×\, x_5\)
    • 5개 변수 모두가 F1요인 추정에 기여할 수 있음
    • 하지만 요인의 특성이 명확히 드러가기 위해서는 해당 요인과 밀접한 관련을 갖는 일부 변수만이 높은 가중치를 갖는 것이 바람직함
    • 이 수식을 j번째 요인에 대해서 일반화하면 아래와 같이 나타낼 수 있음
    • \(F_j = w_{j1}x_1 \,+\, w_{j2}x_2 \,+\, \dots \,+\, w_{jp}x_p\)
    • 요인점수 계수
      • 여기서 변수들을 선형결합하기 위해 사용한 변수 \(w_{jp}\)는 요인점수 계수 라고 함
    • 요인점수 산출
      • 각 케이스에 대한 요인점수는 위 수식을 바탕으로 변수의 표준화값과 요인점수 계수로 계산됨
      • 이렇게 산출된 요인점수는 다수의 변수를 소수의 요인으로 축약할 때 실제 관측값을 대신하여 각종 분석에 사용될 수 있음

3. 요인분석 수행절차

3-1. 데이터셋 설명

  • ade4 패키지 olympic데이터셋 설명
    • 올림픽 데이터셋에는 올림픽 육상 10종 경기에 참가한 33명 선수 기록이 리스트 형식으로 저장됨
    • tab원소에는 10개 종목에 대한 선수별 기록이 데이터프레임 형식으로 저장돼 있음
    • score원소에는 최종 점수가 벡터 형식으로 저장되어 있음
library(ade4)
data(olympic)
str(olympic)
## List of 2
##  $ tab  :'data.frame':   33 obs. of  10 variables:
##   ..$ 100 : num [1:33] 11.2 10.9 11.2 10.6 11 ...
##   ..$ long: num [1:33] 7.43 7.45 7.44 7.38 7.43 7.72 7.05 6.95 7.12 7.28 ...
##   ..$ poid: num [1:33] 15.5 15 14.2 15 12.9 ...
##   ..$ haut: num [1:33] 2.27 1.97 1.97 2.03 1.97 2.12 2.06 2 2.03 1.97 ...
##   ..$ 400 : num [1:33] 48.9 47.7 48.3 49.1 47.4 ...
##   ..$ 110 : num [1:33] 15.1 14.5 14.8 14.7 14.4 ...
##   ..$ disq: num [1:33] 49.3 44.4 43.7 44.8 41.2 ...
##   ..$ perc: num [1:33] 4.7 5.1 5.2 4.9 5.2 4.9 5.7 4.8 4.9 5.2 ...
##   ..$ jave: num [1:33] 61.3 61.8 64.2 64 57.5 ...
##   ..$ 1500: num [1:33] 269 273 263 285 257 ...
##  $ score: num [1:33] 8488 8399 8328 8306 8286 ...
  • tab원소에 포함된 10개 변수와 각 변수가 나타내는 종목은 데이터셋 도움말로 확인가능
?olympic
  • 올림픽 데이터셋 도움말을 보면 10개 변수에 대한 설명이 포함돼 있음
    • 100: 100m 경기 / long: 멀리뛰기 경기 / poid: 포환던지기 / haut: 높이뛰기
    • 400: 400m 경기 / 110: 110m 장애물 경기 / disq: 원반 던지기 / perc: 장대 높이뛰기
    • jave: 창던지기 / 1500: 1500m 경기
    • 10개의 변수로부터 요인분석을 이용해서 요인을 추출할 것임

3-2. 요인 개수 결정

  • 요인분석에서 우선 해야할 일은 추출할 요인의 개수를 결정하는 것임
    • 가능한 많은 분산을 설명하는 최소한의 요인을 추출함 (요인분석 주요 목적이 데이터 복잡성을 줄이면서 해석 가능한 요인을 추출하는 것이기 때문)
    • 몇가지 기준으로 요인개수를 결정할 수 있음
      • #1 고유값 이용
        • 가장 많이 사용하는 요인개수 결정 기준으로
        • 여기서 고유값은 요인이 설명하는 분산의 양을 나타냄
        • 고유값 기준에 의하면
          • 1보다 큰 고유값을 갖는 요인의 개수만큼 추출함
          • 1보다 작은 고유값을 갖는 요인은 원래의 개별변수가 갖고 있는 분산 1 보다도 작기 때문에 이를 새로운 변수로 추출하는 것은 의미가 없음
          • 왜냐하면 새로 추출된 요인에 의해 설명되는 분산이 기존 변수 1개의 분산에도 못 미치기 때문임
      • #2 스크리도표(scree plot) 이용
        • 고유값과 대응되는 요인 간의 관계를 시각적으로 확인하여 이를 통해 요인개수 결정 가능
        • 급격한 경사 이후 완만한 경사가 나타나는 굴절이 생기는 곳 주변에서 요인의 개수를 결정
      • #3 시뮬레이션 이용
        • 시뮬레이션을 통해 요인의 개수를 결정할 수도 있음
        • 원래의 데이트셋과 동일한 표본크기를 갖는 무작위 데이터 행렬로부터 고유값을 추출하는 방식으로 시뮬레이션을 수행함하여 요인개수를 결정할 수 있음
        • 실제 데이터로 계산한 고유값이 무작위 데이터 행렬을 반복 생성하여 계산한 고유값 평균보다 큰 지점에서 요인개수 결정
      • #4 요인에 의해 설명되는 분산의 비율 이용
        • 요인에 의해 설명되는 분산의 비율을 바탕으로 요인개수를 결정할 수도 있음
        • 설명되는 누적분산비율과 그에 대응되는 요인개수를 검토해
          • 가능한 작은 수의 요인으로,
          • 될 수 있는 대로 많은 분산을 설명하는 적정 요인의 개수를 결정함
          • 일반적으로 추출된 요인들이 총 분산의 60% 이상 설명할 수 있으면 적절하다고 얘기함
          • 하지만 이 기준은 절대적인 것은 아니고 분석하는 문제의 성격에 따라 달라질 수 있음

3-3. 요인 개수 결정 함수 - fa.parallel()

  • fa.parallel()로 추출할 요인의 개수를 결정하기 위한 위의 방식을 동시에 비교 평가 가능
library(psych)
?fa.parallel
  • fa.parallel() 인수설명
    • 1st: 데이터 프레임이나 행렬 형식의 사용할 데이터셋을 지정
    • fm: 요인추출 방법 지정. 아래 여러 사용가능한 요인추출 방식으로 지정 가능
      • minres가 기본값으로 ml, uls, wls, gls, pa 사용가능
      • 여기서는 비교적 사용빈도가 높은 ml(maximum likelihood, 최대우도법) 방식으로 요인추출
    • fa: 요인분석을 위해서는 fa로 지정함
    • n.iter: 시뮬레이션 횟수를 지정함. 여기서는 100으로 지정함
fa.parallel(olympic$tab, fm="ml", fa="fa", n.iter=100)
## Parallel analysis suggests that the number of factors =  2  and the number of components =  NA
  • 결과
    • 스크리도표를 얻을 수 있음
    • 실제 고유값을 바탕으로 한 스크리 테스트 결과는 실선으로 그려짐
    • 그리고 가상의 무작위 데이터를 기반으로 계산한 고유값 평균은 점선으로 나타남
  • 적정요인 개수 결정
    • 고유값 이용
      • 고유값 기준에 의하면 1보다 큰 고유값을 갖는 요인의 개수만큼 추출함
      • 여기서는 2개의 요인이 1보다 큰 고유값을 갖고 있어 2개를 선택하는 것이 적절해 보임
    • 스크리 도표 이용
      • 스크리 도표 상 급격한 경사 이후 완만한 경사가 나타나는 굴절 주변에서 요인개수 결정
      • 이 기준에 따르면 여기서는 3개 요인을 선택하는 것이 적절해 보임
    • 시뮬레이션 이용
      • 실제 데이터를 이용하여 계산한 고유값이 무작위 데이터 행렬을 반복 생성하여 계산한 고유값 평균보다 큰 지점에서 요인개수 결정 가능
      • 이 기준에 따르면 여기서는 파란 실선이 빨간 점선 위쪽에 있는 부분에서 요인개수 결정 가능
      • 따라서 2개 요인을 선택하는 것이 적절해 보임
    • 따라서 위 기준들을 바탕으로 적정 요인의 개수를 결정하면 2~3개의 요인이 됨

3-4. 요인 개수 결정 함수 - nScree()

  • ntfs패키지 nScree()는 복수의 방법을 적용해 스크리테스트로 적정 요인개수를 추정함
  • 여기서는 4가지 방법이 적정요인의 개수를 추정하는데 사용됨
library(nFactors)
nScree(olympic$tab)
##   noc naf nparallel nkaiser
## 1   2   2         2       2
  • 결과: 4방법 모두 2개 요인을 적정 요인개수로 추천하고 있음

3-5. 고유값 산출 함수 - eigen()

  • eigen()로 상관계수 행렬로부터 직접 고유값을 구해 볼 수 있음
eigen(cor(olympic$tab))
## eigen() decomposition
## $values
##  [1] 3.4182381 2.6063931 0.9432964 0.8780212 0.5566267 0.4912275 0.4305952
##  [8] 0.3067981 0.2669494 0.1018542
## 
## $vectors
##             [,1]       [,2]        [,3]        [,4]         [,5]        [,6]
##  [1,]  0.4158823  0.1488081  0.26747198  0.08833244 -0.442314456  0.03071237
##  [2,] -0.3940515 -0.1520815  0.16894945  0.24424963  0.368913901 -0.09378242
##  [3,] -0.2691057  0.4835374 -0.09853273  0.10776276 -0.009754680  0.23002054
##  [4,] -0.2122818  0.0278985  0.85498656 -0.38794393 -0.001876311  0.07454380
##  [5,]  0.3558474  0.3521598  0.18949642 -0.08057457  0.146965351 -0.32692886
##  [6,]  0.4334816  0.0695682  0.12616012  0.38229029 -0.088802794  0.21049130
##  [7,] -0.1757923  0.5033347 -0.04609969 -0.02558404  0.019358607  0.61491241
##  [8,] -0.3840821  0.1495820 -0.13687235 -0.14396548 -0.716743474 -0.34776037
##  [9,] -0.1799436  0.3719570  0.19232803  0.60046566  0.095582043 -0.43744387
## [10,]  0.1701426  0.4209653 -0.22255233 -0.48564231  0.339772188 -0.30032419
##             [,7]         [,8]        [,9]       [,10]
##  [1,]  0.2543985  0.663712826 -0.10839531 -0.10948045
##  [2,]  0.7505343  0.141264141  0.04613910 -0.05580431
##  [3,] -0.1106637  0.072505560  0.42247611 -0.65073655
##  [4,] -0.1351242 -0.155435871 -0.10206505 -0.11941181
##  [5,]  0.1413388 -0.146839303  0.65076229  0.33681395
##  [6,]  0.2725296 -0.639003579 -0.20723854 -0.25971800
##  [7,]  0.1439726  0.009400445 -0.16724055  0.53450315
##  [8,]  0.2732665 -0.276873049 -0.01766443  0.06589572
##  [9,] -0.3419099  0.058519366 -0.30619617  0.13093187
## [10,]  0.1868704  0.007310045 -0.45688227 -0.24311846
  • 1보다 큰 고유값을 확인하여 요인의 개수를 결정함
  • 여기서는 처음 2개의 고유값이 1보다 크기 때문에 두 개의 요인이 적정 요인개수로 선택될 수 있음. [1] 3.4182381 2.6063931
  • 다양한 방법으로 적정 요인의 개수를 추정하였지만 최종 결정은 그러한 선택의 결과 추출한 요인들이 얼마나 분석에 유용한 지에 달려 있음
    • 따라서 고유값, 스크리도표 시뮬레이션 방식 등에 따라 제안된 적정요인 개수 이외에 추가로 몇 개의 선택대안에 대한 요인분석을 수행 후 가장 의미있는 해석이 가능한 모델을 선택하는 것이 바람직함

3-5. 요인분석 수행 - factanal()

  • 요인분석은 factanal()로 수행할 수 있음
    • factanal()은 최대우도법에 의해 요인을 추출하고 요인적재값을 추정함
    • factanal() 인수설명
      • 1st인수: 요인분석에 사용할 데이터셋 지정
      • factors: 추출할 요인의 개수를 지정함. 여기서는 2개의 요인을 추출함
      • scores: 요인점수를 계산할 때 사용할 방법을 지정할 수 있음. “regression”과 “Bartlett” 두 가지 방법을 지정할 수 있음
        • 아무것도 지정하지 않으면 기본값으로 none이 지정돼 요인점수를 계산 하지 않음. 여기서는 “regression”을 지정해 회귀분석 방법으로 요인점수 추정함
fa <- factanal(olympic$tab, factors=2, scores="regression" )
fa
## 
## Call:
## factanal(x = olympic$tab, factors = 2, scores = "regression")
## 
## Uniquenesses:
##   100  long  poid  haut   400   110  disq  perc  jave  1500 
## 0.396 0.547 0.022 0.933 0.287 0.420 0.318 0.575 0.638 0.631 
## 
## Loadings:
##      Factor1 Factor2
## 100   0.772         
## long -0.672         
## poid -0.155   0.977 
## haut -0.241         
## 400   0.814   0.226 
## 110   0.739  -0.185 
## disq          0.826 
## perc -0.505   0.413 
## jave          0.600 
## 1500  0.488   0.362 
## 
##                Factor1 Factor2
## SS loadings      2.834   2.401
## Proportion Var   0.283   0.240
## Cumulative Var   0.283   0.523
## 
## Test of the hypothesis that 2 factors are sufficient.
## The chi square statistic is 19.12 on 26 degrees of freedom.
## The p-value is 0.831
  • 결과
    • Loadings이하의 숫자는 요인과 변수 간 관련성을 보여주는 요인적재값을 나타냄
    • 요인적재값은 요인분석 객체 loadings원소 에서도 바로 출력 가능
fa$loadings
## 
## Loadings:
##      Factor1 Factor2
## 100   0.772         
## long -0.672         
## poid -0.155   0.977 
## haut -0.241         
## 400   0.814   0.226 
## 110   0.739  -0.185 
## disq          0.826 
## perc -0.505   0.413 
## jave          0.600 
## 1500  0.488   0.362 
## 
##                Factor1 Factor2
## SS loadings      2.834   2.401
## Proportion Var   0.283   0.240
## Cumulative Var   0.283   0.523
  • 결과
    • 숫자가 나오지 않는 부분이 있는데 이는 큰 요인적재값의 패턴이 보다 잘 드러나도록 하기 위해서 기본적으로 작은 요인적재값은 출력되지 않음
    • 기본적으로 0.1보다 작은 값들은 출력되지 않음
    • 모든 숫자를 다 출력하고 싶으면 print()로 출력할 최소 요인적재값 변경가능
      • print() cutoff인수에 출력할 최소 요인적재값을 지정함
      • 예를 들어 0.001 같이 작은 숫자 모든 숫자를 화면에 출력시킬 수 있음
print(fa$loadings, cutoff=0.001)
## 
## Loadings:
##      Factor1 Factor2
## 100   0.772  -0.089 
## long -0.672   0.041 
## poid -0.155   0.977 
## haut -0.241   0.095 
## 400   0.814   0.226 
## 110   0.739  -0.185 
## disq  0.007   0.826 
## perc -0.505   0.413 
## jave -0.049   0.600 
## 1500  0.488   0.362 
## 
##                Factor1 Factor2
## SS loadings      2.834   2.401
## Proportion Var   0.283   0.240
## Cumulative Var   0.283   0.523

3-6. 공통성

  • 데이터셋에 포함된 이들 10개의 변수는 요인적재값을 가중치로 2개의 공통요인, 즉 Factor1과 Factor2의 선형결합으로 나타낼 수 있음
    • 예) 첫 두 변수 100변수와 long변수는 Factor1과 Factor2로 아래와 같이 표현가능
    • \(100 = 0.772×Factor1-(0.089)×Factor2+U_{100} \; \to \; 0.772^2+(-0.089)^2 = 0.604\)
    • \(long = (-0.672)×Factor1+0.041×Factor2+U_{long} \; \to \; (-0.672)^2+0.041^2 = 0.453\)
  • 공통성 측정방법 1)
    • 추출된 두 요인이 각 변수를 얼마나 잘 설명하는지 평가하기 위해, 공통요인들에 의해 설명되는 각 변수의 분산비율을 파악함
    • 요인적재값은 요인과 변수 간의 상관계수를 나타내기 때문에 각 요인으로 설명되는 분산비율 합은 이들 요인적재값의 제곱합으로 구함
      • 100변수의 분산비율 설명
        • 100 변수의 분산은 \(Factor1\)에 의해 \(0.772^2\)만큼 설명되고 \(Factor2\)에 의해 \(-0.089^2\)만큼 설명됨
        • 이를 모두 합한 60.4%(0.604)는 \(Factor1\)\(Factor2\)에 의해 설명되는 100변수의 분산비율을 나타냄. 즉, 두 요인에 의해 60.4%가 설명됨
      • long변수의 분산비율 설명
        • long 변수의 분산은 \(Factor1\)에 의해 \(-0.672^2\)만큼 설명되고 \(Factor2\)에 의해 \(0.041^2\)만큼 설명됨
        • 이를 모두 합한 45.3%(0.453)는 \(Factor1\)\(Factor2\)에 의해 설명되는 long변수의 분산비율을 나타냄. 즉, 두 요인에 의해 45.3%가 설명됨
      • 60.4%, 45.3% 이 두 수치를 100변수와 long변수의 공통성이라고 함
        • 공통성은 공통요인으로 설명되는 분산의 비율로 추출된 요인이 각 변수를 얼마나 잘 설명하는지 평가함
        • 따라서 100변수는 long변수에 비해 두 요인으로 더 잘 설명되고 있음
  • 공통성 해석
    • 공통성은 0과 1 사이의 값을 가짐
      • 공통성이 0일 때: 공통요인이 변수의 분산을 전혀 설명하지 못한다는 의미
      • 공통성이 1일 때: 공통요인이 변수의 분산을 100% 완전히 설명한다는 의미
    • 공통요인에 의해 설명되지 않는 분산은 고유요인에 의해 설명되는 것으로 가정함
    • 각 변수에 대한 공통성이 크면 클수록
      • 요인추출이 성공적이라는 의미임
    • 각 변수에 대한 공통성이 작은 변수는
      • 공통요인으로 적절히 설명될 수 없다는 의미로
      • 만일 공통성의 값이 지나치게 작다면 해당 변수를 분석에서 제외할 필요가 있음
      • 왜냐하면 이러한 변수는 나머지 다른 변수들과 관련성이 작기 때문
    • 이런 공통성의 특성은 설문서의 설문항목 가운데서 다른 항목들과 관련성이 작은 항목을 찾아 내는데 효과적으로 활용할 수 있음
  • 고유요인 해석
    • 고유요인으로 설명되는 분산은 factanal() 출력결과에서 Uniquenesses 이하의 값임
    • 똑같은 정보를 요인분석 객체의 uniquenesses 원소에서 출력 가능
round(fa$uniquenesses, 3)
##   100  long  poid  haut   400   110  disq  perc  jave  1500 
## 0.396 0.547 0.022 0.933 0.287 0.420 0.318 0.575 0.638 0.631
  • 공통성 측정방법 2)
    • 공통성은 1) 각 요인으로 설명되는 분산비율 합 외에도 2) (1-고유요인에 의해 설명되는 분산)으로 측정 가능
1-round(fa$uniquenesses, 3)
##   100  long  poid  haut   400   110  disq  perc  jave  1500 
## 0.604 0.453 0.978 0.067 0.713 0.580 0.682 0.425 0.362 0.369
  • 결과
    • 위 슬라이드에서 확인한 long변수(0.604)와 100변수(0.453)의 공통성과 동일 결과임
    • 공통성의 값을 비교하면
      • haut(0.067), jave(0.362), 1500(0.369)변수는 공통성의 값이 작은 것을 볼 때
      • 다른 변수들에 비해 추출한 두 요인이 잘 설명하지 못하는 것으로 보임

4. 요인적재값과 요인-변수 간 관련성

4-1. 요인적재값과 요인-변수 간 관련성 해석

  • 높은 요인적재값은 해당 변수의 요인이 서로 밀접한 관계가 있다는 것을 의미함
  • 그래서 이러한 개념적 관련성을 통해 요인의 의미를 해석할 수 있음
print(fa$loadings, cutoff=0.001)
## 
## Loadings:
##      Factor1 Factor2
## 100   0.772  -0.089 
## long -0.672   0.041 
## poid -0.155   0.977 
## haut -0.241   0.095 
## 400   0.814   0.226 
## 110   0.739  -0.185 
## disq  0.007   0.826 
## perc -0.505   0.413 
## jave -0.049   0.600 
## 1500  0.488   0.362 
## 
##                Factor1 Factor2
## SS loadings      2.834   2.401
## Proportion Var   0.283   0.240
## Cumulative Var   0.283   0.523
  • 위의 요인적재값을 다시 살펴보면,
    • 요인 \(Factor1\)은 100, long, 400, 110변수와 상대적으로 높은 관련성을 같음
    • 요인 \(Factor2\)은 poid, disq, jave와 밀접한 관련을 가짐
    • perc와 1500변수는 두 요인 모두와 관련성을 가지나 \(Factor1\)과 상대적으로 더 큰 관련성을 가짐
    • haut변수는 어느 요인과도 큰 관련성 갖지 않지만 두 요인 중 \(Factor1\)과 조금 더 관련이 깊어 보임
    • 변수와 요인간 관계를 볼 때, \(Factor1\)은 달리기/\(Factor2\)은 던지기 종목과 높은 연관성을 가짐
      • \(Factor1\)과 밀접한 관련을 갖고 있는 4개 변수를 보면 모두 달리기와 관련된 변수임
        • 100: 100m 달리기, long: 멀리뛰기, 400: 400m 달리기, 110: 110m 장애물 경기임
      • \(Factor2\)과 밀접한 관련을 갖고 있는 3개 변수를 보면 모두 던지기와 관련된 종목임
        • poid: 포환 던지기, disq: 원반 던지기, jave: 창던지기 경기임

4-2. 요인-변수 간 관련성의 시각적 표현 - fractor.plot()

  • 요인과 변수 간 관련성을 .plot 를 이용하여 그래프로 표현할 수 있음
  • fractor.plot() 인수설
    • 1st: 요인분석 객체를 인수로 지정함
    • lables: 변수 이름을 지정 하여 변수 이름을 함께 출력함
    • pos: 텍스트의 위치를 지정. 1은 아래쪽, 2는 왼쪽, 3은 위쪽, 4는 오른쪽에 출력. 여기서는 4를 지정해 오른쪽에 출력함
    • title: 그래프의 제목을 지정함
factor.plot(fa, labels=colnames(olympic$tab), 
            pos=4, title="Factor Plot")
  • 결과
    • 던지기 종목인 poid disq jave는 Factor2축에 상대적으로 가까이 위치하며 perc haut 1500을 제외한 나머지인 달리기 종목 변수 100 long 400 110은 Factor1축에 비교적 가까이 위치함

4-3. 요인-변수 간 관련성의 시각적 표현 - heatmap.2()

  • gplots패키지 heatmap.2()으로 히트맵을 통한 요인과 변수 간의 관계를 시각화
  • 히트맵은 값의 강도에 따라 데이터를 색깔로 구분하여 표현하여 변수 간 관련성을 시각적으로 나타내는 데에도 유용하게 활용할 수 있음
  • gplots패키지 heatmap.2() 시각화
    • 히트맵 사용 색상을 RColorBrewer패키지 제공 색상을 사용함
    • heatmap.2() 인수설명
      • 1st: 행렬이나 데이터프레임 데이터셋 지정. 여기선 요인적재값 행렬지정
        • 그런데 요인적재값 부호는 중요하지 않고 크기만이 관심 대상이기 때문에 abs()로 요인적재값 행렬을 절대값으로 변환함
      • col: 색상을 지정함. RColorBrewer패키지 파란색 팔레트 이용하며, Blues팔레트로부터 9개 색상을 추출해 히트맵 색상으로 이용함
      • trace=“none”, key=FALSE, dendrogram=“none”: 그밖에 불필요한 옵션은 비활성화 시키겠음
      • cexCol=1.2: 히트맵 열에는 요인이름이 출력됨. 요인이름 글자크기를 표준크기보다 약간 크게 출력함
      • main: 히트맵 제목 지정
library(gplots)
library(RColorBrewer)
heatmap.2(abs(fa$loadings), col=brewer.pal(9, "Blues"), 
          trace="none", key=FALSE, dendrogram="none", 
          cexCol=1.2, main="Factor Loadings" )
  • 결과
    • 요인과 변수 간 관련성이 클수록 짙은 색으로 표현 됨
      • Factor1과 밀접한 관련을 갖는 4개 변수가 짙은 파란색으로 표현되고
      • Factor2와 밀접한 관련을 갖는 3개 변수가 짙은 파란색으로 표현되었음
    • 앞서 살펴본 대로 Factor1과 밀접한 관련을 갖는 4개 변수는 달리기 종목이고 Factor2와 밀접한 관련을 갖는 3개 변수는 던지기 종목임

4-4. 요인-변수 간 관련성의 시각적 표현 - semPaths(): 경로도

  • 추출요인과 개별변수 간 연결 관계를 더 명확히 시각적으로 보고자 할 때 경로도 이용
  • 경로도는 요인과 개별변수 간 연결 관계를 요인적재값과 함께 보여줌
  • semPlot패키지 semPaths()로 경로도를 시각화할 수 있음
  • semPaths() 인수설명
    • 1st: 요인분석 객체
    • what: 경로 상 요인적재값을 나타내기 위해 estimate을 의미하는 est를 지정함
    • residuals
      • 관측변수에 대한 잔차, 즉 오차를 그래프 상에 표현할 지 여부를 지정함
      • 여기서는 FALSE를 지정해 관측변수에 대한 잔차를 그래프 상에서 생략함
    • cut, posCol, negCol:
      • 일정 기준값보다 작거나 큰 요인적재값을 갖는 경로에 대해 각각 다른 색상을 지정 가능
      • 이렇게 함으로써 중요 경로를 좀 더 시각적으로 명확히 표현할 수 있음
      • posCol: 정(+)의 요인적재값을 갖는 경로에 대해 색상 지정
      • negCol: 부(-)의 요인적재값을 갖는 경로에 대해 색상 지정
      • posCol, negCol는 각각 2개의 색상을 지정해,
        • 1st는 cut인수 지정값보다 (절대값 기준) 작은 요인적재값 갖는 경로에 적용
        • 2nd는 cut인수 지정값보다 (절대값 기준) 큰 요인적재값 갖는 경로에 적용
        • 여기서는 1st색상으로 white를 지정해, cut인수 지정 요인적재값보다 작은 요인적재값을 갖는 경로는 흰색으로 표현돼 그래프 상 보이지 않게 됨
    • edge.label.cex: 요인적재값의 텍스트 크기 지정. 여기서는 0.75로 표준크기보다 약간 작은 값으로 지정
library(semPlot)
semPaths(fa, what="est", residuals=FALSE,
         cut=0.3, posCol=c("white", "darkgreen"), 
         negCol=c("white", "red"), 
         edge.label.cex=0.75)
  • 결과
    • +의 요인적재값은 녹색, -의 요인적재값은 빨간색으로 표현됨
    • cut인수에 지정된 0.3보다 작은 요인적재값을 갖는 경로는 그래프 상 표현되지 않음
    • 선 굵기는 요인적재값 크기에 비례해, 절대값 기준 요인적재값이 클수록 더 굵은 선으로 표현됨

5. 요인점수 산출

5-1. 요인점수 산출방법

  • 요인분석은
    • 요인과 변수 간의 구조를 보여주는 요인적재값의 추정과 함께
    • 개별 관측값에 대한 요인점수를 산출함
  • factanal()로 요인점수를 산출하기 위해 scores인수에 요인점수 추정 방법을 지정함
    • 추정방법으로 regression과 Bartlett을 지정할 수 있음
 factanal(olympic$tab, factors=2, scores="regression")
## 
## Call:
## factanal(x = olympic$tab, factors = 2, scores = "regression")
## 
## Uniquenesses:
##   100  long  poid  haut   400   110  disq  perc  jave  1500 
## 0.396 0.547 0.022 0.933 0.287 0.420 0.318 0.575 0.638 0.631 
## 
## Loadings:
##      Factor1 Factor2
## 100   0.772         
## long -0.672         
## poid -0.155   0.977 
## haut -0.241         
## 400   0.814   0.226 
## 110   0.739  -0.185 
## disq          0.826 
## perc -0.505   0.413 
## jave          0.600 
## 1500  0.488   0.362 
## 
##                Factor1 Factor2
## SS loadings      2.834   2.401
## Proportion Var   0.283   0.240
## Cumulative Var   0.283   0.523
## 
## Test of the hypothesis that 2 factors are sufficient.
## The chi square statistic is 19.12 on 26 degrees of freedom.
## The p-value is 0.831
# scores는 요인점수 산출 인수로 "none"(기본값), "regression", "Bartlett"을 지정할 수 있음
  • 요인점수는 요인분석을 수행하고 생성된 요인분석 객체의 scores원소에 저장되어 있음
  • 요인점수를 출력하면 아래와 같음
fa.scores <- fa$scores
fa.scores
##        Factor1     Factor2
## 1  -0.32438162  1.09966564
## 2  -1.43285690  0.52945579
## 3  -0.83737201  0.07079052
## 4  -0.92545629  0.67625571
## 5  -1.47986390 -0.98161177
## 6  -1.43948474 -0.47974194
## 7  -0.43152666  0.10711832
## 8  -0.90933792  0.80639017
## 9  -0.38386847  0.35666753
## 10 -0.39862118  0.94195081
## 11 -0.45600653  0.95288639
## 12 -0.32739908  0.30836290
## 13 -0.89032906 -0.92744296
## 14 -0.84771394 -0.36677942
## 15 -0.34600868  0.09442616
## 16 -0.12410501  0.37552335
## 17  1.77444897  1.91567694
## 18  0.56578762  1.99010221
## 19 -0.59905478 -0.57927673
## 20 -0.02998775  1.34981691
## 21  0.64928278  0.01628170
## 22  0.74255026 -0.05937437
## 23  0.60790677  0.36002212
## 24  0.55881285 -0.50923656
## 25 -0.01245654 -0.65228036
## 26  0.15075960 -1.73056050
## 27 -0.25240771 -1.05946516
## 28  1.38705005  0.41266570
## 29  0.18387745 -1.20153617
## 30  0.85528925 -0.63332096
## 31  1.99768998  0.35767656
## 32  1.37894365 -1.01797632
## 33  1.59583955 -2.52313220
  • 결과
    • 33명 운동선수의 10개 종목의 성적이 2개의 요인으로 축약돼서 표현됨
    • 이처럼 요인점수를 통해 개별변수 대신 더 적은 수의 요인으로 각 케이스 설명가능

5-1. 요인점수 시각화 - heatmap.2()

  • 운동선수별 요인점수를 그래프로 표현해 보겠음
  • 우선 Factor1, Factor2로 돼 있는 요인 이름을 좀 더 의미있는 이름으로 변경함
    • 달리기 능력과 밀접한 관련이 있는 Factor1은 Run으로 이름을 부여하고
    • 던지기 능력과 높은 연관을 갖는 Factor2는 Throw로 이름을 변경함
    • colnames(fa.scores) <- c(“Run”, “Throw)
  • 그 다음 heatmap.2()로 운동선수별 요인점수를 히트맵 그래프로 표현
    • 앞서 사용한 heatmap.2()를 재활용을 하고,
    • 색상은 Green -> Blue로 변해가는 팔레트인 RColorBrewer패키지 GnBu팔레트 사용
      • 녹색은 작은 값, 파란색은 큰 값을 나타내도록 함
      • 옅은 색은 중간 범위의 값을 나타냄
heatmap.2(fa.scores, col=brewer.pal(9, "GnBu"), 
          trace="none", key=FALSE, dendrogram="none", 
          cexCol=1.2, main="Factor Scores by Athletes" )
  • 결과: 히트맵에서 33명 운동선수들이 어느 요인과 높은 관련성을 갖는지 색상으로 확인됨

 

+ Recent posts