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