Можно ли использовать tidyselect для указания столбцов в формуле?
Например, что-то вроде
lr_fit <- parsnip::logistic_reg() %>%
fit(y ~ starts_with("a"), data=df)
Связано: https://stats.stackexchange.com/questions/582174/how-select-multiple-columns-in-lm-in-r
Другое решение, которое я придумал, — это выбрать определенные столбцы в фрейме данных, а затем использовать y ~ . для всех остальных столбцов.
Верно lr_fit <- parsnip::logistic_reg() %>% fit(y ~ ., data=df |> select(y, starts_with("a))) должно работать. [Спасибо @josh-allen за подвох.]





Механизмом по умолчанию для logistic_reg() является glm(), который имеет интерфейс формулы, поэтому пастернак просто передает данные и формулу. glm() не предназначено для работы с tidyselect, так что на этом это путешествие и закончится.
У вас уже была правильная идея с использованием ~ . и выбором переменных до того, как данные будут переданы в glm(). Вы можете расширить эту идею, используя рецепт для предварительной обработки, который дает вам доступ к гораздо большему, чем просто select() с синтаксисом tidyselect.
Одним из вариантов может быть использование рецептов из экосистемы tidymodels для изменения ролей.
Переменные, не необходимые в качестве предикторов, могут опционально сохраняться как информационные (ID) переменные для последующего использования (или удаляться).
library(tidymodels)
df <- tribble(
~aa, ~ab, ~ba, ~bb, ~y,
1, 1, 1, 1, 1,
2, 2, 2, 2, 2
)
lr_mod <- logistic_reg()
lr_rec <- recipe(y ~ ., data = df) |>
update_role(starts_with("b"), new_role = "ID")
lr_rec
#>
#> ── Recipe ──────────────────────────────────────────────────────────────────────
#>
#> ── Inputs
#> Number of variables by role
#> outcome: 1
#> predictor: 2
#> ID: 2
# Then contimue with something like:
# lr_wflow <- workflow() |>
# add_recipe(lr_rec) |>
# add_model(lr_mod)
#
# lr_fit <- lr_wflow |> fit(df)
Created on 2024-05-13 with reprex v2.1.0
Хорошая идея. Раньше я использовал рецепты, и роли ускользали из моей головы.
Также добавьте все, что находится слева от
~.