公式的基礎知識
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))
變數 a
和 b
之間的相互作用可以通過包含 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
的不同含義)。
- GN Wilkinson 和 CE Rogers。皇家統計學會期刊。C 系列(應用統計學) Vol。22,No。
3(1973)
,pp.392-399