公式的基础知识
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