符号|
的含义取决于上下文:
通用情况
一般来说,|
表示OR(或者)。通用建模函数会将任何|
看作逻辑运算符并执行它。这相当于使用另一个运算符,例如^
,比如:
lm(y~ x + x^2)
首先进行运算,然后使用这个新变量构建模型矩阵并进行拟合。
在您的代码中,|
也表示OR。请记住,在使用任何逻辑运算符时,R也会将数字值解释为逻辑值。0被视为FALSE,其他所有值被视为TRUE。
因此,您对lm
的调用构建了一个以x OR z
为基础的y模型。这没有任何意义。鉴于x
的值,这只是y〜TRUE
。这也是您的模型不适合的原因。您的模型矩阵有两列1,一列截距和一列x|z
中唯一的值为TRUE
。因此,x|z
的系数甚至无法计算,如输出所示:
> lm(y ~ x|z)
Call:
lm(formula = y ~ x | z)
Coefficients:
(Intercept) x | zTRUE
-0.01925 NA
混合模型中的公式
在混合模型(例如 lme4
包)中,竖线符号 |
用于表示随机效应。类似于 + 1|X
的术语表示:“为 X 中的每个类别拟合一个随机截距”。您可以将 |
翻译为“给定”。因此,您可以将该术语视为“在给定 X 的情况下拟合截距”。如果您记住这一点,则在指定相关结构的协方差结构的规范(例如,在 nlme
或 mgcv
中)中使用 |
将更加有意义。
但是,您仍然需要小心,因为精确解释 |
的方式在很大程度上取决于您使用的软件包。因此,真正了解其在您使用的建模函数的上下文中具体含义的唯一方法是查看该软件包的手册。
其他用途
还有一些其他函数和软件包在公式界面中使用 |
符号。在这里,它基本上 boils down 指示某种组。其中一个例子是在 lattice 图形系统中使用 |
进行细分,如以下代码所示:
library(lattice)
densityplot(~Sepal.Width|Species,
data = iris,
main="Density Plot by Species",
xlab="Sepal width")
|
是一个逐元素评估的逻辑OR
。我相信这里有大量资源可以帮助解释它。 - Abdoulfe
、AER
(ivreg
) 和lme4
。 - lmo*
,如果在公式中使用,则具有特殊含义。这也是我对|
的期望。 - Alex