公式的基礎知識

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 呼叫是多餘的,因為 tilde-operator 是一箇中綴函式,它返回一個具有公式類的物件:

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))

變數 ab 之間的相互作用可以通過包含 a:b 新增到 formula

 coef(lm(mpg ~ wt:vs, data = mtcars))

由於(從統計的角度來看)通常建議在沒有主效應的模型中沒有相互作用,天真的方法是將 formula 擴充套件到 a + b + a:b。這可以通過寫 a*b 來簡化,其中*運算子指示因子交叉(當在兩個因子列之間時)或當一個或兩個列是’數字’時的乘法:

coef(lm(mpg ~ wt*vs, data = mtcars))

使用*表示法擴充套件一個術語以包括所有低階效果,例如:

coef(lm(mpg ~ wt*vs*hp, data = mtcars))

除截距外,還將給出 7 個迴歸係數。一個用於三向互動,三個用於雙向互動,三個用於主要效果。

例如,如果想要排除三向互動,但保留所有雙向互動,則有兩個簡寫。首先,使用 - 我們可以減去任何特定的術語:

coef(lm(mpg ~ wt*vs*hp - wt:vs:hp, data = mtcars))

或者,我們可以使用^表示法來指定我們需要的互動級別:

coef(lm(mpg ~ (wt + vs + hp) ^ 2, data = mtcars))

這兩個公式規範應該建立相同的模型矩陣。

最後,. 是使用所有可用變數作為主效應的簡寫。在這種情況下,data 引數用於獲取可用變數(不在 LHS 上)。因此:

coef(lm(mpg ~ ., data = mtcars))

給出截距和 10 個自變數的係數。這種表示法經常用於機器學習包中,其中人們希望使用所有變數進行預測或分類。請注意,. 的含義取決於上下文(例如,參見 ?update.formula 的不同含義)。

  1. GN Wilkinson 和 CE Rogers。皇家統計學會期刊。C 系列(應用統計學) Vol。22,No。3(1973),pp.392-399