其中?formula
写道:
公式中的 . 有两种特殊解释。通常的一种是在模型拟合函数的数据参数上下文中,表示“公式中没有的其他所有列”:参见 term.formula。仅在 update.formula 上下文中,它表示“公式的这一部分之前的内容”。
当我阅读该文档的第一部分时,我会假设以下代码:
dat <- data.frame(
y = rnorm(10),
x1 = runif(10),
x2 = rbinom(10,size = 1,prob = 0.5),
x3 = rbinom(10,size = 1,prob = 0.5)
)
mt <- terms.formula(
x = y ~ x1 + . + (.)^2,
data = dat
)
mm <- model.matrix(mt,dat)
...将产生一个模型矩阵,其中只有的交互项,因为这是“公式中没有其他内容”x2:x3
中仅有的两列。但是:dat
> colnames(mm)
[1] "(Intercept)" "x1" "x2" "x3" "x1:x2"
[6] "x1:x3" "x2:x3"
...相反,我们得到了所有的互动。
如果我明确地写出来,当然,我会得到我期望的结果:
> mt1 <- terms.formula(
+ x = y ~ x1 + x2 + x3 + (x2 + x3)^2,
+ data = dat
+ )
>
> mm1 <- model.matrix(mt1,dat)
> colnames(mm1)
[1] "(Intercept)" "x1" "x2" "x3" "x2:x3"
我知道公式和模型矩阵有时会稍微令人困惑,但我很难将我对文档的阅读与行为相协调。
我是否错误地理解了文档,或者可能错误地编写了公式(对于我试图做的事情)?或者文档不完全准确?