상관분석 실습

상관분석 = 두 변수의 관계성 분석

  • 실업자 수와 개인 소비 지출의 상관관계

  • R에 내장된 cor.test()를 이용하면 상관분석을 할 수 있다.



library(ggplot2)

economics <- as.data.frame(ggplot2::economics)
cor.test(economics$unemploy, economics$pce) #unemploy(실업자 수), pce(개인 소비 지출)


# 출력결과
# Pearson's product-moment correlation
# 
# data:  economics$unemploy and economics$pce
# t = 18.63, df = 572, p-value < 2.2e-16
# alternative hypothesis: true correlation is not equal to 0
# 95 percent confidence interval:
#  0.5608868 0.6630124
# sample estimates:
#       cor 
# 0.6145176 

# 출력 결과를 보면 p-value가 0.05 미만이므로, 실업자 수와 개인 소비 지출의
# 상관이 통계적으로 유의하다고 해석 가능

# 출력 결과 맨 아래 'cor'이 상관계수를 의미한다.
# 상관계수가 양수 0.61이므로, 실업자 수와 개인 소비 지출은 한 변수가 증가하면
# 다른 변수가 증가하는 정비례 관계임을 알 수 있다.

상관행렬 히트맵 만들기

  • 여러 변수의 관련성을 한번에 알아보고자 할 경우, 모든 변수의 상관 관계를 나타낸
  • 상관행렬을 만든다. 상관행렬을 보면 어떤 변수끼리 관련이 크고 적은지 파악 가능.
  • R에 내장된 mtcars 데이터를 이용해 상관행렬을 만든다.



# 여러 변수의 관련성을 한번에 알아보고자 할 경우, 모든 변수의 상관 관계를 나타낸
# 상관행렬을 만든다. 상관행렬을 보면 어떤 변수끼리 관련이 크고 적은지 파악 가능.
# R에 내장된 mtcars 데이터를 이용해 상관행렬을 만든다.

head(mtcars)

car_cor <- cor(mtcars) # 상관행렬 생성
round(car_cor, 2)      # 소수점 셋째 자리에서 반올림해 출력

#       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
# mpg   1.00 -0.85 -0.85 -0.78  0.68 -0.87  0.42  0.66  0.60  0.48 -0.55
# cyl  -0.85  1.00  0.90  0.83 -0.70  0.78 -0.59 -0.81 -0.52 -0.49  0.53
# disp -0.85  0.90  1.00  0.79 -0.71  0.89 -0.43 -0.71 -0.59 -0.56  0.39
# hp   -0.78  0.83  0.79  1.00 -0.45  0.66 -0.71 -0.72 -0.24 -0.13  0.75
# drat  0.68 -0.70 -0.71 -0.45  1.00 -0.71  0.09  0.44  0.71  0.70 -0.09
# wt   -0.87  0.78  0.89  0.66 -0.71  1.00 -0.17 -0.55 -0.69 -0.58  0.43
# qsec  0.42 -0.59 -0.43 -0.71  0.09 -0.17  1.00  0.74 -0.23 -0.21 -0.66
# vs    0.66 -0.81 -0.71 -0.72  0.44 -0.55  0.74  1.00  0.17  0.21 -0.57
# am    0.60 -0.52 -0.59 -0.24  0.71 -0.69 -0.23  0.17  1.00  0.79  0.06
# gear  0.48 -0.49 -0.56 -0.13  0.70 -0.58 -0.21  0.21  0.79  1.00  0.27
# carb -0.55  0.53  0.39  0.75 -0.09  0.43 -0.66 -0.57  0.06  0.27  1.00

# 출력된 상관행렬을 보면 mtcars의 11개의 변수가 서로 얼마나 관련되어 있는지 알 수 있다.
# 1. mpg(연비) 행과 cyl(실린더 수) 열이 교차되는 부분을 보면 상관계수가  -0.85이므로,
#    연비가 높을수록 실린더 수가 적은 경향이 있다는 것을 알 수 있다.
# 2. cyl(실런더 수)과 wt(무게)의 상관계수가 0.78이므로 실린더 수가 많을수록 자동차가
#    무거운 경향이 있음을 알 수 있다.

히트맵 그래프

install.packages("corrplot")
library("corrplot")

corrplot(car_cor, method = "number") # corrplot()의 파라미터를 이용해 method에
                                     # "number"를 지정해 상관계수가 나타나도록 표현함


# 다양한 파라미터를 지정함
# 그래프 색깔을 바꾸기 위해 colorRampPalette()를 이용해 새상 코드 목록을 생성하는
# col() 함수를 만들어 파라미터에 활용

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD",
                           "#4477AA"))

corrplot(car_cor,
        method = "color",       # 색깔로 표현
        col = col(200),         # 색상 200개 선정
        type = "lower",         # 왼쪽 아래 행렬만 표시
        order = "hclust",       # 유사한 상관계수끼리 군집화
        addCoef.col = "black",  # 상관계수 색깔
        tl.col = "black",       # 변수명 색깔
        tl.srt = 45,            # 변수명 45도 기울임
        diag = F)               # 대각 행렬 제외