### 5주차, 제3장 인자분석 ###
아래 자료는 무료 검진프로그램인 PHI를 개발하여 프로그램 유효서을 모니터링 한 자료이다. 11개 검진 항목, 128명의 자료가 이으며 R을 이용하여 주성분인자법(principal factor method)를 이용한 인자분석을 해 보자.
1. 자료 가져오기 및 요약 통계
> setwd('C:/Rwork')
> med.data = read.table('medFactor.txt',header=T)
> head(med.data)
lung muscle liver skeleton kidneys heart step stamina stretch blow urine
1 20 16 52 10 24 23 19 20 23 29 67
2 24 16 52 7 27 16 16 15 31 33 59
3 19 21 57 18 22 23 16 19 42 40 61
4 24 21 62 12 31 25 17 17 36 36 77
5 29 18 62 14 26 27 15 20 33 29 88
6 18 19 51 15 29 23 19 20 50 37 54
> boxplot(med.data)
2. 초기 인자분석 실행하기
> library(psych)
> library(GPArotation) #인자회전
> med.factor = principal(med.data,rotate='none') #rotate에 ‘none’, ‘varimax’,’quanrtmax’, ‘oblimin’ 등 방법을 사용
> names(med.factor)
[1] "values" "rotation" "n.obs" "communality" "loadings" "fit"
[7] "fit.off" "fn" "Call" "uniquenesses" "complexity" "chi"
[13] "EPVAL" "R2" "objective" "residual" "rms" "factors"
[19] "dof" "null.dof" "null.model" "criteria" "STATISTIC" "PVAL"
[25] "weights" "r.scores" "Structure" "scores"
> med.factor$values #고유근
[1] 3.3791814 1.4827707 1.2506302 0.9804771 0.7688022 0.7330511 0.6403994 0.6221934 0.5283718 0.3519301
[11] 0.2621928
> plot(med.factor$values,type='b')
>> med.factor$values #고유근을 통해 세 번째 인자까지 고유근이 1 이상인 것을 알 수 있다. 스크리 그림에서는 4번째 인자다음부터 그래프의 기울기가 완만해지는 것을 볼 수 있다. 따라서 유효한 인자의 수는 3-4개로 생각할 수 있다.
3. 인자 회전
(1) 직교회전(orthogonal rotation)의 Varimax
> med.varimax = principal(med.data,nfactors=3,rotate='varimax')
> med.varimax
>> 공통성은 많은 문항(변수) 중에서 서로연관이 있는 일부 문항들을 선택하기 위하여 인자분석을 실시하는 경우 문항선택의 기준으로 이용된다. 예를 들면, 문항 100개를 이용하여 인자분석을 한 결과 공통성이 0.3 이하인 것이 40개라면 이 40개 문항은 다른 문항들과 공통점이 별로 없는 것으로 판단할 수 있다.
>> 고유분산은 u2 = 1 – h2(공통성) 공식으로 바로 구할 수 있다.lung의 경우 0.53 = 1 – 0.47
>> ss loading은 각 인자에 의해 설명되는 분산의 양을 나타낸다.
RC1 2.39 = 0.662 + 0.112 + 0.782 + … + 0.252 + (-0.07)2
>> Proportion Var는 각 인자가 설명하는 총 분산의 비율을 의미한다. RC1은 총 분산의 22%, RC2가 19%, RC3는 14%, 아래 Cumulative var는 누적값. 세 인자에 의해 설명되어지는 변동은 총 변동의 56%.
>> 회전된 요인에 대한 변수들의 요인 적재값을 보면 첫 번째 인자는 lung, liver, kidneys, heart가 높은 값을 가지며, step은 상대적으로 높은 적재값을 가진다. (적재값이 뭘 의미하는지 잘 모르겠다 ㅠ)
두 번째 인자는 stamina, stretch, blow, urine의 값이 높다. 마지막으로 세번째 인자는 muscle과 skeleton에서 높은 값을 가진다. 따라서 첫 번째 인자는 생물의학(biomedical), 두번째 인자는 인체기능(performance), 세번째 인자는 근육골계통력(Muscular – skeletal strength)으로 특정 지을 수 있다.
>> 인자분석은 주성분분석과 달리 인자들의 결합으로 원변수들을 표현한다.
Lung = 0.66 x factor1 + 0.12 x facotr2 + 0.16 x factor3 + error
인자점수 추정방법은 회귀분석, Barlett 등이 있는데, 아래는 회귀분석을 이용한 인자점수이다.
> head(med.varimax$scores)
RC1 RC2 RC3
[1,] -0.11970907 -0.2574867 -0.74473196
[2,] 0.05696634 -0.4784611 -1.53199247
[3,] -0.59153602 0.8957933 1.52598533
[4,] 1.20919164 0.3179760 -0.42022213
[5,] 0.82291043 0.1513448 -0.02988744
[6,] -0.08606120 1.1451913 0.76290104
인자분석의 시각화 몇가지 사례
> plot(med.varimax)
> plot(med.varimax$loadings[,c(1:2)])
> text(med.varimax$loadings[,c(1:2)],colnames(med.data))
> biplot(med.varimax$scores,med.varimax$loadings)
> fa.diagram(med.varimax)
> omega(med.data)
3. 인자 회전
(2) 사곽회전(Oblique rotation) - Oblimin
> med.oblimin = principal(med.data,nfactors=3,rotate='oblimin',scores=T,method='regression')
> med.oblimin
>> Oblimin을 이용한 인자분석에 대한 결과는 Varimax와 마찬가지로 세 인자에 대해 묶여지는 변수는 같으며 다만 인자 적재값이 차이가 나는 것을 볼 수 있다. Oblimin 방법을 이용한 결과에 대한 각 변수의 인자 모형은 아래와 같다.
Lung = 0.66 x factor1 + 0.01 x factor2 + 0.1 x facotr3
>> 회귀분석을 이용한 인자점수 함수식은 아래와 같다
Factor1 = 0.66 x lung + 0.02 x muscle + …+ (-0.09) x urine
인자점수는 아래와 같다.
> head(med.oblimin$scores)
TC1 TC2 TC3
[1,] -0.2325231 -0.2639103 -0.77351112
[2,] -0.1722964 -0.4641659 -1.54539480
[3,] -0.2852637 0.8308965 1.50251465
[4,] 1.1976234 0.4291411 -0.22225725
[5,] 0.8296036 0.2260879 0.09586509
[6,] 0.1766403 1.1289891 0.83993963
4. 행렬도
> biplot(med.varimax)
참고문헌:
[1] 다변량분석(김성수, 김현중, 정성석, 이용구 공저)
[2] R 프로그램에 기반한 다변량분석 및 데이터마이닝(이재길)
'KNOU > 3 다변량분석' 카테고리의 다른 글
2장 주성분분석 - heptathlon data / beer data (0) | 2017.03.27 |
---|