当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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