пакет recipes не может создать условие взаимодействия в step_interact

#r #tidyverse #tidymodels #r-recipes

#r #tidyverse #tidymodels #r-recipes

Вопрос:

Я использую набор данных медицинского страхования, чтобы отточить свои навыки моделирования, который выглядит следующим образом:

 > insur_dt
      age    sex    bmi children smoker    region   charges
   1:  19 female 27.900        0    yes southwest 16884.924
   2:  18   male 33.770        1     no southeast  1725.552
   3:  28   male 33.000        3     no southeast  4449.462
   4:  33   male 22.705        0     no northwest 21984.471
   5:  32   male 28.880        0     no northwest  3866.855
  ---                                                      
1334:  50   male 30.970        3     no northwest 10600.548
1335:  18 female 31.920        0     no northeast  2205.981
1336:  18 female 36.850        0     no southeast  1629.833
1337:  21 female 25.800        0     no southwest  2007.945
1338:  61 female 29.070        0    yes northwest 29141.360
 

Я использую recipes как часть tidymodels мета-пакета для подготовки моих данных для использования в модели, и я определил это bmi , age , и smoker сформировал термин взаимодействия.

 insur_split <- initial_split(insur_dt)

insur_train <- training(insur_split)
insur_test <- testing(insur_split)

# we are going to do data processing and feature engineering with recipes

# below, we are going to predict charges using everything else(".")
insur_rec <- recipe(charges ~ age   bmi   smoker, data = insur_train) %>%
    step_dummy(all_nominal()) %>%
    step_zv(all_numeric()) %>%
    step_normalize(all_numeric()) %>%
    step_interact(~ bmi:smoker:age) %>% 
    prep()
 

Согласно руководству / документации по tidymodels, я должен указать взаимодействие как шаг в recipe as step_interact . Однако при попытке сделать это я получаю сообщение об ошибке:

 > insur_rec <- recipe(charges ~ age   bmi   smoker, data = insur_train) %>%
      step_dummy(all_nominal()) %>%
      step_zv(all_numeric()) %>%
      step_normalize(all_numeric()) %>%
      step_interact(~ bmi:smoker:age) %>% 
      prep()
Interaction specification failed for: ~bmi:smoker:age. No interactions will be created.partial match of 'object' to 'objects'
 

Я новичок в моделировании и не совсем уверен, почему я получаю эту ошибку. Я просто пытаюсь указать, что charges это объясняется всеми другими предикторами, и что smoker (фактор да / нет), age (числовой) и bmi (двойной) все взаимодействуют друг с другом, чтобы сообщить результат. Что я делаю не так?

Ответ №1:

Из документации:

step_interact может создавать взаимодействия между переменными. Он в первую очередь предназначен для числовых данных; категориальные переменные, вероятно, следует преобразовать в фиктивные переменные, используя step_dummy() перед использованием для взаимодействий.

step_dummy(all_nominal()) превратил переменную smoker в smoker_yes . Ниже вы увидите, что я просто изменил имя smoker в термине взаимодействия на smoker_yes .

 insur_rec <- recipe(charges ~ bmi   age   smoker, data = insur_train) %>%
    step_dummy(all_nominal()) %>%
    step_normalize(all_numeric(), -all_outcomes()) %>%
    step_interact(terms = ~ bmi:age:smoker_yes) %>% 
    prep(verbose = TRUE, log_changes = TRUE)