Joana!
- Multicolinearidade em categóricas é um desafio msm!
categórica vs categórica: Uma vez que se transforma as categóricas em dummies, daria para as tratar como contínuas e avaliar se elas são correlacionadas da mesma maneira que faríamos com as contínuas. No código abaixo eu fiz a dummificação e depois tirei as colineares.
library(tidyverse)
library(tidymodels)
dados <- tibble(
cat1 = c("A", "A", "B", "B"),
cat2 = c("C", "C", "D", "D"),
y = as.numeric(factor(cat1)) + rnorm(n = 4)
)
receita <- recipe(y ~ cat1 + cat2, dados) %>%
step_dummy(all_predictors()) %>%
step_lincomb(all_predictors())
dados_prep <- as.data.frame(juice(prep(receita)))
dados_prep
Mas não há maneira fácil de avaliar isso no recipes. Existem medidas de associação entre variáveis categóricas como o Chi quadrado (de Pearson) e o Cramer’s V (que é quase Pearson =P).
Peguei um exemplo na internet que mostra um código enxuto pra visualizar isso:
library(DescTools)
library(corrplot)
df <- data.frame(x1 = sample(letters[1:5], 20, replace = TRUE),
x2 = sample(letters[1:5], 20, replace = TRUE),
x3 = sample(letters[1:5], 20, replace = TRUE))
corrplot(PairApply(df, CramerV))
categóricas vs numéricas: acho que esse caso é mais difícil de ocorrer. Se ocorrer é porque a variável numérica era pra ser categórica na vdd, e daí o categ vs categ se aplicaria aqui novamente.
Mas ó, a multicolinearidade atrapalha duas coisas: 1) interpretação do modelo; e 2) as contas pra ajustar modelos lineares. Se vc não tiver interesse em nenhum desses dois itens, não se preocupe muito com isso! =)
- O step_other comete todos esses problemas que você citou. No caso de variáveis que tem uma ordem natural como escolaridade o tratamento deveria ser feito respeitando essa ordem!
receita(y ~ ., dados) %>%
step_mutate(
escolaridade = case_when(
escolaridade %in% c("pre escola", "fundamental") ~ "pre escola ou fundamental",
escolaridade %in% c("medio", "superior") ~"medio ou superior",
escolaridade %in% c("mestrado", "doutorado", "pos graduacao") ~ "pos graduacao"
)
)
Também tem um tal de step_ordinalscore()
, mas nunca usei. Aliás, também tem a estratégia de transformar as variáveis ordinais em numéricas, mas daí é outra conversa haha (ver o pacote embed para mais steps_*()
sobre isso!).
-
O step_zv() e o step_nzv() funcionam para categóricas tbm!
-
Acho que o principal é o step_dummy() pq alguns modelos (xgboost e glmnet por exemplo) precisam da matriz toda numérica. Então eles vao reclamar se vc não fizer essa transformação antes.
Outros problemas pra se ver: Tomar cuidado com categorias novas (step_novel), categorias raras (step_other e relacionadas) e NAs (step_unknown, etc). De resto, eu acho que a vida é muito mais fácil qdo se tem apenas variáveis explicativas categóricas, em geral.
A resposta pode não estar completa, existem muitos problemas específicos que certamente deixei passar na discussão, vamos discutindo! Modelagem é um problema em aberto ainda rsrs.