purrr
+ trelliscopejs
gapminder
데이터를 가지고 회귀모형을 구축하고 모형을 활용하여 종속변수(기대수명, lifeExp
)가 늘어나지 못한 국가를 뽑아내고 이를 시각적으로 확인해보자.
# 0. 환경설정 -----
# 데이터
library(gapminder)
# Tidyverse
library(tidyverse)
# 시각화
library(cowplot)
library(trelliscopejs)
library(rbokeh)
# 모형
library(broom)
# 1. 데이터 -----
gapminder
# A tibble: 1,704 x 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779.
2 Afghanistan Asia 1957 30.3 9240934 821.
3 Afghanistan Asia 1962 32.0 10267083 853.
4 Afghanistan Asia 1967 34.0 11537966 836.
5 Afghanistan Asia 1972 36.1 13079460 740.
6 Afghanistan Asia 1977 38.4 14880372 786.
7 Afghanistan Asia 1982 39.9 12881816 978.
8 Afghanistan Asia 1987 40.8 13867957 852.
9 Afghanistan Asia 1992 41.7 16317921 649.
10 Afghanistan Asia 1997 41.8 22227415 635.
# ... with 1,694 more rows
대륙과 국가를 그룹으로 잡아 회귀분석을 각각에 대해서 돌리고 나서, 모형 결과값을 데이터와 모형이 함께 위치하도록 티블(tibble)에 저장시켜 놓은다. 그리고 나서, 주요한 회귀모형 성능지표인 결정계수(\(R^2\))를 기준으로 정렬시킨다.
# 2. 모형 -----
country_model <- function(df)
lm(lifeExp ~ year, data=df)
by_country <- gapminder %>%
group_by(country, continent) %>%
nest() %>%
mutate(model = map(data, country_model),
model_glance = map(model, glance),
rsquare = map_dbl(model_glance, ~.$r.squared))
by_country %>%
arrange(-rsquare)
# A tibble: 142 x 6
country continent data model model_glance rsquare
<fct> <fct> <list> <list> <list> <dbl>
1 Brazil Americas <tibble [1~ <S3: ~ <data.frame [1 ~ 0.998
2 Mauritania Africa <tibble [1~ <S3: ~ <data.frame [1 ~ 0.998
3 France Europe <tibble [1~ <S3: ~ <data.frame [1 ~ 0.998
4 Switzerland Europe <tibble [1~ <S3: ~ <data.frame [1 ~ 0.997
5 Pakistan Asia <tibble [1~ <S3: ~ <data.frame [1 ~ 0.997
6 Indonesia Asia <tibble [1~ <S3: ~ <data.frame [1 ~ 0.997
7 Equatorial Guinea Africa <tibble [1~ <S3: ~ <data.frame [1 ~ 0.997
8 Comoros Africa <tibble [1~ <S3: ~ <data.frame [1 ~ 0.997
9 Nicaragua Americas <tibble [1~ <S3: ~ <data.frame [1 ~ 0.997
10 Guatemala Americas <tibble [1~ <S3: ~ <data.frame [1 ~ 0.997
# ... with 132 more rows
rbokeh
기능을 활용하도록 figure()
함수에 ly_points
, ly_abline
을 파이프 연산자로 연결하여 데이터와 앞서 구현한 회귀모형을 함께 넣어 시각화하는 함수를 작성하고 정상적인 반영여부를 확인한다.
# 3. 시각화 -----
country_plot <- function(data, model) {
figure(xlim = c(1948, 2011), ylim=c(10,95), tools = NULL) %>%
ly_points(year, lifeExp, data=data, hover=data) %>%
ly_abline(model)
}
## 3.1. 단일 그래프
country_plot(by_country$data[[1]], by_country$model[[1]])
trelliscopejs
팩키지를 활용하여 나머지 모든 국가의 회귀분석결과를 시각화한다. 시간이 지남에 따라 기대수명이 늘어나지 못하는 나라를 중심으로 시각화한다.
## 3.2. trelliscope 그래프
by_country <- by_country %>%
mutate(plot = map2_plot(data, model, country_plot)) %>%
arrange(rsquare)
by_country %>%
trelliscope(name = "by_country_lm", nrow=2, ncol=4, path="gapminder")