인자의 회전 (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