公式的基础知识

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