Source
library(hsData)
source(glue::glue("{here::here()}/vignettes/_common.R"), encoding="UTF-8")

차량 데이터: cars

국내 출시된 30종 차량 정보를 바탕으로 중량(kg)과 연비(km/L) 관계를 파악한다.

Source
knitr::kable(
  cars, 
  booktabs = TRUE,
  align = c('c', 'c'),
  caption = '실용통계  78쪽 국내출시 차량 중량과 연비'
)
Results
실용통계 78쪽 국내출시 차량 중량과 연비
중량 연비
1795 13
1550 11
1235 15
1460 13
1820 13
2015 8
1220 13
1595 10
1450 12
1565 15
1325 13
890 16
1270 11
1640 14
1510 10
2165 11
1555 11
1320 12
1650 10
1405 12
1285 13
1550 15
1645 12
1990 11
1400 12
900 15
1030 13
1250 13
1720 9
1290 11

시각화 - 산점도

국내출시 차량 중량과 연비관계를 시각화한다.

Source
# https://stackoverflow.com/questions/7549694/add-regression-line-equation-and-r2-on-graph
lm_eqn <- function(df){
    m <- lm(연비 ~ 중량, df);
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
         list(a = format(unname(coef(m)[1]), digits = 2),
              b = format(unname(coef(m)[2]), digits = 2),
             r2 = format(summary(m)$r.squared, digits = 3)))
    as.character(as.expression(eq));
}

cars %>% 
  ggplot(aes( x = 중량, y = 연비)) +
    geom_point(size = 2) +
    geom_smooth(method='lm', formula= y~x, se= FALSE) +
    theme_bw() +
    labs(title = "국내출시 차량 중량과 연비 관계",
         subtitle = "산점도(Scatter Plot)",
         x = "중량 (kg)",
         y = "연비 (km/L)",
         caption = "출처: 통계개발원 실용통계, P78") +
  geom_text(x = 1130, y = 9, label = lm_eqn(cars), parse = TRUE, size = 5)
Results

통계량

먼저 각 변수를 살펴보자.

Source
cars_skim <- cars %>% 
  skimr::skim() %>% 
  skimr::yank("numeric") %>% 
  select(-n_missing, -complete_rate)
  
knitr::kable(
  cars_skim, 
  booktabs = TRUE,
  align = c(rep('c', times=9)),
  caption = '실용통계  78쪽 국내 출시 차량 연비와 중량'
)
Results
실용통계 78쪽 국내 출시 차량 연비와 중량
skim_variable mean sd p0 p25 p50 p75 p100 hist
중량 1483.16667 302.56798 890 1286.25 1485 1643.75 2165 ▂▆▇▂▂
연비 12.23333 1.90613 8 11.00 12 13.00 16 ▂▇▅▇▅

중량과 연비 두변수 관계를 추세선 방정식으로 파악할 수 있다.

Source
cars_lm <- lm(연비 ~ 중량, data = cars) 

cars_lm %>% 
  broom::tidy() %>% 
  knitr::kable(
    booktabs = TRUE,
    align = c(rep('c', times=9)),
    caption = '국내 출시 차량 연비와 중량 회귀식'
  )
Results
국내 출시 차량 연비와 중량 회귀식
term estimate std.error statistic p.value
(Intercept) 17.3490577 1.5070522 11.51192 0.0000000
중량 -0.0034492 0.0009963 -3.46213 0.0017394

연비와 중량간 수식으로 표현하면 다음과 같다.

\[ \begin{aligned} \operatorname{\widehat{연비}} &= 17.34906 - 0.00345(\operatorname{중량}) \end{aligned} \]