Contenido de este artículo
- 0
- 0
- 0
- 0
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/
¿Te hemos ayudado?
Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:La ayuda no cuesta nada
Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo: