Crear e interpretar variables ficticias en R
-
Instale el paquete
fastDummies
en R -
Utilice la función
dummy_cols()
para crear columnas ficticias en R - Interpretar variables ficticias
Este artículo enseñará cómo crear variables ficticias usando la función dummy_cols()
del paquete fastDummies
en R. Las palabras variable ficticia y columna ficticia se usarán indistintamente.
Instale el paquete fastDummies
en R
Necesitamos instalar el paquete fastDummies
y cargarlo.
Código de ejemplo:
# Install the fastDummies package.
install.packages("fastDummies")
# Load the fastDummies package.
library(fastDummies)
Ahora crearemos un pequeño marco de datos con una variable categórica.
Código de ejemplo:
# Vectors.
cv = c("Bd", "Ba", "F", NA, "F", "F", "Ba")
nv = seq(1:7)
# Data Frame
orig_datf = data.frame(Num_V = nv,Cat_V=as.factor(cv))
# View the data frame.
orig_datf
str(orig_datf)
Producción :
> str(orig_datf)
'data.frame': 7 obs. of 2 variables:
$ Num_V: int 1 2 3 4 5 6 7
$ Cat_V: Factor w/ 3 levels "Ba","Bd","F": 2 1 3 NA 3 3 1
Como se muestra, nuestro marco de datos tiene una variable categórica con niveles de 3 factores.
R asigna los niveles de los factores según el orden alfabético. Este detalle es importante cuando creamos variables ficticias.
Utilice la función dummy_cols()
para crear columnas ficticias en R
Si no especificamos las columnas a partir de las cuales crear variables ficticias, la función crea columnas ficticias a partir de todas las columnas de tipo factor o carácter.
Código de ejemplo:
new_datf_default_all = dummy_cols(orig_datf)
new_datf_default_all
names(new_datf_default_all)
Producción :
> names(new_datf_default_all)
[1] "Num_V" "Cat_V" "Cat_V_Ba" "Cat_V_Bd" "Cat_V_F" "Cat_V_NA"
Observe lo siguiente en la lista de columnas.
- Debido a que la variable categórica tenía 3 categorías, vemos 3 columnas nuevas.
- Debido a que nuestra columna categórica tenía valores faltantes (NA), también tenemos una columna que indica NA con el valor 1. Todas las demás columnas ficticias tienen NA, mientras que la columna original tenía NA.
Crear variables ficticias a partir de columnas seleccionadas en R
Para crear variables ficticias solo a partir de columnas seleccionadas, podemos usar el argumento select_columns
. Podemos pasar un solo nombre de columna como una cadena y múltiples columnas en un vector.
Código de ejemplo:
# Pass a single column.
new_datf_select_cols = dummy_cols(orig_datf, select_columns = "Cat_V")
# Pass multiple columns using a vector.
new_datf_select_cols = dummy_cols(orig_datf, select_columns = c("Cat_V"))
Eliminar una columna para evitar la multicolinealidad en R
Cuando creamos variables ficticias utilizando todos los niveles de una columna de factores, las nuevas columnas son linealmente dependientes. En otras palabras, para cada fila, dados los valores de todas las demás columnas, podemos predecir el valor de la última columna.
Esto afecta los resultados del análisis estadístico (como la regresión lineal). Por lo tanto, debemos eliminar una de las columnas ficticias para cada columna original a partir de la cual estamos creando variables ficticias.
La función dummy_cols()
nos da dos opciones. Podemos configurar remove_first_dummy = TRUE
, o remove_most_frequent_dummy = TRUE
.
El siguiente código examina ambas opciones.
Código de ejemplo:
# Remove first.
new_datf_remove_first = dummy_cols(orig_datf, remove_first_dummy = TRUE)
# After removing first.
names(new_datf_remove_first)
# Remove most frequent.
new_datf_remove_most_frequent = dummy_cols(orig_datf, remove_most_frequent_dummy = TRUE)
# After removing most frequent
names(new_datf_remove_most_frequent)
Producción :
> # After removing first.
> names(new_datf_remove_first)
[1] "Num_V" "Cat_V" "Cat_V_Bd" "Cat_V_F" "Cat_V_NA"
> # After removing most frequent
> names(new_datf_remove_most_frequent)
[1] "Num_V" "Cat_V" "Cat_V_Ba" "Cat_V_Bd"
Observe lo siguiente en la salida de los dos comandos.
-
El argumento
remove_first_dummy = TRUE
eliminó la columna correspondiente al primer nivel del factor. -
El argumento
remove_most_frequent_dummy = TRUE
eliminó la columna correspondiente al nivel que aparecía con mayor frecuencia en la columna original.Sin embargo, también tuvo el efecto de dejar caer la columna que mostraba dónde estaban las AN. Incluso configurar
ignore_na = FALSE
no afectó la salida.
Podemos usar la siguiente solución alternativa si queremos mantener la columna NA y descartar el factor más frecuente.
- Primero,
renivelar
la columna de factores utilizando la funciónrenivelar()
. Haga que el valor más frecuente sea el primer nivel. - Luego usa
remove_first_dummy = TRUE
.
Código de ejemplo:
releveled_datf = orig_datf
# Relevel the desired column manually.
releveled_datf$Cat_V = relevel(releveled_datf$Cat_V, ref = "F")
# View the new levels.
levels(releveled_datf$Cat_V)
# NOW, remove first.
releveled_datf_remove_first = dummy_cols(releveled_datf, remove_first_dummy = TRUE)
# After removing first.
names(releveled_datf_remove_first)
Producción :
> levels(releveled_datf$Cat_V)
[1] "F" "Ba" "Bd"
> # After removing first.
> names(releveled_datf_remove_first)
[1] "Num_V" "Cat_V" "Cat_V_Ba" "Cat_V_Bd" "Cat_V_NA"
Interpretar variables ficticias
En la configuración de regresión lineal, se dice que el coeficiente de intersección incluye el efecto del nivel base (o el nivel que se eliminó) de la columna original. Recuerde que eliminamos una columna cuando creamos las columnas ficticias.
Se interpreta que el factor eliminado tiene el valor 0 para todas las columnas ficticias creadas a partir de la misma columna original. Por lo tanto, su efecto está incluido en el intercepto.
El coeficiente de cada columna ficticia corresponde a la diferencia causada por el nivel de ese factor en comparación con el nivel base. Este puede ser un efecto positivo o negativo en comparación con la línea de base, dependiendo del valor de este coeficiente.
Debido a esta interpretación, es útil eliminar la columna correspondiente al factor más frecuente.