>有它通常的含义; y 是否大于 0?这将评估为具有TRUE 和FALSE 的逻辑向量,分别用于大于或不大于 0 的观察值。这具有被视为1s 和0s 的向量的效果(再次分别)。我想您遗漏了您指定 family = binomial 或类似名称的位以说明数据的 0/1 性质?
| 在glm()(和其他基本 R 函数)接受的公式中没有任何特殊含义。它与?'|' 具有相同的含义,它是一个 OR 运算符。因此在x1 | x2 中,我们可能会认为这是or(x1, x2),它具有标准函数调用的形式。如果x1 或 x2 是TRUE,则此处的结果是TRUE,根据需要将x1 和x2 强制为逻辑。如果x1 和x2 都是数字,那么x1 | x2 将是FALSE 的唯一方法是两者都完全等于0。就这一点而言,这只是R的公式和标准非标准评估的一个特点;公式可以包含函数调用,例如log(x)、sqrt(y) 等,在拟合函数收集拟合所需的数据时进行评估。
这里有一个例子可以解释| 在公式中的作用:
> set.seed(1)
> df <- data.frame(Y = rnorm(5), A = rnorm(5), B = rep(FALSE, 5),
+ C = c(rep(TRUE, 4), FALSE))
> df
Y A B C
1 -0.6264538 -0.8204684 FALSE TRUE
2 0.1836433 0.4874291 FALSE TRUE
3 -0.8356286 0.7383247 FALSE TRUE
4 1.5952808 0.5757814 FALSE TRUE
5 0.3295078 -0.3053884 FALSE FALSE
> model.frame(Y ~ A + (B | C), data = df)
Y A B | C
1 -0.6264538 -0.8204684 TRUE
2 0.1836433 0.4874291 TRUE
3 -0.8356286 0.7383247 TRUE
4 1.5952808 0.5757814 TRUE
5 0.3295078 -0.3053884 FALSE
这里的第三列是由对'|'(A, B)的调用形成的,结果是
> with(df, B | C)
[1] TRUE TRUE TRUE TRUE FALSE
请注意,您必须将 | 子句括在括号中,否则它会吞噬 ~ 右侧的其他术语:
> model.frame(Y ~ A + B | C, data = df)
Y A + B | C
1 -0.6264538 TRUE
2 0.1836433 TRUE
3 -0.8356286 TRUE
4 1.5952808 TRUE
5 0.3295078 TRUE
## Note there is no `A` and all are `TRUE` now.
最后一个元素现在是TRUE 的原因,请注意A (-0.3053884) 的最后一个元素不完全等于0,因此它的计算结果为TRUE,因此我们有@987654361 @,结果为TRUE。
|确实在其他包中有特殊含义,例如在 lme4 包中,它用于嵌套随机效果。