formula
位于 stats
包(package)。 说明
通用函数formula
及其特定方法提供了一种提取已包含在其他对象中的公式的方法。
as.formula
几乎相同,此外,当 object
已经继承自 "formula"
时,还保留属性。
用法
formula(x, ...)
DF2formula(x, env = parent.frame())
as.formula(object, env = parent.frame())
## S3 method for class 'formula'
print(x, showEnv = !identical(e, .GlobalEnv), ...)
参数
x , object |
R对象,对于 |
... |
传入或传出其他方法的进一步参数。 |
env |
与结果关联的环境(如果还没有公式)。 |
showEnv |
逻辑上指示是否也应该打印环境。 |
细节
例如,lm
和 glm
函数拟合的模型以紧凑的符号形式指定。 ~
运算符是形成此类模型的基础。 y ~ model
形式的表达式被解释为响应 y
由 model
符号指定的线性预测器建模的规范。这样的模型由一系列由 +
运算符分隔的项组成。这些术语本身由由 :
运算符分隔的变量和因子名称组成。这样的术语被解释为该术语中出现的所有变量和因子的相互作用。
除了 +
和 :
之外,许多其他运算符在模型公式中也很有用。
-
*
运算符表示因子交叉: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
相当于a + b %in% a
。 -
-
运算符删除指定的项,因此(a+b+c)^2 - a:b
与a + b + c + b:c + a:c
相同。它还可以用于删除截距项:拟合线性模型时y ~ x - 1
指定一条通过原点的线。没有截距的模型也可以指定为y ~ x + 0
或y ~ 0 + x
。
虽然公式通常只涉及变量和因子名称,但它们也可以涉及算术表达式。公式log(y) ~ a + log(x)
是相当合法的。当此类算术表达式涉及在模型公式中也以符号方式使用的运算符时,算术运算符和符号运算符的使用之间可能会出现混淆。
为了避免这种混乱,函数 I()
可用于将模型公式中以算术意义使用运算符的部分括起来。例如,在公式 y ~ a + I(b+c)
中,术语 b+c
将被解释为 b
和 c
之和。
变量名称可以在公式中用反引号 `like this`
引用,但不能保证所有使用公式的代码都接受此类非语法名称。
大多数模型拟合函数接受右侧的公式,包括函数 offset
来指示固定系数为 1 的项。某些函数接受其他‘specials’,例如strata
或cluster
(请参阅terms.formula
的specials
参数)。
公式中的 .
有两种特殊解释。通常的一个是在模型拟合函数的 data
参数的上下文中,意味着“公式中没有的所有列”:请参阅 terms.formula
。仅在 update.formula
的上下文中,它意味着“公式这部分之前的内容”。
当在拟合模型对象上调用 formula
时,将使用特定方法(例如类 "nls"
的方法)或默认方法。默认情况下首先查找对象的 "formula"
组件(并对其求值),然后查找 "terms"
组件,然后查找调用的 formula
参数(并求值其值),最后查找 "formula"
属性。
有一个formula
数据帧的方法。当有"terms"
具有公式的属性,例如,对于model.frame()
,返回该公式。如果您想要上一个(R 3.5.x) 行为,使用辅助DF2formula()
其中不考虑"terms"
属性。否则,如果只有一列,则会形成右侧为空且左侧为空的列。对于更多列,第一列是公式的 LHS,其余列由+
形成 RHS。
值
上述所有函数都会生成 "formula"
类的对象,其中包含符号模型公式。
环境
公式对象具有关联的环境,model.frame
使用该环境(而不是父环境)来计算在提供的 data
参数中找不到的变量。
使用 ~
运算符创建的公式使用创建它们的环境。使用 as.formula
创建的公式将使用 env
参数作为其环境。
注意
在R版本高达 3.6.0,character
x
长度超过一的被解析为单独的行R代码和第一个完整表达式在可能的情况下被计算为公式。这会默默地截断此类字符向量,效率低下,并且在某种程度上不一致,因为这种行为没有记录。因此,这种用法已被弃用。如果你必须通过性格来工作x
,请使用字符串,即长度为一的字符向量。
例如, eval(call("~", quote(foo + bar)))
比 formula(c("~", "foo + bar"))
效率高一个数量级。
此外,现在已弃用需要 eval()
来返回公式的字符 “expressions”。
例子
class(fo <- y ~ x1*x2) # "formula"
fo
typeof(fo) # R internal : "language"
terms(fo)
environment(fo)
environment(as.formula("y ~ x"))
environment(as.formula("y ~ x", env = new.env()))
## Create a formula for a model with a large number of variables:
xnam <- paste0("x", 1:25)
(fmla <- as.formula(paste("y ~ ", paste(xnam, collapse= "+"))))
## Equivalent with reformulate():
fmla2 <- reformulate(xnam, response = "y")
stopifnot(identical(fmla, fmla2))
参考
Chambers, J. M. and Hastie, T. J. (1992) Statistical models. Chapter 2 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.
也可以看看
对于公式操作: terms
和 all.vars
。对于典型用途: lm
、 glm
和 coplot
。对于公式构造:reformulate
。
相关用法
- R formula.nls 从 nls 对象中提取模型公式
- R factor.scope 计算在公式中添加或删除时允许的更改
- R factanal 因子分析
- R friedman.test 弗里德曼秩和检验
- R fitted 提取模型拟合值
- R ftable 扁平列联表
- R ftable.formula 平面列联表的公式表示法
- R filter 时间序列的线性过滤
- R family 模型的族对象
- R fivenum 图基五数摘要
- R fisher.test 计数数据的 Fisher 精确检验
- R fft 快速离散傅立叶变换 (FFT)
- R fligner.test 方差齐性的 Fligner-Killeen 检验
- R stlmethods STL 对象的方法
- R medpolish 矩阵的中值波兰(稳健双向分解)
- R naprint 调整缺失值
- R summary.nls 总结非线性最小二乘模型拟合
- R summary.manova 多元方差分析的汇总方法
- R nls.control 控制 nls 中的迭代
- R aggregate 计算数据子集的汇总统计
- R deriv 简单表达式的符号和算法导数
- R kruskal.test Kruskal-Wallis 秩和检验
- R quade.test 四方测试
- R decompose 移动平均线的经典季节性分解
- R plot.stepfun 绘制阶跃函数
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Model Formulae。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。