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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
