통계기반 데이터분석

[ R ] 요인분석 #3 잘못 분류된 요인 제거로 변수 정제

yul_S2 2022. 11. 26. 22:46
반응형

(2) 잘못 분류된 요인 제거로 변수 정제

 

특정 변수가 묶여질 것으로 예상되는 요인으로 묶이지 않는 경우 해당 변수를 제거하여 변수를 정제하는 방법

 

ex) 요인분석에 사용될 데이터 셋 가져오기

 

drinking_water.sav
0.01MB

 

 

#1 spss데이터 셋 가져오기

install.packages("memisc")
library(memisc)

setwd("C:/Rwork/")
data.spss <- as.data.set(spss.system.file('drinking_water.sav'))

head(data.spss[1:11],3)
#  Q1  Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11
# 1  3    2    3    3    4    3    4    3    4     3    4
# 2  3    3    3    3    3    3    2    3    3     2    3
# 3  3    3    3    4    3    4    3    4    4     4    4

memisc 패키지: spss데이터를 가져오기 위한 패키지

as.data.set(spas.system.file(‘spss데이터 파일’)함수: spss데이터를 가져오기

 

 

#2 데이터프레임으로 변경

drinking_water <- data.spss[1:11]
drinking_water_df <- as.data.frame(data.spss[1:11]) 
str(drinking_water_df)

 

ex) 요인 수를 3개로 지정하여 요인 분석 수행

result2 <- factanal(drinking_water_df, factor=3,rotation="varimax")
result2

Call:
factanal(x = drinking_water_df, factors = 3, rotation = "varimax")

Uniquenesses:
     Q1     Q2     Q3     Q4     Q5     Q6      Q7     Q8     Q9   Q10    Q11 
0.321 0.238 0.284 0.447 0.425 0.373 0.403 0.375 0.199 0.227 0.409 

Loadings:
    Factor1 Factor2 Factor3
Q1  0.201   0.762   0.240  
Q2  0.172   0.813   0.266  
Q3  0.141   0.762   0.340  
Q4  0.250   0.281   0.641  
Q5  0.162   0.488   0.557  
Q6  0.224   0.312   0.693  
Q7  0.235   0.219   0.703  
Q8  0.695   0.225   0.304  
Q9  0.873   0.122   0.155  
Q10 0.852   0.144   0.161  
Q11 0.719   0.152   0.225  

                      Factor1 Factor2 Factor3
SS loadings      2.772   2.394   2.133
Proportion Var   0.252   0.218   0.194
Cumulative Var   0.252   0.470   0.664

Test of the hypothesis that 3 factors are sufficient.
The chi square statistic is 40.57 on 25 degrees of freedom.
The p-value is 0.0255 

Uniquenesses항목에서 모든 변수가 0.5이하의 값을 갖기 때문에 모두 유효

데이터 셋에서 의도한 요인과 요인으로 묶여진 결과가 서로 다르게 나옴

q4 변수의 타당성 의심

p-value < 0.05 : 요인변수 선택에 문제가 있다고 볼 수 있다.

여기서 p-value는 chi_square검정으로 기대치와 관찰치에 차이가 있음을 알려주는 확률값이다.

요인 수를 3개로 전제하기 대문에 p-value값은 무시해도 된다.

 

 

ex) 요인별 변수 묶기

#1 q4를 제외하고 데이터프레임 생성

dw_df <- drinking_water_df[-4]
str(dw_df)
dim(dw_df)

 

 

#2 요인에 속하는 입력 변수별 데이터프레임 구성

s <- data.frame(dw_df$Q8, dw_df$Q9, dw_df$Q10, dw_df$Q11) 
c <- data.frame(dw_df$Q1, dw_df$Q2, dw_df$Q3)
p <- data.frame(dw_df$Q5, dw_df$Q6, dw_df$Q7)

요인분석을 통해서 만들어진 파생변수는 상관분석이나 회귀분석에서 독립변수로 사용할 수 있다.

 

 

#3 요인별 산술평균 계산

satisfaction <- round(
  (s$dw_df.Q8 + s$dw_df.Q9 + s$dw_df.Q10 + s$dw_df.Q11) / ncol(s), 2) 

closeness <- round(
    (c$dw_df.Q1 + c$dw_df.Q2 + c$dw_df.Q3) / ncol(s), 2) 

pertinence <- round(
      (p$dw_df.Q5 + p$dw_df.Q6 + p$dw_df.Q7) / ncol(s), 2)

요인 제품만족도(satisifaction)를 구성하는 4개의 변수의 산술평균 계산 요인 제품친밀도(closeness)와 요인 제품만족도(pertinence)는 3개 변수에 대한 산술평균을 계산하여 파생변수를 생성

 

 

#4 상관관계분석

drinking_water_factor_df <- data.frame(satisfaction, closeness, pertinence) 
colnames(drinking_water_factor_df) <- c("제품만족도", "제품친밀도", "제품적절성") 

cor(drinking_water_factor_df)
#                     제품만족도 제품친밀도 제품적절성
# 제품만족도  1.0000000  0.4046931  0.4823906
# 제품친밀도  0.4046931  1.0000000  0.6346448
# 제품적절성  0.4823906  0.6346448  1.0000000

length(satisfaction); length(closeness); length(pertinence)
# [1] 380
# [1] 380
# [1] 380

 

 

 

(3) 요인 분석 결과 제시

요인 분석 결과를 논문이나 보고서에 제시하는 경우, 해당 요인과 변수, 요인적재량, 요인의 설명력을 나타내는 고유값을 함께 제시

 

 

 

반응형