상관분석(Correlation Analysis)이란?

- 두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석 기법 (H0: 두 변수 간 관계 없다 / H1: 관계 있다)

 

상관계수(Correlation Coefficient)란?

- 상관분석을 통해 도출되고 상관계수를 통해 두 변수가 얼마나 관련되어 있는지, 관련성의 정도 파악 가능

- 상관계수는 0~1 사이의 값을 지니고 1에 가까울수록 관련성이 크다는 것을 의미

   → 상관계수가 양수: 정비례 관계

   → 상관계수가 음수: 반비례 관계

 

 

■ ggplot2 패키지의 economics 데이터를 이용해서 실업자 수와 개인 소비 지출의 상관관계 분석

- R에 내장된 cor.test()를 이용하여 상관분석 

 

economics <- as.data.frame(ggplot2::economics)
cor.test(economics$unemploy, economics$pce)

 

① 실업자 수와 개인 소비 지출의 상관이 통계적으로 유의하다

    - 출력 결과의 p-value를 계산하면 0.05 미만인 것을 알 수 있다.

 

② 'cor'

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

 

 

 

■ 상관행렬 히트맵 만들기

- 여러 변수의 관련성을 한 번에 보고자 할 경우, 모든 변수의 상관 관계를 나타낸 상관행렬(Correlation Matrix)를 만들고, 상관행렬을 보면 어떤 변수끼리 관련이 크고 적은지 파악할 수 있음.

 

1. cor()을 이용하여 상관행렬 만들기

- R에 내장된 mtcars 데이터를 이용할 예정 (mtcars는 자동차 32종의 11개 속성에 대한 정보를 담고 있는 데이터)

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

 

① 연비 별 실린더 수

    - mpg(연비) 행과 cyl(실린더 수) 열이 교차되는 부분을 보면 상관계수가 -0.85임을 볼 수 있다. 상관계수가 음수면 반비례한다는 의미이므로 연비가 높을수록 실린더 수가 적은 경향이 있다는 것을 알 수 있다.

 

② 실린더 수 별 무게

    - cyl(실린더 수)과 wt(무게)의 상관계수가 0.78이므로 정비례한다. 따라서 실린더 수가 많을수록 자동차가 무거운 경향이 있다는 것을 알 수 있다.

 

 

 

2. 상관행렬을 히트맵으로 만들기

- 여러 변수로 상관행렬을 만들면 변수들의 관계를 파악하기 쉽지 않음

- 상관행렬을 히트맵(heat map)으로 만들면 변수들의 관계 쉽게 파악 가능 (corrplot 패키지의 corrplot()을 이용)

cf) 히트맵(heat map): 값의 크기를 색깔로 표현한 그래프

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

corrplot(car_cor)

>> 상관계수가 클수록 원의 크기가 크고 색깔이 진하고, 상관계수가 양수면 파란색, 음수면 빨간색 계열로 표현되어 있음. 원의 크기와 색깔을 보면 상관관계 정도와 방향 쉽게 파악 가능

 

 

3. 그래프 형태 바꾸기

- corrplot()의 파라미터를 이용해 그래프 형태를 다양하게 바꾸는 것이 가능. method에 "number"를 지정하여 원 대신 상관계수가 표현되도록 설정 가능

corrplot(car_cor, method = "number")

 

4. 다양한 파라미터 지정

- 그래프 색깔을 바꾸기 위해 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)                # 대각 행렬 제외

 

 

 

(참고자료: Visualize correlation matrix using correlogram: http://www.sthda.com/english/wiki/visualize-correlation-matrix-using-correlogram

 

Visualize correlation matrix using correlogram - Easy Guides - Wiki - STHDA

Statistical tools for data analysis and visualization

www.sthda.com

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

t 검정(t-test)란?

- 두 집단의 평균통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법

- R에 내장된 t.test()를 이용해 t 검정 가능

 

 

■ ggplot2 패키지의 mpg 데이터를 이용해 compact 자동차와 suv 자동차의 도시 연비 t 검정을 수행

(1) mpg 데이터를 불러와 class, cty 변수만 남긴 뒤 class 변수가 "compact"인 자동차와 "suv"인 자동차를 추출

mpg <- as.data.frame(ggplot2::mpg)
library(dplyr)
mpg_diff <- mpg %>%
  select(class, cty) %>%
  filter(class %in% c("compact","suv"))
head(mpg_diff)

table(mpg_diff$class)

 

 

(2) t.test()를 이용해 t 검정

- 추출한 mpg_diff 데이터를 지정하고, ~ 기호를 이용해 비교할 값cty(도시 연비) 변수비교할 집단class(자동차 종류) 변수 지정

- t 검정은 비교하는 집단의 분산이 같은지 여부에 따라 적용하는 공식이 다름. (여기서는 집단 간 분산이 같다고 가정하고 var.equalT를 지정)

t.test(data = mpg_diff, cty ~ class, var.equal = T)

 

① 출력된 t 검정 결과에서 'p-value'가 유의확률을 의미

(블로그 좌측 [Probability $ Statistics >> Lecture Summary] 의 '통계적 가설 검정이란?' 포스팅 참고)

    - 일반적으로 유의확률 5%를 판단 기준으로 삼고, p-value가 0.05 미만이면 '집단 간 차이가 통계적으로 유의하다'고 해석. 실제로는 차이가 없는데 이런 정도의 차이가 우연히 관찰된 확률이 5%보다 작다면, 이 차이를 우연이라고 보기 어렵다는 결론. 'p-value < 2.2e - 16'은 유의확률이 2.2*10^-16 보다 작다는 의미이므로 여기서 p-value가 0.05보다 작다는 의미이다.

따라서 이 분석 결과는 'compact 와 suv 간 평균 도시 연비 차이가 통계적으로 유의하다'고 해석할 수 있다.

 

② 'sample estimates'

    - 'sample estimates' 부분을 보면 각 집단의 cty 평균이 나타나 있음. "compact"는 20인 반면, "suv"는 13이므로, "suv"보다 "compact"의 도시 연비가 더 높다고 할 수 있음

 

 

 

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

인터랙티브 그래프(Interactive Graph)란?

- 마우스 움직임에 반응하며 실시간으로 형태가 변하는 그래프

 

** 참고

https://plot.ly/ggplot2/ 에 접속하면 plotly 패키지를 이용해 만든 인터랙티브 그래프들 직접 조작 가능

 

plotly

Plotly for ggplot2 is an interactive, browser-based charting library built on Plotly's open source javascript graphing library, plotly.js. It works entirely locally, through the HTML widgets framework.

plot.ly

 

 

■ plotly 패키지로 인터랙티브 그래프 만들기

(1) 패키지 준비하기

install.packages("plotly")
library(plotly)

 

(2) ggplot2로 그래프 만들기

- ggplot2로 만든 그래프를 plotly 패키지의 ggplotly()에 적용하면 인터랙티브 그래프가 생성됨

- 먼저 ggplot()을 이용해 그래프 제작 (mpg 데이터를 이용할 예정)

library(ggplot2)
p <- ggplot(data = mpg, aes(x = displ, y = hwy, col = drv)) + geom_point()

 

(3) 인터랙티브 그래프 만들기

ggplotly(p)

 

(4) HTML로 저장하기

- 뷰어 창에서 [Export > Save as Web Page...]를 클릭하면 인터랙티브 그래프를 HTML 포맷으로 저장 가능

인터랙티브 산점도 그래프.html
4.14MB

 

(5) 인터랙티브 막대 그래프 만들기

- 산점도 외에도 ggplot2 패키지로 만든 그래프는 ggplotly()를 이용해 인터랙티브 그래프로 제작 가능

- ggplot2 패키지에 내장된 diamonds 데이터(다이아몬드 5만여 개의 캐럿, 컷팅 방식, 가격 등의 속성을 담은 데이터)를 이용해 막대 그래프를 만든 후 ggplotly()에 적용해 인터랙티브 그래프 제작

 

 

 

 

■ dygraphs 패키지로 인터랙티브 시계열 그래프 만들기

- 인터랙티브 시계열 그래프를 이용하면 마우스로 시간 축을 움직이면서 시간에 따라 데이터가 어떻게 변하는지 자세히 살펴볼 수 있음

- ggplot2 패키지에 내장된 economics 데이터를 이용해 그래프 제작 (economics는 실업자 수, 저축률 등 1967~2015년 미국의 월별 경제 지표를 담은 데이터)

 

(1) dygraphs 패키지 설치 및 로드

install.packages("dygraphs")
library(dygraphs)

 

(2) economics 데이터 불러오기

economics <- ggplot2::economics
head(economics)

 

(3) 데이터 타입 변경하기

- ★ dygraphs 패키지를 이용해 인터랙티브 시계열 그래프를 만들려면 데이터가 시간 순서 속성을 지니는 xts 데이터 타입으로 되어 있어야 함

- xts()를 이용해 economics 데이터의 unemploy(실업자 수)를 xts 타입으로 변경

(참고: xts 패키지는 R에 내장되어 있으니 별도 설치 필요X)

library(xts)
eco <- xts(economics$unemploy, order.by = economics$date)
head(eco)

 

(4) 인터랙티브 시계열 그래프 만들기

- dygraphs 패키지의 dygraph()를 이용해 인터랙티브 시계열 그래프 제작

dygraph(eco)

선 위에 마우스 커서를 올리면 그래프 우측 상단에 날짜와 실업자 수가 표시됨

 

(5) 날짜 범위 선택 기능

- dygraph()에 %>%를 이용해 dyRangeSelector()를 추가하면 그래프 아래에 날짜 범위 선택 기능이 추가됨

- 버튼을 움직여 특정 기간만 선택 가능하고, 범위를 정한 뒤 좌우로 움직이면 시간에 따른 데이터의 변화를 볼 수 있음

dygraph(eco) %>% dyRangeSelector()

 

 

(6) 여러 값 표현하기

- 인터랙티브 시게열 그래프여러 값을 동시에 표현 가능함 (시간을 중심으로 나머지 데이터들 표현 가능)

- economics 데이터의 unemploy(실업자 수)와 psavert(저축률)를 그래프에 함께 표현 가능

# 저축률
eco_a <- xts(economics$psavert, order.by = economics$date)

# 실업자 수
eco_b <- xts(economics$unemploy/1000, odrer.by = economics$date)

 

(7)

eco2 <- cbind(eco_a, eco_b)                   # 데이터 결합
colnames(eco2) <- c("psavert", "unemploy")    # 변수명 바꾸기
head(eco2)

 

(8) dygraph()를 이용해 인터랙티브 시계열 그래프 제작

dygraph(eco2) %>% dyRangeSelector()

마우스 커서를 올리면 그래프 우측 상단에 두 변수의 값이 동시에 표시됨

 

 

 

 

** 참고한 자료

- Plotly ggplot2 Library: https://plot.ly/ggplot2/

 

plotly

Plotly for ggplot2 is an interactive, browser-based charting library built on Plotly's open source javascript graphing library, plotly.js. It works entirely locally, through the HTML widgets framework.

plot.ly

- dygraphs for R: http://rstudio.github.io/dygraphs

 

dygraphs for R

The dygraphs package is an R interface to the dygraphs JavaScript charting library. It provides rich facilities for charting time-series data in R, including: Automatically plots xts time series objects (or any object convertible to xts). Highly configurab

rstudio.github.io

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

단계 구분도(Choropleth Map)란?

- 지역별 통계치를 색깔의 차이로 표현한 지도

- 인구나 소득 같은 특성이 지역별로 얼마나 다른지 쉽게 이해 가능

 

 

■ 미국 주별 강력 범죄율 단계 구분도 만들기

(1) 패키지 준비하기

- 단계 구분도는 ggiraphExtra 패키지를 이용

install.packages("ggiraphExtra")
library(ggiraphExtra)

 

(2) 미국 주별 범죄 데이터 준비하기

- R에 내장된 USArrests 데이터는 1973년 미국 주(state)별 강력 범죄율 정보를 담고 있음

 

(3) 새 데이터 프레임 생성, 변수 속성 변경하기

- USArrests 데이터는 지역명 변수가 따로 없고, 대신 행 이름(rownames)이 지역명으로 되어 있음

- tibble 패키지의 rownames_to_column()을 이용해 행 이름을 state 변수로 바꿔 새 데이터 프레임 생성

(참고: tibble 패키지는 dplyr을 설치하면 자동으로 설치됨)

- 뒤에서 사용할 지도 데이터의 지역명 변수는 모든 값이 소문자로 되어 있기 때문에 이와 동일하게 맞추기 위해 tolower()를 이용해 state 값을 소문자로 수정

library(tibble)

crime <- rownames_to_column(USArrests, var = "state")
crime$state <- tolower(crime$state)

str(crime)

 

(4) 미국 주 지도 데이터 준비하기

- 단계 구분도 생성 시 지역별 위도, 경도 정보가 있는 지도 데이터 필요

- R에 내장된 maps 패키지에 미국 주별 위경도를 나타낸 state 데이터 존재. ggplot2 패키지의 map_data()를 이용해 이 데이터를 데이터 프레임 형태로 호출

install.packages("maps")
install.packages("mapproj")
library(ggplot2)
states_map <- map_data("state")
str(states_map)

(참고: map_data를 사용하려면 maps, mapproj 이라는 패키지가 설치되어 있어야함)

 

(5) 단계 구분도 만들기

- ggiraphExtra 패키지의 ggChoropleth()를 이용해 단계 구분도 제작

- 살인 범죄 건수를 색깔로 표현하기 위해 aes의 fill에 Murder 변수 지정

- map_id에 지역 구분이 되는 state 변수 지정

- crime 데이터의 state 변수와 states_map 데이터의 region 변수는 미국 주 이름을 나타내는 동일한 값으로 구성되어 있음

 

 

(6) 인터랙티브 단계 구분도 만들기

- interactive 파라미터를 TRUE로 설정하면, 마우스 움직임에 반응하는 인터랙티브 단계 구분도 제작 가능

- 5번의 코드 제일 뒷부분에 interactive = T 만 추가하면 됨

- 뷰어창의 인터랙티브 단계 구분도는 [Export > Save as Web Page...]를 클릭하면 HTML 포맷으로 저장 가능

ggChoropleth(data = crime,
             aes(fill = Murder,        
                 map_id = state),      
             map = states_map,
             interactive = T)

 

움짤 만들기 귀찮아서 직접 촬영,,,,

 

 

 

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

+ Recent posts