59doit
[ R ] 요인분석 #1 공통요인으로 변수 정제 본문
요인분석
변수들의 상관성을 바탕으로 변수를 정제하여 상관관계 분석이나 회귀분석에서 설명변수(독립변수)로 사용된다.
다수의 변수를 대상으로 변수 간의 관계를 분석하여 공통 차원으로 축약하는 통계기법
1) 탐색적 요인분석: 요인 분석을 할 때 사전에 어떤 변수들끼리 묶어야 한다는 전제를 두지 않고 분석하는 방법
2) 확인적 요인 분석: 사전에 묶일 것으로 기대되는 항목끼리 묶였는지를 조사하는 방법
타당성: 측정 도구가 측정하고자 하는 것을 정확히 측정할 수 있는 정도
논문 작성을 위한 통계분석 방법에서 인구통계학적 분석(빈도분석, 교차분석 등)을 시행한 이후 통계량 검정 이전에 구성 타당성(Construct validity)검증을 위해서 요인분석(Factor Analysis) 시행
- 요인분석을 위한 전제조건
- 하위요인으로 구성되는 데이터 셋이 준비되어 있어야 한다.
- 분석에 사용되는 변수는 등간척도나 비율척도여야 하며, 표본의 크기는 최소 50개 이상이 바람직하다.
- 요인 분석은 상관관계가 높은 변수들끼리 그룹화하는 것이므로 변수 간의 상관관계가 매우 낮다면(보통 ±3이하), 그 자료는 요인 분석에 적합하지 않다.
- 요인분석을 수행하는 목적
- 자료의 요약: 변인을 몇 개의 공통된 변인으로 묶음
- 변인 구조 파악: 변인들의 상호관계 파악(독립성 등)
- 불필요한 변인 제거: 중요도가 떨어진 변수 제거
- 측정 도구의 타당성 검증: 변인들이 동일한 요인으로 묶이는 지를 확인
- 요인 분석 결과에 대한 활용방안
- 1. 타당성 검정: 측정도구가 정확히 측정했는지를 알아보기 위하여 측정변수들이 동일한 요인으로 묶이는지를 검정
- 2. 변수 축소: 변수들의 상관관계가 높은 것끼리 묶어서 변수를 정제
- 3. 변수 제거: 변수의 중요도를 나타내는 요인적재량이 0.4미만이면 설명력이 부족한 요인으로 판단하여 제거
- 4. 활용: 요인 분석에서 얻어지는 결과를 이용하여 상관분석이나 회귀분석의 설명변수로 활용
(1) 공통요인으로 변수 정제
특정항목으로 묶이는데 사용되는 요인 수 결정은 주성분 분석 방법과 상관계수 행렬을 이용한 초기 고유값을 이용
ex) 변수와 데이터프레임 생성
#1 과목 변수 생성
s1 <- c(1,2,1,2,3,4,2,3,4,5) s2 <- c(1, 3, 1, 2, 3, 4, 2, 4, 3, 4) s3 <- c(2, 3, 2, 3, 2, 3, 5, 3, 4, 2) s4 <- c(2, 4, 2, 3, 2, 3, 5, 3, 4, 1) s5 <- c(4, 5, 4, 5, 2, 1, 5, 2, 4, 3) s6 <- c(4, 3, 4, 4, 2, 1, 5, 2, 4, 2) name <- 1:10 |
#2 과목 데이터프레임 생성
subject <- data.frame(s1,s2,s3,s4,s5,s6) str(subject) # 'data.frame': 10 obs. of 6 variables: # $ s1: num 1 2 1 2 3 4 2 3 4 5 # $ s2: num 1 3 1 2 3 4 2 4 3 4 # $ s3: num 2 3 2 3 2 3 5 3 4 2 # $ s4: num 2 4 2 3 2 3 5 3 4 1 # $ s5: num 4 5 4 5 2 1 5 2 4 3 # $ s6: num 4 3 4 4 2 1 5 2 4 2 |
ex) 변수의 주성분 분석
주성분 분석: 변동량(분산)에 영향을 주는 주요 성분을 분석하는 방법
#1 주성분 분석으로 요인 수 알아보기
pc <- prcomp(subject) summary(pc) # Importance of components: # PC1 PC2 PC3 PC4 PC5 PC6 # Standard deviation 2.389 1.5532 0.87727 0.56907 0.19315 0.12434 # Proportion of Variance 0.616 0.2603 0.08305 0.03495 0.00403 0.00167 # Cumulative Proportion 0.616 0.8763 0.95936 0.99431 0.99833 1.00000 plot(pc) ![]() prcomp(subject) # Standard deviations (1, .., p=6): # [1] 2.3891658 1.5531709 0.8772735 0.5690665 0.1931487 0.1243440 # # Rotation (n x k) = (6 x 6): # PC1 PC2 PC3 PC4 PC5 PC6 # s1 0.4388800 0.37888239 -0.6252247 0.3349805 0.39758995 0.05135054 # s2 0.4052159 0.36430950 -0.1094938 -0.4342054 -0.64015432 0.30456180 # s3 -0.1620675 0.57063510 0.1348825 0.2985359 -0.31870892 -0.66273477 # s4 -0.2440714 0.62374442 0.4163574 -0.1909799 0.44116006 0.38330542 # s5 -0.5412080 0.08189792 -0.5904534 -0.5507507 0.08129259 -0.20449104 # s6 -0.5142388 0.04835210 -0.2385859 0.5199331 -0.35960897 0.52597360 |
*
주성분 분석에서 결정된 주성분의 수를 반드시 요인 분석에서 요인의 수로 사용되지는 않는다.
고유값: 어떤 행렬로부터 유도되는 실수값 일반적으로 변화량의 합(총분산)을 기준으로 요인의 수를 결정하는데 이용된다.
*
#2 고유값으로 요인수 분석
en <- eigen(cor(subject)) names(en) # "values" "vectors" en$values # [1] 3.44393944 1.88761725 0.43123968 0.19932073 0.02624961 0.01163331 en$vectors # [,1] [,2] [,3] [,4] [,5] [,6] # [1,] -0.4062499 -0.351093036 0.63460534 0.3149622 0.45699508 0.03041553 # [2,] -0.4319311 -0.400526644 0.11564711 -0.4422216 -0.57042232 0.34452594 # [3,] 0.2542077 -0.628807884 -0.06984072 0.3339036 -0.35389906 -0.54622817 # [4,] 0.3017115 -0.566028650 -0.37734321 -0.2468016 0.50326085 0.36333366 # [5,] 0.4763815 0.008436692 0.58035475 -0.6016209 0.05643527 -0.26654314 # [6,] 0.5155637 0.021286661 0.31595023 0.4133867 -0.28995329 0.61559319 plot(en$values,type="o") ![]() |
고유값이 급격하게 감소하다가 완만하게 감소할 때 급격하게 감소하는 고유값 index 수로 주성분 변수 개수 결정
ex) 변수 간의 상관관계 분석과 요인분석
#1 상관관계분석 – 변수 간의 상관성으로 공통요인 추출
cor(subject) # s1 s2 s3 s4 s5 s6 # s1 1.00000000 0.86692145 0.05847768 -0.1595953 -0.5504588 -0.6262758 # s2 0.86692145 1.00000000 0.06745441 -0.0240123 -0.6349581 -0.7968892 # s3 0.05847768 0.06745441 1.00000000 0.9239433 0.3506967 0.4428759 # s4 -0.15959528 -0.02401230 0.92394333 1.0000000 0.4207582 0.4399890 # s5 -0.55045878 -0.63495808 0.35069667 0.4207582 1.0000000 0.8733514 # s6 -0.62627585 -0.79688923 0.44287589 0.4399890 0.8733514 1.0000000 |
요인분석에서 요인회전법은 요인 해석이 어려운 경우 요인축을 회전시켜서 요인 해석을 용이하게 하는 방법을 의미.
대표적인 요인회전법으로는 배리맥스 회전법
요인분석에 이용되는 R함수: factanal()함수
factanal(dataset, factors=요인수, scores=c(“none”, “regression”, “Bartlett”), rotation=”요인회전법”, …)
#2 요인분석 – 요인회전법 적용(Varimax회전법)
#2 - 1 주성분 분석의 가정에 의해서 2개 요인으로 분석
result <- factanal(subject, factors = 2, rotation = "varimax") result # Call: # factanal(x = subject, factors = 2, rotation = "varimax") # # Uniquenesses: # s1 s2 s3 s4 s5 s6 # 0.250 0.015 0.005 0.136 0.407 0.107 # # Loadings: # Factor1 Factor2 # s1 0.862 # s2 0.988 # s3 0.997 # s4 -0.115 0.923 # s5 -0.692 0.338 # s6 -0.846 0.421 # # Factor1 Factor2 # SS loadings 2.928 2.152 # Proportion Var 0.488 0.359 # Cumulative Var 0.488 0.847 # # Test of the hypothesis that 2 factors are sufficient. # The chi square statistic is 11.32 on 4 degrees of freedom. # The p-value is 0.0232 |
* 요인 분석 결과에서 만약 p-value값이 0.05미만이면 요인수가 부족하다는 의미로 요인수를 늘려서 다시 분석을 수행해야 한다.
#2 - 2 고유값으로 가정한 3개 요인으로 분석
result <- factanal(subject, factor=3, rotation = "varimax", scores = "regression") result # Call: # factanal(x = subject, factors = 3, scores = "regression", rotation = "varimax") # # Uniquenesses: # s1 s2 s3 s4 s5 s6 # 0.005 0.056 0.051 0.005 0.240 0.005 # # Loadings: # Factor1 Factor2 Factor3 # s1 -0.379 0.923 # s2 -0.710 0.140 0.649 # s3 0.236 0.931 0.166 # s4 0.120 0.983 -0.118 # s5 0.771 0.297 -0.278 # s6 0.900 0.301 -0.307 # # Factor1 Factor2 Factor3 # SS loadings 2.122 2.031 1.486 # Proportion Var 0.354 0.339 0.248 # Cumulative Var 0.354 0.692 0.940 # # The degrees of freedom for the model is 0 and the fit was 0.7745 |
# Result
Uniquenesses항목: 유효성을 판단하여 제시한 값으로 통상 0.5이하이면 유효한 것으로 본다.
Loadings 항목은 요인 적재값(Loading)을 보여주는 항목으로 각 변수와 해당 요인간의 상관관계 계수를 나타낸다.
요인적재값(요인부하량)이 통상 +0.4이상이면 유의하다고 볼 수 있다.
만약 +0.4미만이면 설명력이 부족한 요인(중요도가 낮은 변수)으로 판단할 수 있다.
요인적재값(Loading)이 높게 나타났다는 의미는 해당 변수들이 해당 요인으로 잘 설명된다는 의미
SS loadings 항목: 각 요인 적재값의 제곱의 합을 제시한 값. 각 요인의 설명력을 보여준다.
Proportion Var 항목: 설명된 요인의 분산 비율로 각 요인이 차지하는 설명력의 비율
Cumulative Var 항목: 누적 분산 비율. 요인의 분산 비율을 누적하여 제시한 값.
현재 정보손실은 1-0.94 = 0.06으로 적정한 상태. 만약 정보손실이 너무 크면 요인 분석의 의미가 없어진다.
#3 다양한 방법으로 요인적재량 보기
attributes(result) # $names # [1] "converged" "loadings" "uniquenesses" "correlation" "criteria" "factors" # [7] "dof" "method" "rotmat" "scores" "n.obs" "call" # # $class # [1] "factanal" result$loadings # Loadings: # Factor1 Factor2 Factor3 # s1 -0.379 0.923 # s2 -0.710 0.140 0.649 # s3 0.236 0.931 0.166 # s4 0.120 0.983 -0.118 # s5 0.771 0.297 -0.278 # s6 0.900 0.301 -0.307 # # Factor1 Factor2 Factor3 # SS loadings 2.122 2.031 1.486 # Proportion Var 0.354 0.339 0.248 # Cumulative Var 0.354 0.692 0.940 print(result, digits = 2, cutoff = 0.5) # Call: # factanal(x = subject, factors = 3, scores = "regression", rotation = "varimax") # # Uniquenesses: # s1 s2 s3 s4 s5 s6 # 0.00 0.06 0.05 0.00 0.24 0.00 # # Loadings: # Factor1 Factor2 Factor3 # s1 0.92 # s2 -0.71 0.65 # s3 0.93 # s4 0.98 # s5 0.77 # s6 0.90 # # Factor1 Factor2 Factor3 # SS loadings 2.12 2.03 1.49 # Proportion Var 0.35 0.34 0.25 # Cumulative Var 0.35 0.69 0.94 # # The degrees of freedom for the model is 0 and the fit was 0.7745 print(result$loadings, cutoff = 0) # Loadings: # Factor1 Factor2 Factor3 # s1 -0.379 -0.005 0.923 # s2 -0.710 0.140 0.649 # s3 0.236 0.931 0.166 # s4 0.120 0.983 -0.118 # s5 0.771 0.297 -0.278 # s6 0.900 0.301 -0.307 # # Factor1 Factor2 Factor3 # SS loadings 2.122 2.031 1.486 # Proportion Var 0.354 0.339 0.248 # Cumulative Var 0.354 0.692 0.940 |
'통계기반 데이터분석' 카테고리의 다른 글
[ R ] 요인분석 #3 잘못 분류된 요인 제거로 변수 정제 (0) | 2022.11.26 |
---|---|
[ R ] 요인분석 #2 요인점수를 이용한 요인적재량 시각화 (0) | 2022.11.26 |
[ R ] 주성분분석 PCA (0) | 2022.11.25 |
[ R ]상관계수 (0) | 2022.11.25 |
[ R ] 상관분석 (0) | 2022.11.25 |