とある技術者の徒然草

生産技術者の適当な日記(統計言語Rに関するメモがメイン)

【R言語】broomパッケージで複数モデルで線形回帰し、係数を可視化

R言語】broomパッケージで複数モデルで線形回帰し、係数を可視化

線形回帰を効率的に回せます。
係数をggplotで可視化

library(tidyverse)
library(tidymodels)


df <- diamonds 

df_input <- df %>% 
  mutate_if(is.ordered, factor, ordered = FALSE)
formulas = c(log(price) ~ clarity,
             log(price) ~ clarity + carat,
             log(price) ~ clarity + log(carat)) %>% 
  enframe("model_no", "formula")

#conf.int = TRUEで信頼区間を算出
df_result <- formulas %>% 
  mutate(model = map(formula, lm, data = df_input), 
         tidied = map(model, tidy,conf.int = TRUE), 
         glanced = map(model, glance)) 

#unnestでデータフレームに変換
df_coef <- df_result %>% 
  select(model_no, tidied) %>% 
  unnest() %>% 
  mutate_if(is.double, round, digits=2) 


#係数を可視化する
df_coef %>% 
  filter(term != "(Intercept)") %>% 
  ggplot() + 
  geom_pointrange(aes(x = term, y = estimate, ymin = conf.low, ymax = conf.high,colour=as.factor(model_no)))+ 
  coord_flip()


#横持に変換するとわかりやすい
#並び順を維持するためにfct_inorder()を使用(出てきた順に並ぶ)。
df_coef %>% 
  mutate(term = fct_inorder(term)) %>% 
  select(model_no,term,estimate) %>% 
  pivot_wider(names_from = model_no, values_from = estimate)

f:id:M_taka072:20200314213220j:plain
線形回帰係数