HOWTO · R

在 R 中使用波浪号符号(~)

了解波浪号符号(~)在 R 公式中的含义、如何与 lm() 一起使用,以及如何用 help() 查找它的文档。

本页内容

在 R 中,波浪号运算符(~)创建一个公式。在像 y ~ x 这样的模型公式中,左侧命名要建模的响应,右侧指定预测变量。读作"用 x 对 y 建模"。仅创建公式本身并不会拟合模型;像 lm() 这样的函数会解释它。

如何在 R 中使用波浪号运算符

写成 response ~ predictor1 + predictor2 来指定一个响应和两个预测变量。在模型公式中,+ 添加的是模型项,而不是把预测变量的值彼此相加。公式也可以只有右侧,如 ~ x;这种形式是否合适取决于接收它的函数。

拟合线性模型

下面这个自包含示例使用 R 的标准函数 lm()。它创建一个数据框,拟合一个模型,并打印其系数。

measurements <- data.frame(
    x = c(1, 2, 3, 4, 5),
    y = c(3, 5, 6, 9, 11)
)

model <- lm(y ~ x, data = measurements)
print(coef(model))
(Intercept)           x
        0.8         2.0

在这里,y 是响应,x 是预测变量。参数 data 告诉 lm() 去哪里查找这些列。默认情况下,这个模型包含截距:coef(model) 返回截距和 x 的系数。在拟合直线上,截距表示 x = 0 处的拟合响应,x 的系数表示 x 增加一个单位时拟合响应的变化。使用 summary(model) 可请求更完整的统计摘要。

要改编公式,请替换列名并提供你自己的数据框。对于多个预测变量,使用像 y ~ x1 + x2 这样的公式。在 lm() 中,y ~ x1 * x2 包含两个预测变量及其交互作用,而 y ~ x - 1 移除截距。这些是语法示例,不是已执行的示例。检查拼写,并确保引用的列存在于所提供的数据中。

动态构造公式

当变量名以字符串形式存储时,as.formula() 可以把公式文本转换成对象。运行这个自包含示例,从响应名 "y" 和预测变量名 "x1"、"x2" 构造并打印一个公式:

response <- "y"
predictors <- c("x1", "x2")
formula_text <- paste(response, "~", paste(predictors, collapse = " + "))
model_formula <- as.formula(formula_text)
print(model_formula)
y ~ x1 + x2

内层 paste() 用 + 连接预测变量名,外层调用把响应放在 ~ 之前。得到的公式用两个预测变量指定 y。仅构造不会拟合模型,也不会估计系数。要拟合它,把 model_formula 连同包含这些命名列的数据框一起传给 lm();仅构造公式时不需要这些列。

查询运算符

使用 help() 函数并把运算符放在引号中:help("~")。这会请求 R 的波浪号文档。它的呈现方式取决于你的 R 界面和帮助设置;它不要求 RStudio 的某个特定文件浏览器选项卡。关于模型项的语法,另见 help("formula")。

结论

使用 ~ 构造公式,并把它们传给接受公式的函数。对于线性模型,把响应放在左侧,预测变量放在右侧。使用 help("~") 查询运算符,使用 help("formula") 了解模型公式的惯例。