con = dbConnect(odbc(), "accesoSQL", database = "dbEmpresa")
sql = "SELECT * FROM view_created"
datos = dbGetQuery(con,sql)
datos
## ciudad potencia velocidad precio_vehiculo pago_monto paymentDate
## 1 Melbourne 76 120 12613.15 45864.03 2003-05-20
## 2 Melbourne 76 120 12613.15 82261.22 2004-12-15
## 3 Melbourne 76 120 12613.15 7565.08 2003-05-31
## 4 Melbourne 76 120 12613.15 44894.74 2004-03-10
## 5 Nantes 76 120 11411.13 6066.78 2004-10-19
## 6 Nantes 76 120 11411.13 14571.44 2003-06-05
## 7 Nantes 76 120 11411.13 1676.14 2004-12-18
## 8 Las Vegas 76 120 11619.13 14191.12 2004-12-17
## 9 Las Vegas 76 120 11619.13 32641.98 2003-06-06
## 10 Las Vegas 76 120 11619.13 33347.88 2004-08-20
## 11 Melbourne 76 120 12613.15 45864.03 2003-05-20
## 12 Melbourne 76 120 12613.15 82261.22 2004-12-15
## 13 Melbourne 76 120 12613.15 7565.08 2003-05-31
## 14 Melbourne 76 120 12613.15 44894.74 2004-03-10
## 15 Melbourne 76 120 12613.15 45864.03 2003-05-20
## 16 Melbourne 76 120 12613.15 82261.22 2004-12-15
## 17 Melbourne 76 120 12613.15 7565.08 2003-05-31
## 18 Melbourne 76 120 12613.15 44894.74 2004-03-10
## 19 Las Vegas 76 120 11619.13 14191.12 2004-12-17
## 20 Las Vegas 76 120 11619.13 32641.98 2003-06-06
## 21 Las Vegas 76 120 11619.13 33347.88 2004-08-20
## 22 Nantes 76 120 11411.13 6066.78 2004-10-19
## 23 Nantes 76 120 11411.13 14571.44 2003-06-05
## 24 Nantes 76 120 11411.13 1676.14 2004-12-18
## 25 Melbourne 76 120 12613.15 45864.03 2003-05-20
## 26 Melbourne 76 120 12613.15 82261.22 2004-12-15
## 27 Melbourne 76 120 12613.15 7565.08 2003-05-31
## 28 Melbourne 76 120 12613.15 44894.74 2004-03-10
## 29 Nantes 76 120 11411.13 6066.78 2004-10-19
## 30 Nantes 76 120 11411.13 14571.44 2003-06-05
## 31 Nantes 76 120 11411.13 1676.14 2004-12-18
## 32 Las Vegas 76 120 11619.13 14191.12 2004-12-17
## 33 Las Vegas 76 120 11619.13 32641.98 2003-06-06
## 34 Las Vegas 76 120 11619.13 33347.88 2004-08-20
## 35 Melbourne 76 120 12613.15 45864.03 2003-05-20
## 36 Melbourne 76 120 12613.15 82261.22 2004-12-15
## 37 Melbourne 76 120 12613.15 7565.08 2003-05-31
## 38 Melbourne 76 120 12613.15 44894.74 2004-03-10
Esta tabla resume las características de los vehículos y los pagos realizados en tres ciudades: Melbourne, Nantes y Las Vegas. La potencia (76 CV) y la velocidad (120 km/h) son constantes en todas las ciudades. Sin embargo, el precio promedio de los vehículos muestra ligeras variaciones, siendo más alto en Melbourne (~12,613.15) y Las Vegas (~11,619.13) en comparación con Nantes (~11,411.13). Los montos de pago tienen una variabilidad significativa: Melbourne tiene los pagos más altos y diversos (hasta ~82,261.22), mientras que Las Vegas presenta montos moderados y Nantes pagos bajos y consistentes. Las transacciones se distribuyen entre los años 2003 y 2004.
# Estadísticas descriptivas
datos <- datos %>%
mutate(
potencia = as.numeric(potencia),
velocidad = as.numeric(velocidad),
precio_vehiculo = as.numeric(precio_vehiculo),
pago_monto = as.numeric(pago_monto)
)
# Volver a realizar el cálculo
resumen <- datos %>%
summarise(
potencia_media = mean(potencia, na.rm = TRUE),
velocidad_media = mean(velocidad, na.rm = TRUE),
precio_vehiculo_media = mean(precio_vehiculo, na.rm = TRUE),
pago_monto_media = mean(pago_monto, na.rm = TRUE),
pago_monto_sd = sd(pago_monto, na.rm = TRUE)
)
print(resumen)
## potencia_media velocidad_media precio_vehiculo_media pago_monto_media
## 1 76 120 12093.04 31852.93
## pago_monto_sd
## 1 25496.96
Esta tabla presenta las estadísticas descriptivas generales de las variables analizadas. La potencia media es constante en 76 CV, mientras que la velocidad media se mantiene en 120 km/h para todas las ciudades. El precio promedio de los vehículos es de 12,093.04, mostrando valores relativamente uniformes entre ciudades. El monto promedio de pago asciende a 31,852.93, con una desviación estándar alta de 25,496.96, lo que refleja una considerable variabilidad en los montos de pago realizados. Esto indica patrones de pago diversificados, especialmente en ciudades como Melbourne.
# Boxplot del monto de pago por ciudad
ggplot(datos, aes(x = ciudad, y = pago_monto)) +
geom_boxplot(fill = "skyblue", color = "darkblue") +
theme_minimal() +
labs(title = "Distribución del monto de pago por ciudad",
x = "Ciudad", y = "Monto de pago")
Este gráfico de caja confirma las observaciones previamente mencionadas sobre los patrones de pago en cada ciudad. Podemos afirmar lo que mencionamos anteriormente, que Melbourne presenta la mayor variabilidad en los montos de pago, con valores que alcanzan hasta ~80,000 y un rango intercuartil significativamente amplio. Esto refleja una mayor diversidad en los comportamientos de pago en esta ciudad.
En contraste, Las Vegas muestra montos de pago moderados, con un rango que oscila entre ~20,000 y ~50,000, evidenciando una menor dispersión en comparación con Melbourne. Finalmente, Nantes se caracteriza por montos de pago bajos y consistentes, con un rango intercuartil pequeño que indica poca variabilidad. Este análisis respalda la conclusión de que Melbourne tiene pagos más altos y variados, mientras que Las Vegas y Nantes mantienen patrones más uniformes.
# Seleccionar las variables numéricas
datos_numericos <- datos %>% select(potencia, velocidad, precio_vehiculo, pago_monto)
# Convertir las columnas a numéricas si no lo son
datos_numericos <- datos_numericos %>% mutate_all(as.numeric)
# Eliminar valores faltantes
datos_numericos <- na.omit(datos_numericos)
# Revisar si hay valores constantes (sin variación)
variabilidad <- apply(datos_numericos, 2, var)
if (any(variabilidad == 0)) {
cat("Advertencia: Se encontraron variables con varianza cero. Estas serán eliminadas.\n")
datos_numericos <- datos_numericos[, variabilidad != 0]
}
## Advertencia: Se encontraron variables con varianza cero. Estas serán eliminadas.
# Normalizar los datos
datos_normalizados <- scale(datos_numericos)
# Verificar si hay valores infinitos o NaN después de la normalización
if (any(!is.finite(datos_normalizados))) {
cat("Advertencia: Se encontraron valores infinitos o NaN en los datos normalizados.\n")
datos_normalizados <- datos_normalizados[apply(datos_normalizados, 1, function(row) all(is.finite(row))), ]
}
# Realizar PCA
res_pca <- PCA(datos_normalizados, graph = FALSE)
# Gráfico de las componentes principales
library(factoextra)
fviz_pca_ind(res_pca, geom.ind = "point", col.ind = datos$ciudad,
palette = "jco", addEllipses = TRUE, legend.title = "Ciudad") +
labs(title = "Análisis de Componentes Principales (PCA)",
x = "PC1", y = "PC2") +
theme_minimal()
El análisis de componentes principales (PCA) destaca que Melbourne (amarillo) se separa significativamente a lo largo de PC1, lo que confirma que las características como montos de pago altos y diversos son los principales factores que diferencian esta ciudad. Las Vegas (azul) muestra mayor dispersión en PC2, lo que sugiere cierta variabilidad en sus patrones de pago moderados. Por otro lado, Nantes (gris) se agrupa cerca del origen, evidenciando una baja variabilidad y pagos más uniformes.
Lo más relevante es cómo Melbourne se distancia claramente de las otras ciudades en la primera componente principal, reflejando su comportamiento único en términos económicos. Las Vegas y Nantes presentan diferencias menos marcadas, pero aún muestran características específicas que las separan en la segunda componente.
# 1. Seleccionar las variables numéricas
datos_numericos <- datos %>% select(potencia, velocidad, precio_vehiculo, pago_monto)
# 2. Convertir todas las columnas a numéricas, forzando valores problemáticos a NA
datos_numericos <- datos_numericos %>% mutate_all(as.numeric)
# 3. Eliminar filas con valores no válidos (NA, NaN, Inf)
datos_numericos <- na.omit(datos_numericos)
# Verificar si hay valores problemáticos
if (any(!is.finite(as.matrix(datos_numericos)))) {
stop("Persisten valores no válidos en los datos. Revisa los datos originales.")
}
# 4. Eliminar variables con varianza cero
variabilidad <- apply(datos_numericos, 2, var)
if (any(variabilidad == 0)) {
cat("Advertencia: Se encontraron variables con varianza cero. Estas serán eliminadas.\n")
datos_numericos <- datos_numericos[, variabilidad != 0]
}
## Advertencia: Se encontraron variables con varianza cero. Estas serán eliminadas.
# 5. Estandarizar los datos (normalización)
datos_normalizados <- scale(datos_numericos)
# Verificar si los datos normalizados tienen problemas
if (any(!is.finite(datos_normalizados))) {
stop("Persisten valores no válidos después de la normalización.")
}
# 6. Determinar el número óptimo de clústeres con el método del codo
fviz_nbclust(datos_normalizados, kmeans, method = "wss") +
labs(title = "Método del Codo para determinar el número óptimo de clústeres")
# 7. Realizar el clustering con K-Means (ajustar número de clústeres según el método del codo)
set.seed(123) # Para reproducibilidad
kmeans_result <- kmeans(datos_normalizados, centers = 3, nstart = 25)
# 8. Agregar los resultados del clustering al conjunto de datos original
datos$cluster <- as.factor(kmeans_result$cluster)
# 9. Visualizar los clústeres
fviz_cluster(kmeans_result, data = datos_normalizados,
geom = "point", stand = FALSE, ellipse.type = "convex",
show.clust.cent = TRUE, palette = "jco") +
labs(title = "Cluster Analysis: Agrupación de Ciudades") +
theme_minimal()
El gráfico del método del codo nos indica que el número óptimo de clústeres para el análisis es 3. Esto se observa en la “rodilla” del gráfico, donde la suma total de las distancias al cuadrado dentro de los clústeres (WSS) deja de disminuir significativamente. Elegir 3 clústeres permite un buen balance entre la compactación de los puntos dentro de cada grupo y la separación entre los diferentes clústeres.
El gráfico de clústeres muestra cómo se agrupan las observaciones según las variables seleccionadas, como el precio del vehículo y el monto de pago, en tres clústeres claramente diferenciados. El clúster azul agrupa observaciones con valores similares y cercanos, mientras que el amarillo representa un grupo más separado, posiblemente con montos más altos. Por otro lado, el clúster gris refleja un grupo con características menos extremas pero algo dispersas. Estos clústeres destacan patrones distintivos en las características de los datos analizados.
Las diferencias entre las ciudades son significativas en cuanto al comportamiento de los pagos, pero no en las características de los vehículos. Potencia y velocidad son constantes en todas las ciudades, mientras que el precio promedio del vehículo es ligeramente mayor en Melbourne (~12,613.15) que en Nantes (~11,411.13), lo que podría influir en los pagos más altos observados en Melbourne.
En cuanto a los montos de pago, Melbourne destaca con un promedio más alto (~31,852.93) y una gran variabilidad (desviación estándar de ~25,496.96), lo que refleja transacciones significativamente más diversas. En contraste, Nantes presenta montos bajos y consistentes, mientras que Las Vegas se encuentra en un punto intermedio, con montos más moderados y menos dispersión. Estas diferencias reflejan patrones económicos y de mercado distintos en cada ciudad.
En conclusión, Melbourne muestra montos de pago más elevados y variados, posiblemente debido a vehículos más costosos o una mayor capacidad de pago, mientras que Nantes tiene pagos bajos y uniformes, y Las Vegas se mantiene como un punto intermedio. Ampliar el análisis con factores como fechas de pago o características demográficas podría aportar más contexto a estas diferencias.