Cómo normalizar datos en R

En la mayoría de los casos, cuando las personas hablan de «normalizar» las variables en un conjunto de datos, significa que les gustaría escalar los valores de manera que la variable tenga una media de 0 y una desviación estándar de 1.

La razón más común para normalizar variables es cuando está realizando algún tipo de análisis multivariado (es decir, desea comprender la relación entre varias variables predictoras y una variable de respuesta) y desea que cada variable contribuya por igual al análisis.

Cuando las variables se miden a diferentes escalas, a menudo no contribuyen por igual al análisis. Por ejemplo, si los valores de una variable oscilan entre 0 y 100.000 y los valores de otra variable oscilan entre 0 y 100, la variable con el intervalo más grande recibirá un mayor peso en el análisis.

Esto es común cuando una variable mide algo como el salario ($ 0 a $ 100,000) y otra variable mide algo como la edad (0 a 100 años).

Al normalizar las variables, podemos estar seguros de que cada variable contribuye por igual al análisis. Dos formas comunes de normalizar (o «escalar») variables incluyen:

  • Normalización mínima -máxima: (X – min (X)) / (max (X) – min (X))
  • Normalización de la puntuación Z : (X – μ) / σ

A continuación, mostraremos cómo implementar ambas técnicas en R.

Cómo normalizar (o «escalar») variables en R

Para cada uno de los siguientes ejemplos, usaremos el iris del conjunto de datos R integrado para ilustrar cómo normalizar o escalar variables en R:

#ver las primeras seis filas del cabezal del conjunto de datos
 del iris (iris)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Especies
# 1 5,1 3,5 1,4 0,2 setosa
# 2 4,9 3,0 1,4 0,2 setosa
# 3 4,7 3,2 1,3 0,2 setosa
# 4 4,6 3,1 1,5 0,2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5,4 3,9 1,7 0,4 setosa

Normalización Min-Max

La fórmula para una normalización mínima-máxima es:

(X – mínimo (X)) / (máximo (X) – mínimo (X))

Para cada valor de una variable, simplemente encontramos qué tan lejos está ese valor del valor mínimo, luego dividimos por el rango.

Para implementar esto en R, podemos definir una función simple y luego usar lapply para aplicar esa función a las columnas del conjunto de datos de iris que nos gustaría:

#define la función de normalización Min-Max 
min_max_norm <- function (x) {
    (x - mínimo (x)) / (máximo (x) - mínimo (x))
  }

#aplicar la normalización Min-Max a las primeras cuatro columnas en el conjunto de datos de
 iris iris_norm <- as.data.frame (lapply (iris [1: 4], min_max_norm))

#ver las primeras seis filas del conjunto de datos de iris normalizado
cabeza (iris_norm)

# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 0,22222222 0,6250000 0,06779661 0,04166667
# 2 0.16666667 0.4166667 0.06779661 0.04166667
# 3 0.11111111 0.5000000 0.05084746 0.04166667
# 4 0.08333333 0.4583333 0.08474576 0.04166667
# 5 0.19444444 0.6666667 0.06779661 0.04166667
# 6 0.30555556 0.7916667 0.11864407 0.12500000

Observe que ahora cada una de las columnas tiene valores que van de 0 a 1. Observe también que la quinta columna «Especies» se eliminó de este marco de datos. Podemos volver a agregarlo fácilmente usando el siguiente código:

#add back Columna de especies
iris_norm $ Especies <- iris $ Especies

#view primeras seis filas de iris_norm
 cabeza (iris_norm)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Especies
# 1 0.22222222 0.6250000 0.06779661 0.04166667 setosa
# 2 0.16666667 0.4166667 0.06779661 0.04166667 setosa
# 3 0.11111111 0.5000000 0.05084746 0.04166667 setosa
# 4 0.08333333 0.4583333 0.08474576 0.04166667 setosa
# 5 0.19444444 0.6666667 0.06779661 0.04166667 setosa
# 6 0.30555556 0.7916667 0.11864407 0.12500000 setosa

Estandarización de Z-Score

El inconveniente de la técnica de normalización mínimo-máximo es que lleva los valores de los datos hacia la media. Si queremos asegurarnos de que los valores atípicos se ponderen más que otros valores, una estandarización de puntaje z es una mejor técnica para implementar.

La fórmula para una estandarización de puntaje z es:

(X – μ) / σ

Para cada valor de una variable, simplemente restamos el valor medio de la variable, luego dividimos por la desviación estándar de la variable.

Para implementar esto en R, tenemos algunas opciones diferentes:

1. Estandarizar una variable

Si simplemente queremos estandarizar una variable en un conjunto de datos, como Sepal.Width en el conjunto de datos del iris , podemos usar el siguiente código:

#standardize Sepal.Width
 iris $ Sepal.Width <- (iris $ Sepal.Width - mean (iris $ Sepal.Width)) / sd (iris $ Sepal.Width)

cabeza (iris)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Especies
# 1 5.1 1.01560199 1.4 0.2 setosa
# 2 4,9 -0,13153881 1,4 0,2 setosa
# 3 4,7 0,32731751 1,3 0,2 setosa
# 4 4,6 0,09788935 1,5 0,2 setosa
# 5 5.0 1.24503015 1.4 0.2 setosa
# 6 5,4 1,93331463 1,7 0,4 setosa

Los valores de Sepal.Width ahora se escalan de manera que la media sea 0 y la desviación estándar sea 1. Incluso podemos verificar esto si quisiéramos:

# encontrar la media de Sepal.Width
 mean (iris $ Sepal.Width)

# [1] 2.034094e-16 # básicamente cero

# encontrar la desviación estándar de Sepal.Width
 sd (iris $ Sepal.Width)

# [1] 1

2. Estandarizar varias variables usando la función de escala

Para estandarizar varias variables, simplemente podemos usar la función de escala . Por ejemplo, el siguiente código muestra cómo escalar las primeras cuatro columnas del conjunto de datos de iris :

#standarizar las primeras cuatro columnas del conjunto de datos de iris
iris_standardize <- as.data.frame (escala (iris [1: 4]))

#ver las primeras seis filas del
 encabezado del conjunto de datos estandarizado (iris_standardize)

# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 -0.8976739 1.01560199 -1.335752 -1.311052
# 2 -1.1392005 -0.13153881 -1.335752 -1.311052
# 3 -1.3807271 0.32731751 -1.392399 -1.311052
# 4 -1.5014904 0.09788935 -1.279104 -1.311052
# 5 -1.0184372 1.24503015 -1.335752 -1.311052
# 6 -0.5353840 1.93331463 -1.165809 -1.048667

Tenga en cuenta que la función de escala , por defecto, intenta estandarizar cada columna en un marco de datos. Por lo tanto, obtendríamos un error si intentáramos usar la escala (iris) porque la columna de especies no es numérica y no se puede estandarizar:

escala (iris)

#Error in colMeans (x, na.rm = TRUE): 'x' debe ser numérico

Sin embargo, es posible estandarizar solo ciertas variables en un marco de datos y al mismo tiempo mantener iguales todas las demás variables usando el paquete dplyr . Por ejemplo, el siguiente código estandariza las variables Sepal.Width y Sepal.Length manteniendo todas las demás variables iguales:

#cargar paquete dplyr
biblioteca (dplyr)

#standardize Sepal.Width y Sepal.Length
 iris_new <- iris%>% mutate_each_ (list (~ scale (.)%>% as.vector),
                                  vars = c ("Sepal.Width", "Sepal.Length"))

#ver las primeras seis filas del nuevo encabezado del marco de datos
 (iris_new)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Especies
# 1 -0,8976739 1,01560199 1,4 0,2 setosa
# 2 -1.1392005 -0.13153881 1.4 0.2 setosa
# 3 -1.3807271 0.32731751 1.3 0.2 setosa
# 4 -1.5014904 0.09788935 1.5 0.2 setosa
# 5 -1.0184372 1.24503015 1.4 0.2 setosa
# 6 -0,5353840 1,93331463 1,7 0,4 setosa

Observe que Sepal.Length y Sepal.Width están estandarizados de manera que ambas variables tienen una media de 0 y una desviación estándar de 1, mientras que las otras tres variables en el marco de datos permanecen sin cambios.

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

Dado un conjunto de p variables predictoras y una variable de respuesta, la regresión lineal múltiple utiliza un método conocido…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!