R公式中的条件(|)

时间:2017-02-23 14:03:59

标签: r

我发现了这个pdf on R formulas,我无法弄清楚|是如何工作的(请参阅第二页上的表格)。此外,我在网上找不到任何解释。它不时出现在可能的公式符号的列表中但没有任何示例。

我认为它可能已经过时,因为其他方式可以实现它所做的一切。

有人知道如何在公式中使用|以及它到底取得了什么?

一些代码显示我笨拙地尝试使用|

x <- rnorm(100)
y <- rnorm(100)
z <- sample(c(TRUE, FALSE), 100, replace = TRUE )

lm(y ~ x|z)

2 个答案:

答案 0 :(得分:10)

符号|表示不同的内容,具体取决于上下文:

一般情况

通常,|表示OR。一般建模函数将任何|视为逻辑运算符并执行它。这相当于使用另一个运算符,例如^,如:

lm(y~ x + x^2)

首先执行运算符,然后使用这个新变量构造模型矩阵并进行拟合。

在您的代码中,|也表示OR。您必须记住,当您使用任何逻辑运算符时,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这样的术语意味着:“适合X中每个类别的随机拦截”。您可以将|翻译为“给定”。因此,您可以将该术语视为“适合截距,给定X”。如果您牢记这一点,那么在|nlme中的相关结构规范中使用mgcv对您来说会更有意义。

您仍需要小心,因为解释|的确切方式在很大程度上取决于您使用的包。因此,在您使用的建模功能的上下文中真正了解其含义的唯一方法是在该包的手册中检查它。

其他用途

在公式界面中还有一些其他函数和包使用|符号。在这里,它几乎归结为指出某种群体。一个例子是在格子图形系统中使用|。它用于刻面,如下面的代码所示:

library(lattice)
densityplot(~Sepal.Width|Species,
            data = iris,
            main="Density Plot by Species",
            xlab="Sepal width")

答案 1 :(得分:0)

使用它的一般方法是dependent ~ independent | grouping您可以在此处阅读更多http://talklab.psy.gla.ac.uk/KeepItMaximalR2.pdf