Crear e interpretar variables ficticias en R

Jesse John 21 junio 2023
  1. Instale el paquete fastDummies en R
  2. Utilice la función dummy_cols() para crear columnas ficticias en R
  3. Interpretar variables ficticias
Crear e interpretar variables ficticias en R

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.

  1. Debido a que la variable categórica tenía 3 categorías, vemos 3 columnas nuevas.
  2. 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.

  1. El argumento remove_first_dummy = TRUE eliminó la columna correspondiente al primer nivel del factor.

  2. 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.

  1. Primero, renivelar la columna de factores utilizando la función renivelar(). Haga que el valor más frecuente sea el primer nivel.
  2. 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.

Autor: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

Artículo relacionado - R Variable