La transformación y estandarización de variables son técnicas comunes utilizadas en el análisis de datos para mejorar la interpretación de los datos y garantizar que las variables sean comparables entre sí.
La transformación de variables es una técnica utilizada en estadística y análisis de datos para modificar una variable con el objetivo de cumplir con ciertos supuestos o mejorar la interpretación de los datos. Esta transformación implica aplicar una función matemática a los valores de la variable original para obtener una nueva variable.
La transformación de variables implica aplicar una función matemática a los valores de una variable con el objetivo de modificar su distribución o relación con otras variables. Algunas transformaciones comunes incluyen la transformación logarítmica, la transformación exponencial y la transformación de raíz cuadrada. Estas transformaciones se utilizan principalmente cuando los datos presentan asimetría o heterocedasticidad. Por ejemplo, si se tiene una variable con una distribución sesgada hacia la derecha, se puede aplicar una transformación logarítmica para reducir la asimetría y hacer que los datos se aproximen más a una distribución normal (gráfica o distribución se asemeja a la campana de Gauss).
Existen diferentes tipos de transformaciones de variables que se utilizan según las características de los datos y los objetivos del análisis. Algunas de las transformaciones más comunes son:
Transformación logarítmica: Esta transformación se utiliza cuando los datos presentan una distribución sesgada hacia la derecha (asimetría positiva). La transformación logarítmica reduce la asimetría y puede facilitar la interpretación de los datos.
Transformación exponencial: Se aplica cuando los datos tienen una distribución sesgada hacia la izquierda (asimetría negativa). La transformación exponencial puede ayudar a corregir la asimetría y hacer que los datos se aproximen más a una distribución simétrica.
Transformación de raíz cuadrada: Esta transformación se utiliza para reducir la dispersión de los datos cuando estos tienen una distribución con una varianza que aumenta con el nivel medio de la variable. También puede ayudar a reducir la asimetría.
Transformación de Box-Cox: Es una transformación paramétrica que puede utilizarse para corregir diferentes tipos de asimetría. La transformación de Box-Cox permite encontrar el valor óptimo del parámetro lambda (λ) que maximiza la simetría de los datos.
Cargar el conjunto de datos
telco<- read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Estadistica-R/master/Caso_telefon%C3%ADa.csv", sep = ";", encoding = "latin1", stringsAsFactors = T)
head(telco)
# Original
hist(telco$Edad, 12)
Para sacar la raíz cuadrada, simplemente se puede utilizar la función “sqrt()
sqrt(telco$Edad)
## [1] 5.196152 5.291503 5.291503 4.582576 5.385165 5.099020 6.324555 6.324555
## [9] 5.477226 5.196152 5.291503 4.898979 5.099020 5.744563 4.582576 6.324555
## [17] 5.000000 6.164414 5.916080 5.567764 5.291503 5.099020 5.099020 5.744563
## [25] 5.830952 4.690416 5.099020 6.244998 5.567764 4.690416 5.291503 5.916080
## [33] 4.690416 6.324555 5.830952 4.472136 5.830952 4.472136 5.385165 5.744563
## [41] 4.795832 5.916080 4.898979 5.656854 5.656854 5.196152 6.082763 5.656854
## [49] 5.744563 5.916080 6.244998 5.830952 6.164414 6.244998 6.082763 5.656854
## [57] 6.082763 5.000000 5.099020 6.324555 6.324555 5.477226 5.291503 4.898979
## [65] 5.744563 4.582576 5.291503 4.582576 5.385165 6.000000 5.830952 4.472136
## [73] 5.830952 4.472136 5.385165 5.567764 4.690416 6.164414 6.000000 5.744563
Gráficamente
hist(sqrt(telco$Edad))
Se aplica cuando los datos tienen una distribución sesgada hacia la izquierda (asimetría negativa). La transformación exponencial puede ayudar a corregir la asimetría y hacer que los datos se aproximen más a una distribución simétrica.
en r para poder obtener esta transformación, se debe utilizar la función exp()
exp(telco$Edad)
## [1] 5.320482e+11 1.446257e+12 1.446257e+12 1.318816e+09 3.931334e+12
## [6] 1.957296e+11 2.353853e+17 2.353853e+17 1.068647e+13 5.320482e+11
## [11] 1.446257e+12 2.648912e+10 1.957296e+11 2.146436e+14 1.318816e+09
## [16] 2.353853e+17 7.200490e+10 3.185593e+16 1.586013e+15 2.904885e+13
## [21] 1.446257e+12 1.957296e+11 1.957296e+11 2.146436e+14 5.834617e+14
## [26] 3.584913e+09 1.957296e+11 8.659340e+16 2.904885e+13 3.584913e+09
## [31] 1.446257e+12 1.586013e+15 3.584913e+09 2.353853e+17 5.834617e+14
## [36] 4.851652e+08 5.834617e+14 4.851652e+08 3.931334e+12 2.146436e+14
## [41] 9.744803e+09 1.586013e+15 2.648912e+10 7.896296e+13 7.896296e+13
## [46] 5.320482e+11 1.171914e+16 7.896296e+13 2.146436e+14 1.586013e+15
## [51] 8.659340e+16 5.834617e+14 3.185593e+16 8.659340e+16 1.171914e+16
## [56] 7.896296e+13 1.171914e+16 7.200490e+10 1.957296e+11 2.353853e+17
## [61] 2.353853e+17 1.068647e+13 1.446257e+12 2.648912e+10 2.146436e+14
## [66] 1.318816e+09 1.446257e+12 1.318816e+09 3.931334e+12 4.311232e+15
## [71] 5.834617e+14 4.851652e+08 5.834617e+14 4.851652e+08 3.931334e+12
## [76] 2.904885e+13 3.584913e+09 3.185593e+16 4.311232e+15 2.146436e+14
Para poder Observarlo gráficamente se tiene:
plot(exp(telco$Edad))
Forma 2
edad_exp <- exp(telco$Edad)
hist(edad_exp)
Esta transformación se utiliza cuando los datos presentan una distribución sesgada hacia la derecha (asimetría positiva). La transformación logarítmica reduce la asimetría y puede facilitar la interpretación de los datos.
Para la transformación logaritmica, utlizar log(dentro de los argumentos se puede cambiar la base)
log(telco$Edad)
## [1] 3.295837 3.332205 3.332205 3.044522 3.367296 3.258097 3.688879 3.688879
## [9] 3.401197 3.295837 3.332205 3.178054 3.258097 3.496508 3.044522 3.688879
## [17] 3.218876 3.637586 3.555348 3.433987 3.332205 3.258097 3.258097 3.496508
## [25] 3.526361 3.091042 3.258097 3.663562 3.433987 3.091042 3.332205 3.555348
## [33] 3.091042 3.688879 3.526361 2.995732 3.526361 2.995732 3.367296 3.496508
## [41] 3.135494 3.555348 3.178054 3.465736 3.465736 3.295837 3.610918 3.465736
## [49] 3.496508 3.555348 3.663562 3.526361 3.637586 3.663562 3.610918 3.465736
## [57] 3.610918 3.218876 3.258097 3.688879 3.688879 3.401197 3.332205 3.178054
## [65] 3.496508 3.044522 3.332205 3.044522 3.367296 3.583519 3.526361 2.995732
## [73] 3.526361 2.995732 3.367296 3.433987 3.091042 3.637586 3.583519 3.496508
Gráficamente
hist(log(telco$Edad))
Cambiar la base 2
log(telco$Edad, base = 2)
## [1] 4.754888 4.807355 4.807355 4.392317 4.857981 4.700440 5.321928 5.321928
## [9] 4.906891 4.754888 4.807355 4.584963 4.700440 5.044394 4.392317 5.321928
## [17] 4.643856 5.247928 5.129283 4.954196 4.807355 4.700440 4.700440 5.044394
## [25] 5.087463 4.459432 4.700440 5.285402 4.954196 4.459432 4.807355 5.129283
## [33] 4.459432 5.321928 5.087463 4.321928 5.087463 4.321928 4.857981 5.044394
## [41] 4.523562 5.129283 4.584963 5.000000 5.000000 4.754888 5.209453 5.000000
## [49] 5.044394 5.129283 5.285402 5.087463 5.247928 5.285402 5.209453 5.000000
## [57] 5.209453 4.643856 4.700440 5.321928 5.321928 4.906891 4.807355 4.584963
## [65] 5.044394 4.392317 4.807355 4.392317 4.857981 5.169925 5.087463 4.321928
## [73] 5.087463 4.321928 4.857981 4.954196 4.459432 5.247928 5.169925 5.044394
Gráficamente
hist(log(telco$Edad, base = 2))
#Obtener Solo Transformaciones
edad_sqrt <- sqrt(telco$Edad)
edad_exp <- exp(telco$Edad)
edad_ln <- log(telco$Edad)
edad_log2 <- log(telco$Edad, base = 2)
edad_log5 <- log(telco$Edad, base = 5)
Ver gráficamente cada uno:
par(mfrow=c(3,2))
hist(telco$Edad)
hist(edad_sqrt)
hist(edad_ln)
hist(edad_log2)
hist(edad_log5)
par(mfrow=c(1,1))
Este Tipo Transformaciones, busca que los datos sean simétricos(distribución forma de campana)
La visualización de la distribución puede mejorarse con la gráfica de densidad
par(mfrow=c(3,2))
plot(density(telco$Edad), main = "Distribución de edades Originales")
plot(density(edad_sqrt), main = "Distribución de edades transformadas - sqrt")
plot(density(edad_ln), main = "Distribución de edades transformadas - log")
plot(density(edad_log5), main = "Distribución de edades transformadas - log5")
par(mfrow=c(1,1))
Se puede realizar un análisis general de las variables originales y verificar su comportamiento, a partir de allí se puede aplicar la transformación más adecuado según objetivo
Gráfica general
library(PerformanceAnalytics)
chart.Correlation(cor(telco[,4:8]), histogram = TRUE)
La estandarización de variables, también conocida como normalización, implica transformar los valores de una variable para que tengan una media de cero y una desviación estándar de uno. Esto se logra restando la media de la variable a cada valor y dividiendo por la desviación estándar.
La estandarización es útil cuando se desea comparar variables que están en diferentes escalas o unidades. Al estandarizar las variables, se eliminan las diferencias en las escalas y se asegura que todas las variables tengan la misma escala relativa.
Por ejemplo, si tienes un conjunto de variables con diferentes unidades de medida, como peso en kilogramos y altura en metros, puedes estandarizar ambas variables para que sean comparables y no se vean afectadas por las diferencias en las unidades.
Desde el punto de vista estadistico la estandarización se hace o se aplica a la transformación Z: Se debe restar cada datos con su media y dividir este resultado con la desviación estándar.
\[ z=\frac{x_i-\mu}{\sigma} \]
Donde: - \(X_i\) Representa cada dato dentro del caso - \(⧵mu\) Es la media poblacional (Promedio) - \(⧵sigma\) Es la desviación estándar poblacional
head(telco)
Vamos a aplicar estandarización Z a la variable Monto de manera manual
Método 1: Por Partes
media_monto <- mean(telco$Monto)
media_monto
## [1] 92.305
desv_est <- sd(telco$Monto)
desv_est
## [1] 10.11737
monto_estandar <- (telco$Monto - media_monto)/desv_est
monto_estandar
## [1] -0.15863801 0.33556141 2.19375124 1.35361222 0.66173303 -0.20805796
## [7] 1.00767262 -0.01037819 1.75885575 0.41463332 -0.39585374 -0.66272143
## [13] -0.25747790 -0.34643380 -0.82086524 -0.80109726 -0.05979813 -1.79938010
## [19] -0.34643380 -0.06968212 -1.21622478 -0.38596975 -1.36448461 -0.39585374
## [25] -0.66272143 -0.36620177 -1.33483264 -1.05808096 -0.59353351 -0.84063322
## [31] -0.15863801 0.33556141 0.69138499 -0.89005316 0.49370522 -0.93947310
## [37] 0.19718557 0.41463332 -1.33483264 0.78034089 -0.96912507 -0.95924108
## [43] 0.21695355 -0.59353351 -0.39585374 -0.85051721 -0.84063322 -0.81098125
## [49] -0.89993715 -0.74179333 0.65184904 2.64841471 1.09662852 1.70943580
## [55] 1.35361222 0.81987684 1.05709257 1.79839170 1.98618748 -0.15863801
## [61] 1.99607147 1.58094395 1.35361222 0.66173303 -0.20805796 1.00767262
## [67] -0.01037819 1.75885575 0.41463332 -0.03014616 -0.80109726 -0.38596975
## [73] -1.36448461 -0.39585374 -0.66272143 -0.36620177 -1.33483264 -1.05808096
## [79] -0.59353351 -0.84063322
Método 2: Directo
monto_estandar2 <- (telco$Monto-mean(telco$Monto))/sd(telco$Monto)
monto_estandar2
## [1] -0.15863801 0.33556141 2.19375124 1.35361222 0.66173303 -0.20805796
## [7] 1.00767262 -0.01037819 1.75885575 0.41463332 -0.39585374 -0.66272143
## [13] -0.25747790 -0.34643380 -0.82086524 -0.80109726 -0.05979813 -1.79938010
## [19] -0.34643380 -0.06968212 -1.21622478 -0.38596975 -1.36448461 -0.39585374
## [25] -0.66272143 -0.36620177 -1.33483264 -1.05808096 -0.59353351 -0.84063322
## [31] -0.15863801 0.33556141 0.69138499 -0.89005316 0.49370522 -0.93947310
## [37] 0.19718557 0.41463332 -1.33483264 0.78034089 -0.96912507 -0.95924108
## [43] 0.21695355 -0.59353351 -0.39585374 -0.85051721 -0.84063322 -0.81098125
## [49] -0.89993715 -0.74179333 0.65184904 2.64841471 1.09662852 1.70943580
## [55] 1.35361222 0.81987684 1.05709257 1.79839170 1.98618748 -0.15863801
## [61] 1.99607147 1.58094395 1.35361222 0.66173303 -0.20805796 1.00767262
## [67] -0.01037819 1.75885575 0.41463332 -0.03014616 -0.80109726 -0.38596975
## [73] -1.36448461 -0.39585374 -0.66272143 -0.36620177 -1.33483264 -1.05808096
## [79] -0.59353351 -0.84063322
Método 3: Apoyarse en las funciones de R tiene mültiples funciones para eständarizar, la clásica es la función scale
#Función scale
monto_estandar3 <-scale(telco$Monto)
monto_estandar3
## [,1]
## [1,] -0.15863801
## [2,] 0.33556141
## [3,] 2.19375124
## [4,] 1.35361222
## [5,] 0.66173303
## [6,] -0.20805796
## [7,] 1.00767262
## [8,] -0.01037819
## [9,] 1.75885575
## [10,] 0.41463332
## [11,] -0.39585374
## [12,] -0.66272143
## [13,] -0.25747790
## [14,] -0.34643380
## [15,] -0.82086524
## [16,] -0.80109726
## [17,] -0.05979813
## [18,] -1.79938010
## [19,] -0.34643380
## [20,] -0.06968212
## [21,] -1.21622478
## [22,] -0.38596975
## [23,] -1.36448461
## [24,] -0.39585374
## [25,] -0.66272143
## [26,] -0.36620177
## [27,] -1.33483264
## [28,] -1.05808096
## [29,] -0.59353351
## [30,] -0.84063322
## [31,] -0.15863801
## [32,] 0.33556141
## [33,] 0.69138499
## [34,] -0.89005316
## [35,] 0.49370522
## [36,] -0.93947310
## [37,] 0.19718557
## [38,] 0.41463332
## [39,] -1.33483264
## [40,] 0.78034089
## [41,] -0.96912507
## [42,] -0.95924108
## [43,] 0.21695355
## [44,] -0.59353351
## [45,] -0.39585374
## [46,] -0.85051721
## [47,] -0.84063322
## [48,] -0.81098125
## [49,] -0.89993715
## [50,] -0.74179333
## [51,] 0.65184904
## [52,] 2.64841471
## [53,] 1.09662852
## [54,] 1.70943580
## [55,] 1.35361222
## [56,] 0.81987684
## [57,] 1.05709257
## [58,] 1.79839170
## [59,] 1.98618748
## [60,] -0.15863801
## [61,] 1.99607147
## [62,] 1.58094395
## [63,] 1.35361222
## [64,] 0.66173303
## [65,] -0.20805796
## [66,] 1.00767262
## [67,] -0.01037819
## [68,] 1.75885575
## [69,] 0.41463332
## [70,] -0.03014616
## [71,] -0.80109726
## [72,] -0.38596975
## [73,] -1.36448461
## [74,] -0.39585374
## [75,] -0.66272143
## [76,] -0.36620177
## [77,] -1.33483264
## [78,] -1.05808096
## [79,] -0.59353351
## [80,] -0.84063322
## attr(,"scaled:center")
## [1] 92.305
## attr(,"scaled:scale")
## [1] 10.11737
La venttaja de al función de R, es que se puede enviar todo el caso
telco_cuanti_scale <- scale(telco[,4:9])
head(telco_cuanti_scale)
## Reclamos Llamadas Edad Minutos Monto Tiempo
## [1,] 0.6462614 0.86099329 -0.5465360 -0.52591040 -0.1586380 1.5218742
## [2,] -0.7263292 -0.37636234 -0.3802893 -0.67800907 0.3355614 -0.6349750
## [3,] 0.6462614 0.86099329 -0.3802893 0.28138254 2.1937512 -0.2848372
## [4,] -0.2687990 0.03608954 -1.5440161 0.21118315 1.3536122 1.1857419
## [5,] -0.7263292 -0.78881422 -0.2140426 0.03568469 0.6617330 -0.4669088
## [6,] -0.2687990 -0.37636234 -0.7127827 0.72597865 -0.2080580 0.7655764
Recordar En una sesisión anterior se realizo gráficos de cajas para verificar la presencia de outliers no se recomienda trabajar con valores originales para la siguiente gráfica
boxplot(telco[,4,9])
Lo más recomendable es realizar el gráfico con lso valores de las variables transformadas
boxplot(telco_cuanti_scale)
#Normalización: Estandarización min-max: Consiste en restar cada ddato con el valor mínimo y a esta operación se le divide con la resta del valor máximo con el mínimo.
\[ X_{norm} = \frac{\left(X_i-X_{\min}\right)}{X_{\max}-X_{\min}} \]
Método 1:
monto_normal <- (telco$Monto-min(telco$Monto))/(max(telco$Monto)-min(telco$Monto))
monto_normal
## [1] 0.36888889 0.48000000 0.89777778 0.70888889 0.55333333 0.35777778
## [7] 0.63111111 0.40222222 0.80000000 0.49777778 0.31555556 0.25555556
## [13] 0.34666667 0.32666667 0.22000000 0.22444444 0.39111111 0.00000000
## [19] 0.32666667 0.38888889 0.13111111 0.31777778 0.09777778 0.31555556
## [25] 0.25555556 0.32222222 0.10444444 0.16666667 0.27111111 0.21555556
## [31] 0.36888889 0.48000000 0.56000000 0.20444444 0.51555556 0.19333333
## [37] 0.44888889 0.49777778 0.10444444 0.58000000 0.18666667 0.18888889
## [43] 0.45333333 0.27111111 0.31555556 0.21333333 0.21555556 0.22222222
## [49] 0.20222222 0.23777778 0.55111111 1.00000000 0.65111111 0.78888889
## [55] 0.70888889 0.58888889 0.64222222 0.80888889 0.85111111 0.36888889
## [61] 0.85333333 0.76000000 0.70888889 0.55333333 0.35777778 0.63111111
## [67] 0.40222222 0.80000000 0.49777778 0.39777778 0.22444444 0.31777778
## [73] 0.09777778 0.31555556 0.25555556 0.32222222 0.10444444 0.16666667
## [79] 0.27111111 0.21555556
Método 2: Función
library(scales)
rescale(telco$Monto)
## [1] 0.36888889 0.48000000 0.89777778 0.70888889 0.55333333 0.35777778
## [7] 0.63111111 0.40222222 0.80000000 0.49777778 0.31555556 0.25555556
## [13] 0.34666667 0.32666667 0.22000000 0.22444444 0.39111111 0.00000000
## [19] 0.32666667 0.38888889 0.13111111 0.31777778 0.09777778 0.31555556
## [25] 0.25555556 0.32222222 0.10444444 0.16666667 0.27111111 0.21555556
## [31] 0.36888889 0.48000000 0.56000000 0.20444444 0.51555556 0.19333333
## [37] 0.44888889 0.49777778 0.10444444 0.58000000 0.18666667 0.18888889
## [43] 0.45333333 0.27111111 0.31555556 0.21333333 0.21555556 0.22222222
## [49] 0.20222222 0.23777778 0.55111111 1.00000000 0.65111111 0.78888889
## [55] 0.70888889 0.58888889 0.64222222 0.80888889 0.85111111 0.36888889
## [61] 0.85333333 0.76000000 0.70888889 0.55333333 0.35777778 0.63111111
## [67] 0.40222222 0.80000000 0.49777778 0.39777778 0.22444444 0.31777778
## [73] 0.09777778 0.31555556 0.25555556 0.32222222 0.10444444 0.16666667
## [79] 0.27111111 0.21555556
Aplicando a todo el caso (var cuantitativas) la función rescale solo permite aplicarse a vectores, no es posible directamente aplicar al data frame.
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
pre_procesamiento <- preProcess(telco[,4:9]) # Así por defecto muestra la est. Z
predict(pre_procesamiento, telco[,4:9])
library(caret)
pre_procesamiento <- preProcess(telco[,4:9], method = "range")
predict(pre_procesamiento, telco[,4:9])
es una librería en R que proporciona una forma fácil y poderosa de crear gráficos de alta calidad. Fue desarrollada por Hadley Wickham y se basa en la gramática de gráficos, lo que significa que utiliza una sintaxis coherente y consistente para construir visualizaciones.
La principal idea detrás de ggplot es que un gráfico se puede descomponer en capas que representan diferentes aspectos de la visualización, como los datos, las variables estéticas, las escalas, los ejes, los títulos, las leyendas, etc. Cada capa se agrega al gráfico utilizando funciones específicas de ggplot.
En ggplot, se sigue un enfoque de “declaración” para construir gráficos. En lugar de dibujar directamente los gráficos, se especifica cómo deberían verse los gráficos y qué datos utilizar. Luego, ggplot se encarga de generar el gráfico final teniendo en cuenta todas las especificaciones.
La sintaxis básica de ggplot involucra tres componentes principales:
ggplot(): Esta función inicializa un objeto de gráfico base al que se pueden agregar capas adicionales. Se especifica el conjunto de datos y las variables estéticas dentro de esta función.
aes(): Esta función se utiliza dentro de ggplot() o en las capas adicionales para definir las variables estéticas. Las variables estéticas determinan cómo se mapean los datos a los aspectos visuales del gráfico, como las posiciones en los ejes x e y, los colores, los tamaños, etc.
Capas adicionales: Después de inicializar el objeto de gráfico con ggplot(), se pueden agregar capas adicionales utilizando funciones como geom_point(), geom_line(), geom_bar(), etc. Estas funciones especifican el tipo de gráfico que se desea agregar al gráfico base y permiten personalizar aún más la visualización.