サーチ…
式の基礎
Rの統計関数は、いわゆるWilkinson-Rogersの式記法1を頻繁に使用します。
線形回帰のためにlmようなモデル関数を実行するときは、 formulaが必要です。このformulaは、どの回帰係数を推定するかを指定します。
my_formula1 <- formula(mpg ~ wt)
class(my_formula1)
# gives "formula"
mod1 <- lm(my_formula1, data = mtcars)
coef(mod1)
# gives (Intercept) wt
# 37.285126 -5.344472
~ (LHS)の左側に従属変数が指定され、右側(RHS)には独立変数が含まれます。技術的には、上記のformula呼び出しは冗長です。なぜなら、チルダ演算子は式クラスのオブジェクトを返す中置関数だからです。
form <- mpg ~ wt
class(form)
#[1] "formula"
formula関数の~の利点は、評価環境を指定できることです。
form_mt <- formula(mpg ~ wt, env = mtcars)
この場合、出力は、(デフォルトで)傍受パラメータと同様に、 wt回帰係数が推定されることを示す。インターセプトは、 formula 0または-1を含めることによって、除外/強制的に0にすることができます。
coef(lm(mpg ~ 0 + wt, data = mtcars))
coef(lm(mpg ~ wt -1, data = mtcars))
変数aとbとの間の相互作用a 、 b a:bを次のformula含めa:b追加できます。
coef(lm(mpg ~ wt:vs, data = mtcars))
統計的な観点からは、主効果がないモデルでは相互作用を持たないことが一般的であるため、単純なアプローチはformulaをa + b + a:bに拡張することです。これは機能しますがa*b書くことで簡略化できます。 *演算子は、係数の交差(2つの係数列の間)または列の一方または両方が「数値」のときの乗算を示します。
coef(lm(mpg ~ wt*vs, data = mtcars))
*表記を使用すると、次のようなすべての低次効果を含む用語が展開されます。
coef(lm(mpg ~ wt*vs*hp, data = mtcars))
切片に加えて、7つの回帰係数を与える。 3方向インタラクション用、3方向インタラクション用、3つのメインエフェクト用。
たとえば、3方向インタラクションを除外し、すべての2方向インタラクションを保持したい場合は、2つの省略形があります。まず、 -を使用して、特定の用語を減算することができます。
coef(lm(mpg ~ wt*vs*hp - wt:vs:hp, data = mtcars))
あるいは、私たちが必要とする相互作用のレベルを指定するために^記法を使用することができます:
coef(lm(mpg ~ (wt + vs + hp) ^ 2, data = mtcars))
これらの2つの数式仕様は、同じモデル行列を作成する必要があります。
最後に、 .利用可能なすべての変数を主なエフェクトとして使用することを簡略化しています。この場合、 data引数は、利用可能な変数(LHSにない変数)を取得するために使用されます。したがって:
coef(lm(mpg ~ ., data = mtcars))
切片と10個の独立変数の係数を与える。この表記は、予測や分類にすべての変数を使用する機械学習パッケージで頻繁に使用されます。注意してください.コンテキストに依存します(別の意味では?update.formulaを参照してください)。
- GNウィルキンソンとCEロジャース。 ロイヤル統計学会誌。シリーズC(応用統計) Vol。 22、No.3(1973)、pp.392-399
線形、二次および二次相互作用条件を作成する
y ~ . :ここに.モデルのフィッティングに使用されるデータフレーム内のyを除くすべての変数として解釈されます。これは、予測変数の線形結合と同等です。たとえば、 y ~ var1 + var2 + var3+...+var15
y ~ . ^ 2は、データフレーム内の変数のすべての線形(主効果)と二次相互作用項を与えます。これはy ~ var1 + var2 + ...+var15 + var1:var2 + var1:var3 + var1:var4...and so on
y ~ var1 + var2 + ...+var15 + I(var1^2) + I(var2^2) + I(var3^2)...+I(var15^2) :ここでI(var^2)データフレーム内の1つの変数の2次多項式を示します。
y ~ poly(var1, degree = 2) + poly(var2, degree = 2)+...poly(var15, degree = 2)
または
y ~ poly(var1, var2, var3, ....var15, degree = 2)は上記の式と等価です。
poly(var1, degree = 2)はvar1 + I(var1^2)と等価です。
3次多項式を得るには、 poly()でdegree = 3を使用degree = 3ます。
poly対I(var, 2)使用には注意が必要です。これはモデルをフィッティングした後で、それぞれ異なる係数を生成しますが、フィッティングされた値は同じモデルの異なるパラメータ化を表すため同等です。使用することをお勧めしますI(var, 2)の上にpoly()で見られる要約影響を避けるためにpoly() 。
要約すると、線形、二次、二次の相互作用項を得るためには、次のような式があります。
y ~ .^2 + I(var1^2) + I(var2^2)+...I(var15^2)
4つの変数のデモ:
old <- reformulate( 'y ~ x1+x2+x3+x4' )
new <- reformulate( " y ~ .^2 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) ")
tmp <- .Call(stats:::C_updateform, old, new)
terms.formula(tmp, simplify = TRUE )
# ~y ~ x1 + x2 + x3 + x4 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) +
# x1:x2 + x1:x3 + x1:x4 + x2:x3 + x2:x4 + x3:x4
# attr(,"variables")
# list(~y, x1, x2, x3, x4, I(x1^2), I(x2^2), I(x3^2), I(x4^2))
# attr(,"factors")
# x1 x2 x3 x4 I(x1^2) I(x2^2) I(x3^2) I(x4^2) x1:x2 x1:x3 x1:x4 x2:x3 x2:x4 x3:x4
# ~y 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# x1 1 0 0 0 0 0 0 0 1 1 1 0 0 0
# x2 0 1 0 0 0 0 0 0 1 0 0 1 1 0
# x3 0 0 1 0 0 0 0 0 0 1 0 1 0 1
# x4 0 0 0 1 0 0 0 0 0 0 1 0 1 1
# I(x1^2) 0 0 0 0 1 0 0 0 0 0 0 0 0 0
# I(x2^2) 0 0 0 0 0 1 0 0 0 0 0 0 0 0
# I(x3^2) 0 0 0 0 0 0 1 0 0 0 0 0 0 0
# I(x4^2) 0 0 0 0 0 0 0 1 0 0 0 0 0 0
# attr(,"term.labels")
# [1] "x1" "x2" "x3" "x4" "I(x1^2)" "I(x2^2)" "I(x3^2)" "I(x4^2)"
# [9] "x1:x2" "x1:x3" "x1:x4" "x2:x3" "x2:x4" "x3:x4"
# attr(,"order")
# [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2
# attr(,"intercept")
# [1] 1
# attr(,"response")
# [1] 1
# attr(,".Environment")
# <environment: R_GlobalEnv>