當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


R hardhat model_frame 構建模型框架

model_frame()stats::model.frame() 的更嚴格版本。有許多差異,主要是行永遠不會被刪除,並且返回值是一個列表,其中框架和術語分為兩個不同的對象。

用法

model_frame(formula, data)

參數

formula

表示模型框架項的公式或項對象。

data

包含 formula 項的 DataFrame 或矩陣。

包含兩個元素的命名列表:

  • "data":包含模型框架的小標題。

  • "terms":包含模型框架術語的術語對象。

細節

下麵解釋了與 stats::model.frame() 相比一些參數差異的基本原理:

  • subset :不允許,因為model_frame() 運行之前和之後的行數應始終相同。

  • na.action :不允許並強製為"na.pass",因為model_frame() 運行之前和之後的行數應始終相同。

  • drop.unused.levels :不允許,因為 datamodel_frame() 的結果似乎不一致,永遠具有相同的因子列但具有不同的級別,除非通過 original_levels 指定。如果需要的話,應該通過配方步驟顯式地完成。

  • xlev:不允許,因為此檢查應該提前完成。如果需要,請使用 scream() 根據訓練集檢查 data 的完整性。

  • ...:未公開,因為偏移量是單獨處理的,並且不再需要在此處傳遞權重,因為行永遠不會被刪除(因此權重不必與設計矩陣的其餘部分一起作為子集)。如果需要其他非預測列,請使用配方的 "roles" 函數。

始終將 model_frame() 的結果與 model_matrix() 而不是 stats::model.matrix() 一起使用非常重要,因為 model_frame() 結果中的 tibble 沒有附加術語對象。如果直接調用model.matrix(<terms>, <tibble>),則會自動調用model.frame(),這可能會給出錯誤的結果。

例子

# ---------------------------------------------------------------------------
# Example usage

framed <- model_frame(Species ~ Sepal.Width, iris)

framed$data
#> # A tibble: 150 × 2
#>    Species Sepal.Width
#>    <fct>         <dbl>
#>  1 setosa          3.5
#>  2 setosa          3  
#>  3 setosa          3.2
#>  4 setosa          3.1
#>  5 setosa          3.6
#>  6 setosa          3.9
#>  7 setosa          3.4
#>  8 setosa          3.4
#>  9 setosa          2.9
#> 10 setosa          3.1
#> # ℹ 140 more rows

framed$terms
#> Species ~ Sepal.Width
#> attr(,"variables")
#> list(Species, Sepal.Width)
#> attr(,"factors")
#>             Sepal.Width
#> Species               0
#> Sepal.Width           1
#> attr(,"term.labels")
#> [1] "Sepal.Width"
#> attr(,"order")
#> [1] 1
#> attr(,"intercept")
#> [1] 1
#> attr(,"response")
#> [1] 1
#> attr(,".Environment")
#> <environment: 0x55c3a5f2ad30>
#> attr(,"predvars")
#> list(Species, Sepal.Width)
#> attr(,"dataClasses")
#>     Species Sepal.Width 
#>    "factor"   "numeric" 

# ---------------------------------------------------------------------------
# Missing values never result in dropped rows

iris2 <- iris
iris2$Sepal.Width[1] <- NA

framed2 <- model_frame(Species ~ Sepal.Width, iris2)

head(framed2$data)
#> # A tibble: 6 × 2
#>   Species Sepal.Width
#>   <fct>         <dbl>
#> 1 setosa         NA  
#> 2 setosa          3  
#> 3 setosa          3.2
#> 4 setosa          3.1
#> 5 setosa          3.6
#> 6 setosa          3.9

nrow(framed2$data) == nrow(iris2)
#> [1] TRUE
源代碼:R/model-frame.R

相關用法


注:本文由純淨天空篩選整理自Davis Vaughan等大神的英文原創作品 Construct a model frame。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。