R 公式中的条件 ( | )
Condition ( | ) in R formula
我找到了这个 pdf on R formulas,但我无法弄清楚 |
是如何工作的(请参阅第二页上的 table)。此外,我在网上找不到任何解释。它不时出现在可能的公式符号列表中,但没有任何示例。
我认为它可能已经过时了,因为有其他方法可以实现它所做的一切。
有谁知道如何在公式中使用 |
以及它究竟实现了什么?
一些代码显示了我使用 |
.
的笨拙尝试
x <- rnorm(100)
y <- rnorm(100)
z <- sample(c(TRUE, FALSE), 100, replace = TRUE )
lm(y ~ x|z)
它的一般使用方式是dependent ~ independent | grouping
你可以在这里阅读更多http://talklab.psy.gla.ac.uk/KeepItMaximalR2.pdf
符号|
根据上下文表示不同的含义:
一般情况
一般来说,|
表示OR。一般建模函数会将任何 |
视为逻辑运算符并执行它。这相当于使用另一个运算符,例如 ^
,如:
lm(y~ x + x^2)
先进行算子,再用这个新变量构造模型矩阵,进行拟合
在您的代码中,|
也表示或。您必须记住,当您使用任何逻辑运算符时,R 也将数值解释为逻辑值。 0 被视为 FALSE,其他任何东西都被视为 TRUE。
因此您对 lm
的调用在 x OR z
的函数中构建了 y 的模型。这没有任何意义。鉴于 x
的值,这将只是 y ~ TRUE
。这也是您的模型不适合的原因。您的模型矩阵有 2 列带 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
之类的术语表示:"fit a random intercept for every category in X"。您可以将 |
翻译成 "given"。因此,您可以将术语视为 "fit an intercept, given X"。如果您牢记这一点,在 nlme
或 mgcv
等相关结构规范中使用 |
对您来说更有意义。
您仍然需要小心,因为 |
的确切解释方式在很大程度上取决于您使用的包。因此,真正了解它在您使用的建模函数的上下文中意味着什么的唯一方法是在该包的手册中进行检查。
其他用途
还有一些其他函数和包在公式界面中使用 |
符号。同样在这里,它几乎可以归结为表示某种群体。一个例子是在点阵图形系统中使用 |
。那里是用来做切面的,如下代码所示:
library(lattice)
densityplot(~Sepal.Width|Species,
data = iris,
main="Density Plot by Species",
xlab="Sepal width")
我找到了这个 pdf on R formulas,但我无法弄清楚 |
是如何工作的(请参阅第二页上的 table)。此外,我在网上找不到任何解释。它不时出现在可能的公式符号列表中,但没有任何示例。
我认为它可能已经过时了,因为有其他方法可以实现它所做的一切。
有谁知道如何在公式中使用 |
以及它究竟实现了什么?
一些代码显示了我使用 |
.
x <- rnorm(100)
y <- rnorm(100)
z <- sample(c(TRUE, FALSE), 100, replace = TRUE )
lm(y ~ x|z)
它的一般使用方式是dependent ~ independent | grouping
你可以在这里阅读更多http://talklab.psy.gla.ac.uk/KeepItMaximalR2.pdf
符号|
根据上下文表示不同的含义:
一般情况
一般来说,|
表示OR。一般建模函数会将任何 |
视为逻辑运算符并执行它。这相当于使用另一个运算符,例如 ^
,如:
lm(y~ x + x^2)
先进行算子,再用这个新变量构造模型矩阵,进行拟合
在您的代码中,|
也表示或。您必须记住,当您使用任何逻辑运算符时,R 也将数值解释为逻辑值。 0 被视为 FALSE,其他任何东西都被视为 TRUE。
因此您对 lm
的调用在 x OR z
的函数中构建了 y 的模型。这没有任何意义。鉴于 x
的值,这将只是 y ~ TRUE
。这也是您的模型不适合的原因。您的模型矩阵有 2 列带 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
之类的术语表示:"fit a random intercept for every category in X"。您可以将 |
翻译成 "given"。因此,您可以将术语视为 "fit an intercept, given X"。如果您牢记这一点,在 nlme
或 mgcv
等相关结构规范中使用 |
对您来说更有意义。
您仍然需要小心,因为 |
的确切解释方式在很大程度上取决于您使用的包。因此,真正了解它在您使用的建模函数的上下文中意味着什么的唯一方法是在该包的手册中进行检查。
其他用途
还有一些其他函数和包在公式界面中使用 |
符号。同样在这里,它几乎可以归结为表示某种群体。一个例子是在点阵图形系统中使用 |
。那里是用来做切面的,如下代码所示:
library(lattice)
densityplot(~Sepal.Width|Species,
data = iris,
main="Density Plot by Species",
xlab="Sepal width")