Data Analysis

R/머신러닝 & 딥러닝

[R] 요인분석 연습문제 (+시각화)

Holy_Water 2022. 11. 4. 11:00

핵심함수

spss.system.file: sav파일을 불러올 수 있는 함수

factanal():  요인 분석 함수의 줄인말로써 요인 분석에서 해석이 어려운 어느 한 요인을 높게 나타나도록 하기 위하여 요인 축을 회전하는 방법

plot(): 기본적으로 plot() 함수는 산점도(scatter plot)를 그리는 함수지만 산점도뿐만 아니라 일반적으로 객체를 시각화하는데 모두 사용할 수 있는 일반적인 함수.

cor(): cor()함수는 상관계수를 구하는 함수이다

 

문제1: 다음은 drinking,water_example.sav 파일의 데이터셋이 구성된 테이블이다.  전체 2 개의 요인에 의해서 7 개의 변수로 구성되어 있다. 아래에서 제시된 각 단계에 맞게 요인 분석을 수행하시오.

 

단계 1 : 데이터파일 가져오기

library(memisc) #sav파일을 읽을 수 있는 memisc 라이브러리 불러오기
data.spss <- as.data.set(spss.system.file('dataset2/drinking_water_example.sav'))
#memisc 라이브러리를 활용하여 sav파일 불러오기
head(data.spss) #데이터 확인
drinkig_water_exam <- data.spss[1:7] ;drinkig_water_exam #1~7까지의 컬럼을 drinkig_water_exam 값에 저장하기
drinkig_water_exam_df <- as.data.frame(drinkig_water_exam) #데이터 프레임으로 변환 
str(drinkig_water_exam_df) #데이터 확인
head(drinkig_water_exam_df) #데이터 확인

 

단계 2 : 베리맥스 회전법, 요인수 2, 요인점수 회귀분석 방법을 적용하여 요인 분석

result <- factanal(drinkig_water_exam_df, factors = 2,
  rotation = "varimax", scores = "regression");result
#문제 요구에 맞게 요인점수 회귀분석방법을 적용하기

 

단계 3 : 요인적재량 행렬의 칼럼명 변경 

colnames(result$loadings) <- c('제품친밀도','제품만족도');result
#colnames() 함수로 요구에 맞게 컬럼명 변경하기

 

단계 4 : 요인점수를 이용한 요인적재량 시각화

#관측치별 이름 표시
text(result$scores, labels = rownames(result$scores), 
cex = 0.7, pos = 3, col = "blue")
#요인 적재량 표시
points(result$loadings, pch=19, col = "red")
text(result$loadings, labels = rownames(result$loadings), 
cex = 0.8, pos = 3, col = "red")

 

단계 5 : 요인별 변수 묶기

# 제품만족도 데이터프레임 - q1,q2,q3
x <- data.frame(drinkig_water_exam_df$Q1, drinkig_water_exam_df$Q2,
drinkig_water_exam_df$Q3);x

# 제품친밀도 데이터프레임 - q4,q5,q6,q7
y <- data.frame(drinkig_water_exam_df$Q4, drinkig_water_exam_df$Q5,
drinkig_water_exam_df$Q6, drinkig_water_exam_df$Q7);y

# 요인별 산술평균 계산 (round()함수를 활용해 결과값 출력)
avg1 <- round((x$drinkig_water_exam_df.Q1+x$drinkig_water_exam_df.Q2 
+x$drinkig_water_exam_df.Q3)/ncol(x),2) ;avg1
avg2 <- round((y$drinkig_water_exam_df.Q4 + y$drinkig_water_exam_df.Q5
+ y$drinkig_water_exam_df.Q6 + y$drinkig_water_exam_df.Q7) / ncol(y), 2);avg2

 

 

문제2: 문제1 에서 생성된 두 개의 요인을 데이터프레임으로 생성한 후 이를 이용하여 두 요인 간의 상관관계 계수를 제시하시오.

result2 <- data.frame(avg1, avg2)
cor(result2) #cor()함수를 활용해 두 요인간의 상관계수를 확인