###1-1###
#데이터파일 가져오기
library(memisc)
setwd("C:/R work/")
data.spss <- as.data.set(spss.system.file('drinking_water_example.sav'))
data.spss
drinking_water_exam <- data.spss[1:7]
drinking_water_exam_df <- as.data.frame(drinking_water_exam)
str(drinking_water_exam_df)
###1-2###
#주성분 분석으로 요인수 알아보기
pc <- prcomp(drinking_water_exam_df)
summary(pc)
plot(pc)
prcomp(drinking_water_exam_df)
#주성분 2개로 설정 (0.7848) -> 3개 이후 완만히 감소
#변수 간 상관관계 분석과 요인분석
cor(drinking_water_exam_df)
#요인분석 - varimax 요인회전법 적용, 회귀분석(scores속성 설정)
result <- factanal(drinking_water_exam_df, factors=2,
rotation = "varimax", scores = "regression")
result
#p-value가 0.114로 0.05 이상이므로 유효하며,
#Uniquenesses항목에서 모든 변수가 0.5이하이므로 모두 유효하다.
#데이터 셋에서 의도한 요인과 요인으로 묶인 결과가 같게 나옴
#요인수 3개일 경우
result1 <- factanal(drinking_water_exam_df, factors=3,
rotation = "varimax")
result1
#Uniquenesses항목과 p-value는 유효하나,
#Factor3의 loadings가 +0.4 이하로 유의하지 않다.
#따라서, 요인수 -> 2개로 설정.
##1-3##
#요인적재량 행렬의 컬럼명 변경
result$loadings
colnames(result$loadings) = c('제품만족도', '제품친밀도')
##1-4##
#요인점수를 이용한 요인적재량 시각화
#제품만족도와 제품친밀도 요인적재량 시각화
result$scores
plot(result$scores[, c(1:2)],
main = "제품만족도와 제품친밀도 요인점수 행렬")
text(result$scores[,1],result$scores[,2],
cex = 0.5, pos = 1, col = "black")
#요인적재량 추가
points(result$loadings[, c(1:2)], pch = 16, col = "red")
text(result$loadings[,1], result$loadings[,2],
labels = rownames(result$loadings),
cex = 0.8, pos = 1, col = "red")
#q1,q2,q3 / q4,q5,q6,q7 요인들이 각각 가까운 곳에 위치해 있다.
##1-5##
#요인별 변수 묶기(loadings 제시)
''' Loadings:
제품만족도 제품친밀도
Q1 0.212 0.789
Q2 0.182 0.863
Q3 0.170 0.820
Q4 0.724 0.296
Q5 0.882 0.149
Q6 0.860 0.172
Q7 0.742 0.198'''
#위에 따라 '제품만족도'의 0.4이상 값을 갖는 q4,q5,q6,q7을 final1,
#'제품친밀도'의 0.4이상 값을 갖는 q1,q2,q3을 final2로 묶었다.
final1 <- c(drinking_water_exam_df$Q4,
drinking_water_exam_df$Q5,
drinking_water_exam_df$Q6,
drinking_water_exam_df$Q7)
final2 <- c(drinking_water_exam_df$Q1,
drinking_water_exam_df$Q2,
drinking_water_exam_df$Q3)
final1; final2
##문제2. 1번의 결과를 두 개의 데이터프레임으로 생성 후 상관관계 계수 제시
#요인별 변수 이용 데이터프레임 생성
f1 <- data.frame(drinking_water_exam_df$Q4,
drinking_water_exam_df$Q5,
drinking_water_exam_df$Q6,
drinking_water_exam_df$Q7)
f2 <- data.frame(drinking_water_exam_df$Q1,
drinking_water_exam_df$Q2,
drinking_water_exam_df$Q3)
#요인별 산술평균 계산
satisfaction <- round(f1$drinking_water_exam_df.Q4 + f1$drinking_water_exam_df.Q5 +
f1$drinking_water_exam_df.Q6 + f1$drinking_water_exam_df.Q7 /
ncol(f1),2)
closeness <- round(f2$drinking_water_exam_df.Q1 + f2$drinking_water_exam_df.Q2 +
f2$drinking_water_exam_df.Q3 / ncol(f2), 2)
#상관관계 분석
drinking_water_factor_df <- data.frame(satisfaction, closeness)
colnames(drinking_water_factor_df) <- c("제품만족도", "제품친밀도")
cor(drinking_water_factor_df)
''' 제품만족도 제품친밀도
제품만족도 1.0000000 0.4042153
제품친밀도 0.4042153 1.0000000'''
length(satisfaction); length(closeness);
#원본 데이터 길이와 동일함
#제품만족도, 제품친밀도 상관관계 분석 결과
#0.4042153으로 다소 약한 양의 상관관계를 갖는다.
#그러므로 요인분석 결과 축소한 요인의 구조가 좋다고 판단할 수 있다.
댓글