열렬히.뛰기

인자분석 : 코드 (3)

수학 & 통계 > 다변량분석 > 다변량분석 : 코드 > 인자분석 : 코드 (3)

인자의 회전 (1)

인자들을 조금 더 잘 확인하는 방법.

  • Varimax : T^{-1} = T^{\prime}로 직교회전
    • 각 공통인자(factor)별 loading의 제곱의 분산이 최대가 되게 함.
    • 극단적으로 값이 몰려있다는 이야기 = 분산이 크다.
  • quartimax
    • 각 변수(Xi)별 loading의 제곱값의 분산이 최대가 되게 함
  • promax : T^{-1} \neq T^{\prime}.
    • 공통인자 간 상관관계 존재.
r
   Factor1 Factor2 Factor3
X1  0.126   0.952   0.109 
X2  0.982   0.105  -0.141 
X3 -0.394  -0.903   0.157 
X4  0.269   0.234   0.884 
X5  0.839   0.283   0.156 
X6  0.488   0.388   0.304 
X7 -0.352  -0.180   0.230 
X8 -0.325  -0.181   0.926 

Varimax는 제곱 후 하단(🔽)으로 합친다고 생각
quartimax는 제곱 후 옆으로(▶) 합친다고 생각

코드로 보는 회전

r
library("GPArotation")
mm = 4
d1.fa.1 = factanal(d1, mm, rotation = 'none')
d1.fa.2 = factanal(d1, mm, rotation = 'varimax')
d1.fa.3 = factanal(d1, mm, rotation = 'promax')

실제로 위의 코드를 돌려 결과를 보면 promax가 좀 더 loadings에서 차이가 난다.

좀 더 결과를 잘 보기 위해, 여러가지 기법들을 써보자

코드로 보는 회전

r
# function
visual_2 = function(dd){
  dd = dd$loadings[1:8, ]
  mat = matrix(as.character(round(as.numeric(dd), 3)), 8)
  mat[abs(dd) < 0.6] = ''
  mat = data.frame(paste('X', 1:8, sep=''), mat)
  names(mat) = c('Var', 'Fact1', 'Fact2', 'Fact3')
  mat
}

rotation하지 않음

r
  Var  Fact1 Fact2 Fact3
1  X1        0.628      
2  X2  0.818            
3  X3 -0.817            
4  X4          0.9      
5  X5  0.664            
6  X6                   
7  X7                   
8  X8 -0.772 0.607          

'varimax' 적용

r
> dd = d1.fa.2
> visual_2(dd) 
  Var Fact1  Fact2 Fact3
1  X1        0.952      
2  X2 0.982             
3  X3       -0.903      
4  X4              0.884
5  X5 0.839             
6  X6                   
7  X7                   
8  X8              0.926

factor1 : X2, X5의 평균으로 해석 가능

factor2 : X1, X3 간의 차이를 나타내는 것.

factor3 : X4와 X8의 평균으로 해석 가능.

'promax' 적용

r
> dd = d1.fa.3
> visual_2(dd)
  Var Fact1  Fact2 Fact3
1  X1        1.099      
2  X2 1.112             
3  X3       -0.963      
4  X4              0.879
5  X5 0.867             
6  X6                   
7  X7                   
8  X8               0.94
  • factor 간의 독립성이 없음.

quartimax 적용

r
> d1.fa.4 = factanal(d1, mm, rotation='quartimax')
> visual_2(d1.fa.4)
  Var Fact1  Fact2 Fact3
1  X1        0.956      
2  X2 0.974             
3  X3       -0.921      
4  X4              0.883
5  X5 0.828             
6  X6                   
7  X7                   
8  X8              0.928

oblimin 적용

r
> d1.fa.5 = factanal(d1, mm, rotation='oblimin')
> visual_2(d1.fa.5)
  Var Fact1  Fact2 Fact3
1  X1        1.011      
2  X2 1.018             
3  X3       -0.915      
4  X4              0.891
5  X5 0.827             
6  X6                   
7  X7                   
8  X8              0.922