目次
Rのformulaについて
R言語のformulaとは、「式」を表見するオブジェクトです。ここで言う式とは、変数間の関係の表現のことです。formulaは統計的検定や回帰分析、教師あり機械学習などで頻繁に現れるため、R言語において必須の概念になります。ここでは、formulaの使い方を中心に解説します。そのため、以降は統計的な正しさは一切考慮していないのでご注意ください。また、回帰分析に使用するlm()の使い方や結果解釈の仕方なども一切考慮しておりません。
サンプルデータ
formulaの解説にあたり、Rに標準で搭載されているmtcarsデータセットを用います。mtcarsは、1974年のMotor TrendUS誌から抽出され、32台の自動車(1973〜74年モデル)の燃料消費量と自動車の設計と性能の10の側面で構成されています。
列名 | 説明 |
---|---|
mpg | マイル/(US) ガロン |
cyl | シリンダー数 |
disp | 変位(cu.in.) |
hp | 総馬力 |
drat | 後輪車軸比 |
wt | 重量(1000ポンド) |
qsec | 1/4マイルタイム |
vs | エンジン(0 = V字型、1 = ストレート) |
am | トランスミッション(0 = 自動、1 = 手動) |
gear | 前進ギアの数 |
carb | キャブレターの数 |
mtcars |> head()
(out) mpg cyl disp hp drat wt qsec vs am gear carb
(out)Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
(out)Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
(out)Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
(out)Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
(out)Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
(out)Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
formulaの~
formulaの基本は「~」の左側と右側に変数を記述することです。例えば、目的変数がmpg、説明変数がcylの回帰分析の場合、formulaは「mpg ~ cyl」となります。次の出力の(Intercept)は定数項(切片)を意味します。
lm(mpg ~ cyl, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ cyl, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl
(out) 37.885 -2.876
formulaの+演算子
formulaの+演算子は変数を追加します。例えば、目的変数がmpg、説明変数がcylとdispの回帰分析の場合、formulaは「mpg ~ cyl + disp」となります。
lm(mpg ~ cyl + disp, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ cyl + disp, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl disp
(out) 34.66099 -1.58728 -0.02058
formulaの:演算子
formulaの:演算子は変数間の交互作用を表します。例えば、目的変数がmpg、説明変数がcylとdisp交互作用の回帰分析の場合、formulaは「mpg ~ cyl:disp」となります。
lm(mpg ~ cyl:disp, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ cyl:disp, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl:disp
(out) 27.083381 -0.004314
formulaの*演算子
formulaの*演算子は2つの変数とその交互作用を表します。例えば、「mpg ~ cyl*disp」は「mpg ~ cyl + disp + cyl:disp」と等価になります。
lm(mpg ~ cyl*disp, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ cyl * disp, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl disp cyl:disp
(out) 49.03721 -3.40524 -0.14553 0.01585
formulaの^演算子
formulaの^演算子は変数と指定された次数までの交互作用を表します。次は2次までの交互作用(cyl:disp、cyl:hp、disp:hp)を含めていることが確認できます。
lm(mpg ~ (cyl + disp + hp)^2, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ (cyl + disp + hp)^2, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl disp hp cyl:disp cyl:hp disp:hp
(out) 5.601e+01 -4.427e+00 -1.184e-01 -1.142e-01 1.439e-02 1.556e-02 -8.567e-05
次は3次までの交互作用を含めていることが確認できます。3次の交互作用はcyl:disp:hpです。
lm(mpg ~ (cyl + disp + hp)^3, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ (cyl + disp + hp)^3, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl disp hp cyl:disp cyl:hp disp:hp cyl:disp:hp
(out) 9.290e+01 -1.059e+01 -3.865e-01 -4.703e-01 5.270e-02 6.734e-02 2.808e-03 -3.841e-04
formulaの%in%演算子
formulaの%in%演算子は左側の変数が右側の変数と入れ子になっていることを表します。例えば、formula「mpg ~ cyl + disp %in% cyl」は「mpg ~ cly + cly:disp」と等価です。
lm(mpg ~ cyl + disp %in% cyl, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ cyl + disp %in% cyl, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl cyl:disp
(out) 34.262579 -1.847215 -0.001692
formulaの/演算子
formulaの/演算子は上記の%in%の省略形です。例えば、formula「mpg ~ cyl / disp」は「mpg ~ cyl + disp %in% cyl」と等価です。
lm(mpg ~ cyl / disp, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ cyl/disp, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl cyl:disp
(out) 34.262579 -1.847215 -0.001692
formulaの-演算子
formulaの-演算子は指定した項を削除することを表します。例えば、formula「mpg ~ (cyl + disp + hp)^2 – cyl:disp」は「mpg ~ cyl + disp + hp + cyl:hp + disp:hp」と等価です。
lm(mpg ~ (cyl + disp + hp)^2 - cyl:disp, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ (cyl + disp + hp)^2 - cyl:disp, data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl disp hp cyl:hp disp:hp
(out) 46.5392227 -1.6471355 -0.0522712 -0.1712206 0.0145951 0.0001544
定数項の除外
formulaにおいて、定数項を除外する方法はいくつかあります。
formulaの+演算子を使用して定数項を除外するには、例えばformulaを「mpg ~ 0 + cyl」のように表現します。このformulaは「mpg ~ cyl + 0」と表現することもできます。
lm(mpg ~ 0 + cyl, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ 0 + cyl, data = mtcars)
(out)
(out)Coefficients:
(out) cyl
(out)2.79
formulaの-演算子を使用して定数項を除外するには、例えばformulaを「mpg ~ cyl – 1」のように表現します。このformulaは「mpg ~ -1 + cyl」と表現することもできます。
lm(mpg ~ cyl - 1, data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ cyl - 1, data = mtcars)
(out)
(out)Coefficients:
(out) cyl
(out)2.79
.演算子
formulaの.演算子はformulaにおいて未使用の変数の全てを表します。例えば、formula「mpg ~ .」は「mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb」と等価です。
lm(mpg ~ ., data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ ., data = mtcars)
(out)
(out)Coefficients:
(out)(Intercept) cyl disp hp drat wt qsec vs am gear
(out) 12.30337 -0.11144 0.01334 -0.02148 0.78711 -3.71530 0.82104 0.31776 2.52023 0.65541
(out) carb
(out) -0.19942
formulaと関数
formula内で関数が使えます。例えばformula「log(mpg) ~ factor(cyl) + disp」と記述することができます。
lm(log(mpg) ~ factor(cyl) + disp, data = mtcars)
(out)
(out)Call:
(out)lm(formula = log(mpg) ~ factor(cyl) + disp, data = mtcars)
(out)
(out)Coefficients:
(out) (Intercept) factor(cyl)6 factor(cyl)8 disp
(out) 3.442424 -0.162139 -0.164691 -0.001636
formulaのI()
これまで見てきたようにformula特有の演算子は算術演算子と重複しています。そのため、formulaで算術演算子を使用したいときにはI()を使用します。例えばformula「mpg ~ I(cyl + disp)」は目的変数がmpg、説明変数が通常のベクトル同士の足し算(cyl + disp)をした結果の変数、という意味になります。
lm(mpg ~ I(cyl + disp), data = mtcars)
(out)
(out)Call:
(out)lm(formula = mpg ~ I(cyl + disp), data = mtcars)
(out)
(out)Coefficients:
(out) (Intercept) I(cyl + disp)
(out) 29.74340 -0.04074