前回の続き
本題
mae
Mean Absolute Errorを計算してくれます。
modelr::mae(lm(iris$Sepal.Length ~ iris$Petal.Length), iris) # [1] 0.3264736
実際に定義に従って計算してみます。
iris %>% modelr::add_residuals(lm(iris$Sepal.Length ~ iris$Petal.Length)) %>% select(resid) %>% abs() %>% unlist() %>% mean() # [1] 0.3264736
一致しました。しかし、以降の関数も含めてpipeフレンドリーではない(データが第2引数)なのが惜しい…
ただし、pipe受け付けないわけではなく、以下のように.
を置いてあげれば書けます。
iris %>% modelr::mae(lm(iris$Sepal.Length ~ iris$Petal.Length), .) # [1] 0.3264736
記述量がかなり減るので便利感ありますね。
qae
quantiles of absolute errorのことだそうです。
modelr::qae(lm(iris$Sepal.Length ~ iris$Petal.Length), iris) # 5% 25% 50% 75% 95% # 0.02893018 0.12853812 0.29006196 0.47718642 0.74273864
先の残差の絶対値をstats::quantile
を使って上記の%の値を表示しています。
rmse
Root Mean Square Errorを計算してくれます。
modelr::rmse(lm(iris$Sepal.Length ~ iris$Petal.Length), iris) # [1] 0.4043516
こちらも定義にしたがって計算。
iris %>% modelr::add_residuals(lm(iris$Sepal.Length ~ iris$Petal.Length)) %>% select(resid) %>% abs() %>% unlist() %>% `^`(2) %>% mean() %>% sqrt() # [1] 0.4043516
一致しました。
rsquare
ヘルプによれば、the variance of the predictions divided by by the variance of the response.
とのことですが、これって普通にbroom::glance
でとってくれば良いのでは…?
やってみます。
modelr::rsquare(lm(iris$Sepal.Length ~ iris$Petal.Length), iris) # [1] 0.7599546
iris %>% modelr::fit_with(lm, formulas(~Sepal.Length, model1=~Petal.Length) ) %>% map(broom::glance) # $model1 # r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC deviance df.residual # 1 0.7599546 0.7583327 0.4070745 468.5502 1.038667e-47 2 -77.02021 160.0404 169.0723 24.52503 148 #
glance
の結果に含まれていますね。これを抜き出せば良いはずですが、値がそのまま出るという意味では便利…かも?ですね。
次以降は重い…
これでmodelrの簡単な方の関数が概ね終わり?
あとはresample系が結構重いので全部見るのは9月に入ってしまうかも。
あ、TokyoR 64 でLTやります。
タイトルは「Rからmidiファイルを読んで
plotしてみたお話」になる予定。。。
なので、この続きは週明けから。動作を確認していかなくては…
個人的には前回のfit_withがかなり便利だと思っていて、データとモデルの式を分離できる。しかもモデルの関数部分も分離できるということで、あれはかなり汎用性が高いのではないかと思いました。
broomとあわせて使いこなしたいですね…
Enjoy!