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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。