Cargar librerías previamente instaladas
# install.packages("corrplot")
# install.packages("ggcorrplot")
# install.packages("PerformanceAnalytics")
# install.packages("GGally")
# install.packages("car")
library(corrplot) # Para correlaciones
library(ggcorrplot) # Para correlaciones
library(PerformanceAnalytics) # Para correlaciones
library(GGally) # Para correlaciones
library(car) # Para crear modelos de regresión y otros
Los datos a partir de valores cosntantes
clientes <- c(180, 200, 220, 250, 270, 300, 320, 350, 370, 400)
transacciones <- c(153.59, 176.55, 221.38, 226.06, 244.94, 295.73, 294.91, 296.02, 322.70, 353.32)
precio_promedio <- c(24.23, 22.85, 22.48, 24.96, 22.59, 22.96, 21.81, 22.16, 20.02, 19.03)
temperatura <- c(37.36, 33.49, 26.10, 34.10, 30.58, 28.80, 31.35, 28.92, 29.81, 30.12)
venta_total <- c(4480.29, 4949.43, 5366.43, 6114.52, 6633.1, 7389.74, 7901.46, 8449.76, 9099.71, 9911.82)
datos <- data.frame(clientes, transacciones, precio_promedio, temperatura, venta_total)
Correlación con la función cor() base de los paquete básicos.
cor(datos)
## clientes transacciones precio_promedio temperatura
## clientes 1.0000000 0.9771148 -0.8010063 -0.4766527
## transacciones 0.9771148 1.0000000 -0.7821663 -0.5873796
## precio_promedio -0.8010063 -0.7821663 1.0000000 0.4973542
## temperatura -0.4766527 -0.5873796 0.4973542 1.0000000
## venta_total 0.9993682 0.9776170 -0.8106221 -0.4632100
## venta_total
## clientes 0.9993682
## transacciones 0.9776170
## precio_promedio -0.8106221
## temperatura -0.4632100
## venta_total 1.0000000
Correlación entre variables independiente con la función corrplot() de la librería corrplot.
corr <- cor(datos)
corrplot(corr, method = "color", addCoef.col = "black")
Correlación entre variables independiente con la función ggcorrplot() de la librería ggcorrplot.
corr <- cor(datos)
ggcorrplot(corr, lab = TRUE)
Correlación entre variables independiente con la función
chart.Correlation() de la librería
PerformanceAnalytics.
chart.Correlation(datos, histogram = TRUE)
Correlación entre variables independiente con la función ggpairs() de la librería GGally.
ggpairs(datos)
Al final del dia el investigador, analista o científico de datos puede decidir la de su preferencia en lenguaje de programación R, afortunadamente existen diversas alternativas. El autor prefiere por complitud y amigabilidad la librería PerformanceAnalytics.
Siendo las variables independientes “clientes”, “transacciones”, “precio_promedio”, “temperatura”, y la variable dependiente “venta_total”, la correlación que hay que suponer que posiblemente tenga colinealidad entre variables independientes es transaccones con clientes que está aproximadamente de 0.97.
Sin embargo para verificar ello hay que crear un modelo de regresión múltiple y verificar el estadístico vif precisamente con la función del mismo nombre de la librería car. El modelo se crea en la variable llamada modelo y los estaqísiticos vif en la variable llamada vif_valores.
El modelo de regresión lineal múltiple en R se crea con la función lm() en donde la expresión venta_total ~ clientes + transacciones + precio_promedio + temperatura, data = datos significa que la variable dependiente venta_total está en función de las variable independientes indicadas o bien pudiera haberse indicado de manera alternativa modelo <- lm(ventas_total ~ ., data = datos).
Crear modelo y calcular VIF
El model
library(car)
#modelo <- lm(ventas_total ~ ., data = datos)#
modelo <- lm(venta_total ~ clientes + transacciones + precio_promedio + temperatura, data = datos)
vif_valores <- vif(modelo)
vif_valores
## clientes transacciones precio_promedio temperatura
## 38.24719 39.87702 3.05139 2.45297
Interpretar VIF
#------------------------------------------
# 5. Interpretación del VIF
#------------------------------------------
interpretar_vif <- function(vif){
if(vif == 1){
return("Sin multicolinealidad")
} else if(vif > 1 & vif < 5){
return("Multicolinealidad baja (aceptable)")
} else if(vif >= 5 & vif < 10){
return("Multicolinealidad moderada (precaución)")
} else {
return("Multicolinealidad alta (problema serio)")
}
}
resultado <- data.frame(
Variable = names(vif_valores),
VIF = round(vif_valores, 2),
Interpretacion = sapply(vif_valores, interpretar_vif)
)
resultado
De este conjunto de datos lo que se puede hacer es eliminar alguna variable, sin embargo el autor no sugiere eliminar, se puede combinar tal vez con un sencillo mecanismo de sumar transacciones + clientes y obtener una nueva variable llamada clientes_transacciones.
datos$transacciones_clientes <- datos$transacciones + datos$clientes
modelo_nuevo <- lm(
venta_total ~ transacciones_clientes + precio_promedio + temperatura,
data = datos
)
vif_valores <- vif(modelo_nuevo)
vif_valores
## transacciones_clientes precio_promedio temperatura
## 2.932928 2.797738 1.422728
Ahora ya no hay multicolinealidad de acuerdo a la interpretación
resultado <- data.frame(
Variable = names(vif_valores),
VIF = round(vif_valores, 2),
Interpretacion = sapply(vif_valores, interpretar_vif)
)
resultado