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


R recipes step_interact 创建交互变量


step_interact() 创建配方步骤的规范,该步骤将创建新列,这些新列是两个或多个变量之间的交互项。

用法

step_interact(
  recipe,
  terms,
  role = "predictor",
  trained = FALSE,
  objects = NULL,
  sep = "_x_",
  keep_original_cols = TRUE,
  skip = FALSE,
  id = rand_id("interact")
)

参数

recipe

一个菜谱对象。该步骤将添加到此配方的操作序列中。

terms

包含交互项的传统 R 公式。这可以包括 . 和选择器。有关更多详细信息,请参阅selections(),并在创建虚拟变量时考虑使用tidyselect::starts_with()

role

对于此步骤创建的模型项,应为其分配什么分析角色?默认情况下,此步骤根据原始变量创建的新列将用作模型中的预测变量。

trained

指示预处理数量是否已估计的逻辑。

objects

每个单独交互的 terms 对象列表。

sep

用于说明交互中变量的字符值(例如 var1_x_var2 而不是更传统的 var1:var2 )。

keep_original_cols

将原始变量保留在输出中的逻辑。默认为 FALSE

skip

一个合乎逻辑的。当bake() 烘焙食谱时是否应该跳过此步骤?虽然所有操作都是在 prep() 运行时烘焙的,但某些操作可能无法对新数据进行(例如处理结果变量)。使用skip = TRUE时应小心,因为它可能会影响后续操作的计算。

id

该步骤特有的字符串,用于标识它。

recipe 的更新版本,将新步骤添加到任何现有操作的序列中。

细节

step_interact 可以创建变量之间的交互。它主要用于数字数据;在用于交互之前,应该使用 step_dummy() 将分类变量转换为虚拟变量。

与其他步骤函数不同,terms 参数应该是传统的 R 模型公式,但不应包含内联函数(例如 log )。例如,对于预测变量 ABC ,可以使用 ~A:B:C 等公式在变量之间进行三向交互。如果公式包含交互项以外的项(例如 (A+B+C)^3 ),则设计矩阵仅保留交互项。

变量之间的分隔符默认为“_x_”,以便前面显示的三向交互将生成名为 A_x_B_x_C 的列。这可以使用 sep 参数进行更改。

当创建虚拟变量并在交互中使用虚拟变量时,选择器可以帮助简洁地指定交互。例如,假设使用 step_dummy() 将因子列 X 转换为虚拟变量 x_2x_3 、...、 x_6 。如果您想要与数字列 z 进行交互,您可以创建一组特定的交互效果(例如 x_2:z + x_3:z 等),或者可以使用 starts_with("x_"):z 。当 prep() 计算此步骤时,starts_with("x_") 解析为 (x_2 + x_3 + x_4 + x_5 + x_6),以便公式现在为 (x_2 + x_3 + x_4 + x_5 + x_6):z 并且创建所有双向交互。

整理

当您执行 tidy() 这一步时,将返回带有 terms 列(交互效果)的 tibble。

箱重

底层操作不允许使用案例权重。

例子

data(penguins, package = "modeldata")
penguins <- penguins %>% na.omit()

rec <- recipe(flipper_length_mm ~ ., data = penguins)

int_mod_1 <- rec %>%
  step_interact(terms = ~ bill_depth_mm:bill_length_mm)

# specify all dummy variables succinctly with `starts_with()`
int_mod_2 <- rec %>%
  step_dummy(sex, species, island) %>%
  step_interact(terms = ~ body_mass_g:starts_with("species"))

int_mod_1 <- prep(int_mod_1, training = penguins)
int_mod_2 <- prep(int_mod_2, training = penguins)

dat_1 <- bake(int_mod_1, penguins)
dat_2 <- bake(int_mod_2, penguins)

names(dat_1)
#> [1] "species"                        "island"                        
#> [3] "bill_length_mm"                 "bill_depth_mm"                 
#> [5] "body_mass_g"                    "sex"                           
#> [7] "flipper_length_mm"              "bill_depth_mm_x_bill_length_mm"
names(dat_2)
#>  [1] "bill_length_mm"                  "bill_depth_mm"                  
#>  [3] "body_mass_g"                     "flipper_length_mm"              
#>  [5] "sex_male"                        "species_Chinstrap"              
#>  [7] "species_Gentoo"                  "island_Dream"                   
#>  [9] "island_Torgersen"                "body_mass_g_x_species_Chinstrap"
#> [11] "body_mass_g_x_species_Gentoo"   

tidy(int_mod_1, number = 1)
#> # A tibble: 1 × 2
#>   terms                        id            
#>   <chr>                        <chr>         
#> 1 bill_depth_mm:bill_length_mm interact_IUB7W
tidy(int_mod_2, number = 2)
#> # A tibble: 2 × 2
#>   terms                         id            
#>   <chr>                         <chr>         
#> 1 body_mass_g:species_Chinstrap interact_kM5w7
#> 2 body_mass_g:species_Gentoo    interact_kM5w7
源代码:R/interact.R

相关用法


注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Create Interaction Variables。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。