とある技術者の徒然草

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

【R言語】doでグループごとに線形回帰

統計検定準1級に無事合格したので、R,pythonの勉強を再開したいと思います。

doでグループごとに線形回帰

もはや、doを使ったやり方は古いですが、念のためメモ

##doの使い方
#各グループから上位2行を取ってくる

library(dplyr, warn.conflicts = FALSE)

mtcars %>%
  group_by(cyl) %>%
  do(head(., 2))

mtcars %>% 
  group_by(cyl) %>% 
  do(lm.res = lm(mpg~.,data=.)) ->lmres


#これはだめ
mtcars %>% 
  group_by(cyl) %>% 
  do(cor(.$disp,.$wt))

#https://qiita.com/uri/items/27f1497778b4385acb25#
# cor()の返り値をdata.frame()で処理する
mtcars %>% 
  group_by(cyl) %>% 
  do(cor(.$disp,.$wt) %>% data.frame())

#これはだめ
mtcars %>% 
  group_by(cyl) %>% 
  do(wt_max = max(.$wt),
     drat_max = max(.$drat))

#データフレーム返してもらう
mtcars %>% 
  group_by(cyl) %>% 
  do(data.frame(
     wt_max = max(.$wt),
     drat_max = max(.$drat)))

#決定係数を取り出す
lmres %>% 
  summarise(cyl = cyl,r2 = summary(lm.res)$r.squared)

#パラメーターを抜き出す
lmres %>% do(
  data.frame(cyl = .$cyl,
             intercep = coef(.$lm.res)[1],
             disp_slope = coef(.$lm.res)[3],
             qsec_slope = coef(.$lm.res)[7],
             wt_slope = coef(.$lm.res)[6]))

次はpurrrでグループごとの処理を行いたい。