#Transformacion de variables
Son tecnicas comunes utilizadas en el analisis de datos para mejorar la interpretacion de los datos y garantizar que las variables sean comparables entre si.
##Transformacion de variable
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 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.
telco<-read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Estadistica-R/master/Caso_telefon%C3%ADa.csv", sep = ";", encoding = "latin1", stringsAsFactors = T)
head(telco)
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.
#Original
hist(telco$Edad,12)
para sacar la raiz cuadrada ,simplemten se puede utilizar la funcion
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
Graficamente
hist(sqrt(telco$Edad))
### 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.
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 observar graficamente se tiene
plot(exp(telco$Edad))
forma 2
edad_exp<-exp(telco$Edad)
hist(edad_exp)
###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.
Para la transformación logaritmica, utilizar 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
graficamente
hist(log(telco$Edad))
Cambiar a 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
Graficamente
hist(log(telco$Edad, base=2))
## Comparacion de transformaciones
#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 graficamente cada 1:
par(mfrow=c(3,2))
hist(telco$Edad)
hist(edad_sqrt)
hist(edad_exp)
hist(edad_ln)
hist(edad_log2)
hist(edad_log5)
par(mfrow=c(1,1))
Este tipo de transformaciones, busca que los datos sean simetricos (distribucion de campana) o que se cumpla con supuesto estadistico.
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_exp), main = "Distribución de edades transformadas - exp")
plot(density(edad_ln), main = "Distribución de edades transformadas - ln")
plot(density(edad_log2), main = "Distribución de edades transformadas - log2")
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 comportmiento, a partir de allí se puede aplicar la transformación más adecuado según objetivo.
Grafica 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 estadarizacion se hace o se aplica a la transformacion z: se debe restar cada dato con su media y dividir este resultado con la desviacion estandar.
\[ Z = (X-\mu)/\sigma \] Donde:
head(telco)
Vamos a aplicar estadarizacion Z a la variable Monto de manera manual ## Metodo 1: Por parte
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
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
R tiene múltiple funciones para estandarizar, la clásica es la función scale
#Funcion 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 ventaja de la 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 sesió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 los valores de las
variables transformadas.
boxplot(telco_cuanti_scale)
### Normalizacion: Estadarizacion min-max: Consiste en restar cada dato
con el valor minimo y a esta operacion se le divide con la resta del
valor maximo con el minimo. Esto permite que los resultados varien entre
0 y 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
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 funcion 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])
predict(pre_procesamiento, telco)
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.