« 読了:Bates, et al. (2015?) lme4::lmer()でたのしい線形混合モデリング | メイン | 時系列回帰の撹乱項が自己回帰していると、いったいなにがどうなるのか(追記あり) »
2020年2月29日 (土)
Rをつかっているとformulaを書かないといけないことがあるけど(回帰系の関数を呼ぶときとかに)、なんか便利な書き方がありそうなのに全然使っていない。このたび、ふとstats::formula()のドキュメントを眺めていたら、恥ずかしながら「へぇー」と思うことがいくつかあった。
この話題、Rを使っている人にとってはたぶん馴染み深い話で、webをちょっと検索するだけで、丁寧に解説しておられるブログ記事をいくつもみつけることができる(たとえばこちら:[R] 予測モデルを作るには formula を活用せよ)。そういうのをきちんと読んできちんと理解しておけばいいんですけどね。そのときは「へぇー」と思うんだけど、すぐに忘れちゃうのである。
というわけで、今日は忘れないようにメモしておこう。なぜか執事風の丁寧語で。お嬢様、羊肉のソテーでございます、って感じで。
- 「
y ~ model」: 反応yをmodelで指定した予測子でモデル化いたします。 - 「
a + b」:aとbの線形和でございます。 - 「
a : b」:aとbの交互作用でございます。 - 「
a * b」:aとbのクロス、すなわちa+b+a:bでございます。 - 「
(a + b + c)^2」:(a + b + c)の二次のクロス、すなわちa,b,cの主効果と二次交互作用でございます [これ知らなかった... 文字通り展開するとa*a, b*b, c*cが生まれるけど、それらは算術的な意味での$a^2, b^2, c^2$ではなくて、単にa, b, cの主効果ってことになるのね。へー] - 「
a + b %in% a」:bはaにネストしております。すなわちa + a:bでございます。[ここちょっと不思議なところで...%in%は常に:と等価なのかしらん?] 「(a + b + c)^2 - a:b」:(a + b + c)^2からa:bを取り除いたもの、すなわちa + b + c + b:c + a:cでございます。- 「
y ~ x - 1」: 切片項を取り除いております。y ~ x + 0,y ~ 0 + xでもよろしゅうございます [←Rを使い始めたときから、formulaの右辺で0と1が等価だってのが気持ち悪くてしかたない。責任者でてこい] 「log(y) ~ a + log(x)」: このように、算術表現もお使いになれます [←私、formulaのなかでこういう変数変換を掛けるのが生理的に許せなくて、必ず自力で前処理している。なぜ気持ち悪いのかいま気が付いた。formulaのなかの演算子は算術演算子ではないのに(たとえば+は和ではないのに)、関数は算術表現として扱われるというのが気持ち悪いんだ...]- 「
a + I(b+c)」: aとb+cの線形和でございます。I()のなかの演算子は算術演算子として扱われるのでございます。 - 「
.」: 「そのformulaのなかにないすべての列」を表します [←formulaをupdateするときはちがう意味になるのだが、まあupdateなんて使わないからいいや] - 「
a + b + offset(z)」: aとbの線形和とzとの和でございます。zの係数は1となります。なお、この表現は受け付けない関数もございます。
ところで、lm(y ~ a/b)なんていう書き方をみたことがあるけど(y ~ a + a:bと等価だと思う)、stats::formula()のドキュメントにも、stats::lm()のドキュメントにも載ってなかった。あれえ?
雑記:データ解析 - 覚え書き:Rのformulaのなかで使える表現