我已经看到如何在公式中使用 ~ 运算符。例如y~x
意味着:y 分布为 x。
但是我真的很困惑~0+a
这段代码的含义:
require(limma)
a = factor(1:3)
model.matrix(~0+a)
为什么只是model.matrix(a)
不起作用?为什么结果与model.matrix(~a)
不同model.matrix(~0+a)
?最后,这里的 ~ 运算符是什么意思?
我已经看到如何在公式中使用 ~ 运算符。例如y~x
意味着:y 分布为 x。
但是我真的很困惑~0+a
这段代码的含义:
require(limma)
a = factor(1:3)
model.matrix(~0+a)
为什么只是model.matrix(a)
不起作用?为什么结果与model.matrix(~a)
不同model.matrix(~0+a)
?最后,这里的 ~ 运算符是什么意思?
~
创建一个公式 - 它将公式的右侧和左侧分开
从?`~`
波浪号用于分隔模型公式中的左侧和右侧
引用公式的帮助
例如,通过 lm 和 glm 函数拟合的模型以紧凑的符号形式指定。~ 运算符是形成此类模型的基础。y ~ model 形式的表达式被解释为响应 y 由模型符号指定的线性预测器建模的规范。这样的模型由一系列由 + 运算符分隔的术语组成。术语本身由变量和因子名称组成,由 : 运算符分隔。这样的术语被解释为该术语中出现的所有变量和因素的相互作用。
除了 + 和 : 之外,许多其他运算符在模型公式中也很有用。* 运算符表示因子交叉:a*b 解释为 a+b+a:b。^ 运算符表示交叉到指定的度数。例如 (a+b+c)^2 与 (a+b+c)*(a+b+c) 相同,后者又扩展为包含 a、b 和 c 的主效应及其第二个效应的公式-订单交互。%in% 运算符表示其左侧的术语嵌套在右侧的术语中。例如 a + b %in% a 扩展为公式 a + a:b。- 运算符删除指定的项,因此 (a+b+c)^2 - a:b 与 a + b + c + b:c + a:c 相同。它也可以用来去除截距项:当拟合线性模型时,y ~ x - 1 指定一条通过原点的线。没有截距的模型也可以指定为 y ~ x + 0 或 y ~ 0 + x。
~a+0
a
一个因素,model.matrix(~a)
将返回一个拦截列a1
(您需要n-1
指标来完全指定n
类)每个功能的帮助文件都写得很好,详细且易于查找!
model.matrix(a)
不起作用model.matrix(a)
不起作用,因为a
它是一个factor
变量,而不是公式或术语对象
从帮助model.matrix
object 适当类的对象。对于默认方法,模型公式或术语对象。
R
正在寻找特定类别的对象,通过传递一个公式~a
,您正在传递一个属于 class 的对象formula
。model.matrix(terms(~a))
也可以工作,(传递与公式对应的术语对象~a
@BenBolker 在他的评论中很有帮助地指出,这是 Wilkinson-Rogers 符号的修改版本。
R 简介中有一个很好的描述。
看了几本手册后,我对 o 的含义感到困惑,model.matrix(~0+x)
直到最近我才发现了这个优秀的书籍章节。
在数学0+a
上等于a
和写一个词like0+a
是很奇怪的。然而,我们在这里处理的是线性模型:一个简单的高中方程,例如y=ax+b
揭示预测变量 (x) 和观察值 (y) 之间的关系。
因此,我们可以认为~0+x
或同样~x+0
是以下形式的方程:y=ax+b
。通过添加0
我们强制b
为零,这意味着我们正在寻找一条通过原点的线(无截距)。如果我们指定一个类似~x+1
或只是的模型~x
,则拟合方程可能包含一个非零项b
。同样,我们可以b
通过一个公式进行限制,~x-1
或者~-1+x
两者都意味着:没有截距(就像我们通过负索引排除 R 中的行或列一样)。然而像~x-2
or这样的东西~x+3
是没有意义的。
Thanking @mnel for the useful comment, finally what's the reason to use ~
and not =
? In standard mathematical terminology / symbology y~x
denotes that y is equivalent to x, it is somewhat weaker that y=x
. When you are fitting a linear model, you aren't really saying y=x
, but more that you can model y as a linear function of x (y = ax+b
for example)
为了回答您的部分问题,波浪号用于分隔模型公式中的左侧和右侧。请参阅?"~"
以获取更多帮助。