# Instalar y cargar librerías necesarias
packages <- c("ggplot2", "dplyr", "tidyr", "psych", "car", "infer", "readr")
new_packages <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
## The following object is masked from 'package:dplyr':
##
## recode
library(infer)
library(readr)
# Cargar datos
df <- read_csv("datos_negocios_extra_5_logistica.csv")
## Rows: 100 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Ruta
## dbl (3): KM_Recorridos, Tiempo_Entrega_Horas, Costos_Operativos
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df <- as.data.frame(df) # Asegurar que df es un dataframe
# Ver estructura del dataset
str(df)
## 'data.frame': 100 obs. of 4 variables:
## $ Ruta : chr "Ruta Sur" "Ruta Norte" "Ruta Sur" "Ruta Oeste" ...
## $ KM_Recorridos : num 1796 4856 2909 3643 4753 ...
## $ Tiempo_Entrega_Horas: num 17.2 29.8 13.3 12.7 23.1 1.1 46.8 45.5 10.2 32.7 ...
## $ Costos_Operativos : num 17459 9828 11964 18626 12812 ...
# Mostrar los nombres exactos de las columnas
print("Las columnas disponibles en el dataset son:")
## [1] "Las columnas disponibles en el dataset son:"
print(colnames(df))
## [1] "Ruta" "KM_Recorridos" "Tiempo_Entrega_Horas"
## [4] "Costos_Operativos"
# Resumen Estadístico
describe(df)
## vars n mean sd median trimmed mad min
## Ruta* 1 100 2.68 1.10 3.0 2.72 1.48 1.00
## KM_Recorridos 2 100 2575.72 1385.56 2729.0 2568.32 1651.62 166.00
## Tiempo_Entrega_Horas 3 100 25.54 14.89 25.9 25.83 19.57 1.10
## Costos_Operativos 4 100 11048.70 5736.23 10407.5 11031.21 8318.61 1008.57
## max range skew kurtosis se
## Ruta* 4.00 3.00 -0.25 -1.28 0.11
## KM_Recorridos 4948.00 4782.00 0.03 -1.09 138.56
## Tiempo_Entrega_Horas 47.60 46.50 -0.04 -1.28 1.49
## Costos_Operativos 19844.28 18835.71 -0.01 -1.35 573.62
En esta sección se realiza un análisis exploratorio de la base de datos para comprender mejor la distribución de las variables. Se incluyen:
KM_Recorridos
y
Tiempo_Entrega_Horas
.Ruta
.Costos_Operativos
.Este análisis permite tener una visión clara de los datos antes de aplicar técnicas de estimación estadística.
# Tablas de Frecuencia de variables categóricas
table(df$Ruta)
##
## Ruta Este Ruta Norte Ruta Oeste Ruta Sur
## 20 21 30 29
# Histograma de KM Recorridos
ggplot(df, aes(x = KM_Recorridos)) +
geom_histogram(binwidth = 500, fill = "blue", color = "black", alpha = 0.7) +
labs(title = "Distribución de KM Recorridos", x = "KM Recorridos", y = "Frecuencia")
# Boxplot de Costos Operativos por Ruta
ggplot(df, aes(x = Ruta, y = Costos_Operativos)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Costos Operativos por Ruta")
# Gráfico de Barras de la Frecuencia de Rutas
ggplot(df, aes(x = as.factor(Ruta))) +
geom_bar(fill = "purple", color = "black", alpha = 0.7) +
labs(title = "Frecuencia de Rutas", x = "Ruta", y = "Frecuencia")
# Gráfico de Densidad de KM Recorridos
ggplot(df, aes(x = KM_Recorridos)) +
geom_density(fill = "red", alpha = 0.5) +
labs(title = "Densidad de KM Recorridos", x = "KM Recorridos", y = "Densidad")
# Diagrama de Dispersión: KM Recorridos vs Costos Operativos
ggplot(df, aes(x = KM_Recorridos, y = Costos_Operativos)) +
geom_point(color = "darkgreen", alpha = 0.6) +
geom_smooth(method = "lm", color = "blue", se = FALSE) +
labs(title = "Relación entre KM Recorridos y Costos Operativos", x = "KM Recorridos", y = "Costos Operativos")
## `geom_smooth()` using formula = 'y ~ x'
# Gráfico de Barras Apiladas de Costos Operativos por Ruta
ggplot(df, aes(x = Ruta, y = Costos_Operativos, fill = Ruta)) +
geom_bar(stat = "identity", alpha = 0.7) +
labs(title = "Costos Operativos Totales por Ruta", x = "Ruta", y = "Costo Operativo Total")
““” # 1. Histograma de KM_Recorridos:
Interpretación: La mayoría de los recorridos se encuentran entre 2000 y 4000 km, lo que indica que la operación logística se centra en trayectos de esta longitud. Sin embargo, también hay valores por debajo de 1000 km y por encima de 4500 km, lo que sugiere que existen rutas más cortas y más largas, posiblemente debido a la ubicación de los centros de distribución.
Interpretación: Se observa que las Rutas Este y Norte tienen la mayor dispersión en costos, con algunos valores atípicos elevados. Esto puede deberse a factores como peajes, combustible o eficiencia en la planificación de los viajes. También se nota que la mediana de costos es más alta en la Ruta Este, lo que indica que en promedio es más costosa que las demás.
Interpretación: La Ruta Oeste es la más utilizada en comparación con las demás, lo que sugiere que tiene mayor demanda. En cambio, la Ruta Norte es la menos transitada, lo que podría significar que hay menos clientes en esa zona o que se utilizan otras estrategias de transporte para cubrir esa región.
Interpretación: Permite visualizar mejor la distribución sin depender de intervalos fijos, mostrando que la mayor parte de los viajes se concentran en una distancia específica. La curva suavizada sugiere que hay una mayor cantidad de viajes en un rango intermedio de kilometraje, con menos variabilidad en comparación con los datos más extremos.
Interpretación: Se observa una correlación positiva entre kilómetros recorridos y costos operativos. A mayor distancia, el costo tiende a aumentar, lo cual es esperable debido a los mayores gastos en combustible, mantenimiento y tiempos de conducción. Sin embargo, algunos puntos se alejan de esta tendencia, lo que podría indicar ineficiencias en ciertas rutas.
Interpretación: Se confirma que la Ruta Sur acumula los costos más altos en comparación con las demás rutas. Esto puede ser resultado de una mayor cantidad de viajes o de un costo promedio por viaje más alto. Este gráfico es útil para analizar en qué rutas se concentran los mayores gastos y determinar estrategias de optimización. ““”
# 1. Intervalo de confianza para la Media del Tiempo de Entrega
t.test(df$Tiempo_Entrega_Horas, conf.level = 0.95)
##
## One Sample t-test
##
## data: df$Tiempo_Entrega_Horas
## t = 17.154, df = 99, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 22.58758 28.49642
## sample estimates:
## mean of x
## 25.542
# 2. Estimación de una proporción y su intervalo de confianza
n_entregas <- length(df$Tiempo_Entrega_Horas)
x_bar <- mean(df$Tiempo_Entrega_Horas)
sd_tiempo <- sd(df$Tiempo_Entrega_Horas)
error_margin <- qt(0.975, df = n_entregas - 1) * sd_tiempo / sqrt(n_entregas)
IC_tiempo_entrega <- c(x_bar - error_margin, x_bar + error_margin)
IC_tiempo_entrega
## [1] 22.58758 28.49642
# 3. Estimacion para la Varianza
var_test <- var(df$Costos_Operativos, na.rm = TRUE)
n <- sum(!is.na(df$Costos_Operativos))
chi_sq_lower <- qchisq(0.025, df = n-1)
chi_sq_upper <- qchisq(0.975, df = n-1)
IC_varianza <- c((n - 1) * var_test / chi_sq_upper, (n - 1) * var_test / chi_sq_lower)
IC_varianza
## [1] 25365795 44404006
# 4. Diferencia de Medias del Tiempo de Entrega entre Rutas
t.test(df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Norte"],
df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Sur"],
var.equal = TRUE)
##
## Two Sample t-test
##
## data: df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Norte"] and df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Sur"]
## t = -0.48612, df = 48, p-value = 0.6291
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10.70052 6.53369
## sample estimates:
## mean of x mean of y
## 25.24762 27.33103
# 5. Diferencia de proporciónes del Tiempo de Entrega entre Rutas
media_norte <- mean(df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Norte"], na.rm = TRUE)
media_sur <- mean(df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Sur"], na.rm = TRUE)
diff_medias <- media_norte - media_sur
diff_medias
## [1] -2.083415
# 6. Razón de Varianzas
var_ratio <- var.test(df$KM_Recorridos[df$Ruta == "Ruta Norte"],
df$KM_Recorridos[df$Ruta == "Ruta Sur"])
var_ratio
##
## F test to compare two variances
##
## data: df$KM_Recorridos[df$Ruta == "Ruta Norte"] and df$KM_Recorridos[df$Ruta == "Ruta Sur"]
## F = 1.0616, num df = 20, denom df = 28, p-value = 0.8681
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.4755187 2.5112854
## sample estimates:
## ratio of variances
## 1.061553
““” # 1. Intervalo de Confianza para la Media de Tiempo_Entrega_Horas:
Resultado: El intervalo obtenido fue [22.58, 28.49] horas.
Interpretación: Esto significa que, con un 95% de confianza, podemos afirmar que el tiempo promedio de entrega se encuentra dentro de este rango. Este resultado es útil para la planificación logística, ya que establece un marco de referencia confiable para programar las entregas y gestionar los recursos de manera eficiente.
Resultado: El intervalo obtenido fue [25,365,795 - 44,404,006].
Interpretación: La varianza en los costos operativos es considerablemente alta, lo que sugiere fluctuaciones significativas en los costos de las rutas. Esto puede indicar ineficiencias en algunos trayectos, costos imprevistos o diferencias en la gestión de las entregas entre rutas.
Valor p obtenido: 0.6291 (mayor a 0.05, no significativo).
Interpretación: No se encontraron diferencias estadísticamente significativas en los tiempos de entrega entre la Ruta Norte y la Ruta Sur. Esto indica que, en promedio, ambas rutas presentan tiempos de entrega similares, lo que sugiere que la eficiencia en la gestión de las entregas es consistente entre estas rutas.
Diferencia obtenida: -2.08 horas.
Interpretación: Aunque la Ruta Sur tiene un tiempo de entrega promedio 2.08 horas mayor que la Ruta Norte, esta diferencia no es estadísticamente significativa. Sin embargo, en términos operativos, puede ser relevante si la empresa busca reducir tiempos de entrega. Se recomienda evaluar factores externos como congestión vial o demoras en la carga y descarga.
Resultado: F = 1.0616, p-valor = 0.8681.
Interpretación: Al no haber diferencias significativas en la varianza de los tiempos de entrega entre rutas, podemos concluir que ambas presentan niveles similares de variabilidad. Esto es positivo, ya que sugiere estabilidad en la operación logística, sin grandes fluctuaciones en los tiempos de entrega.
# Ho: El tiempo de entrega promedio es igual a 24 horas.
# Ha: El tiempo de entrega promedio es diferente de 24 horas.
# Nivel de significancia = 0.05
t.test(df$Tiempo_Entrega_Horas, mu = 24, conf.level = 0.95)
##
## One Sample t-test
##
## data: df$Tiempo_Entrega_Horas
## t = 1.0356, df = 99, p-value = 0.3029
## alternative hypothesis: true mean is not equal to 24
## 95 percent confidence interval:
## 22.58758 28.49642
## sample estimates:
## mean of x
## 25.542
Esta prueba busca determinar si el tiempo promedio de entrega es distinto a 24 horas. Al aplicar el test de t-student: - Si el p-valor > 0.05, no se rechaza la hipótesis nula, lo que indica que el tiempo promedio de entrega no es significativamente diferente de 24 horas. - El intervalo de confianza nos muestra los valores dentro de los cuales se espera que esté la media poblacional verdadera con un 95% de certeza.
Conclusión: Los resultados indican que el tiempo promedio de entrega se encuentra dentro del intervalo esperado. Esto implica que el sistema logístico mantiene una estabilidad aceptable en los tiempos de entrega, sin desviaciones críticas. Esta información puede usarse para planificación de rutas y cumplimiento de promesas de entrega a clientes.
# Queremos evaluar si la proporción de entregas en la "Ruta Norte" es igual a 0.25 (25%).
# Crear variable binaria: 1 si es "Ruta Norte", 0 en caso contrario
df$Ruta_Norte <- ifelse(df$Ruta == "Ruta Norte", 1, 0)
prop.test(sum(df$Ruta_Norte),
length(df$Ruta_Norte),
p = 0.25,
conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(df$Ruta_Norte) out of length(df$Ruta_Norte), null probability 0.25
## X-squared = 0.65333, df = 1, p-value = 0.4189
## alternative hypothesis: true p is not equal to 0.25
## 95 percent confidence interval:
## 0.1375032 0.3052597
## sample estimates:
## p
## 0.21
Esta prueba contrasta si la proporción de entregas realizadas en la “Ruta Norte” es diferente al 25% esperado. - Si el p-valor > 0.05, se acepta que la proporción de entregas está dentro del rango considerado como esperado.
Conclusión: La proporción de entregas en la Ruta Norte está alineada con las expectativas logísticas establecidas por la organización. Esto puede sugerir que la demanda o distribución de carga en esa ruta está bien balanceada y no se requiere redistribuir recursos o modificar frecuencias.
# Queremos comparar la varianza de costos operativos con 30,000,000
n <- sum(!is.na(df$Costos_Operativos))
varianza_muestral <- var(df$Costos_Operativos)
valor_referencia <- 30000000
# Estadístico de prueba
chi_sq <- (n - 1) * varianza_muestral / valor_referencia
# Intervalo de confianza para la varianza
chi_sq_lower <- qchisq(0.025, df = n-1)
chi_sq_upper <- qchisq(0.975, df = n-1)
IC_varianza <- c((n - 1) * varianza_muestral / chi_sq_upper, (n - 1) * varianza_muestral / chi_sq_lower)
list(Chi_Cuadrado = chi_sq, Intervalo_Confianza_Varianza = IC_varianza)
## $Chi_Cuadrado
## [1] 108.5842
##
## $Intervalo_Confianza_Varianza
## [1] 25365795 44404006
Esta prueba evalúa si la varianza observada de los costos operativos es diferente a un valor de referencia (30 millones). Si este valor cae dentro del intervalo de confianza, no se considera significativamente distinto.
Conclusión: La varianza observada no difiere significativamente del valor esperado. Esto sugiere que la dispersión en los costos operativos está dentro de un rango controlado y planificado, lo cual es crucial para mantener la eficiencia presupuestaria y evitar desviaciones financieras imprevistas.
# Comparar Tiempo de Entrega entre Ruta Norte y Ruta Sur
t.test(df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Norte"],
df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Sur"],
var.equal = TRUE)
##
## Two Sample t-test
##
## data: df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Norte"] and df$Tiempo_Entrega_Horas[df$Ruta == "Ruta Sur"]
## t = -0.48612, df = 48, p-value = 0.6291
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10.70052 6.53369
## sample estimates:
## mean of x mean of y
## 25.24762 27.33103
Se busca determinar si el tiempo promedio de entrega entre las dos rutas difiere significativamente.
Conclusión: El resultado muestra que no hay una diferencia significativa en los tiempos de entrega entre la Ruta Norte y la Ruta Sur. Aunque hay una diferencia promedio de -2.08 horas, esta no es estadísticamente relevante. Esto indica un buen nivel de consistencia entre rutas, lo cual es positivo para el cumplimiento de tiempos de entrega estandarizados y percepción de servicio equitativo.
# Comparar proporciones de entregas entre Ruta Norte y Ruta Sur
n_norte <- sum(df$Ruta == "Ruta Norte")
n_sur <- sum(df$Ruta == "Ruta Sur")
prop.test(c(n_norte, n_sur),
c(n_norte + n_sur, n_norte + n_sur),
conf.level = 0.95)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(n_norte, n_sur) out of c(n_norte + n_sur, n_norte + n_sur)
## X-squared = 1.96, df = 1, p-value = 0.1615
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.37347138 0.05347138
## sample estimates:
## prop 1 prop 2
## 0.42 0.58
Esta prueba analiza si hay diferencia significativa en la cantidad relativa de entregas entre dos rutas.
Conclusión: No se observa diferencia significativa en las proporciones de entregas entre la Ruta Norte y la Ruta Sur. Esto implica una distribución relativamente uniforme en la asignación de entregas, lo cual podría reflejar una buena planeación de cobertura territorial o una demanda similar en ambas zonas. Aunque en los datos observamos que hay más entregas por la Ruta Sur, esta diferencia puede deberse al azar o a una ligera variabilidad operativa. No se justifica modificar la planificación de rutas basándose únicamente en esta diferencia.
# Comparar varianza de KM recorridos entre Ruta Norte y Ruta Sur
var.test(df$KM_Recorridos[df$Ruta == "Ruta Norte"],
df$KM_Recorridos[df$Ruta == "Ruta Sur"])
##
## F test to compare two variances
##
## data: df$KM_Recorridos[df$Ruta == "Ruta Norte"] and df$KM_Recorridos[df$Ruta == "Ruta Sur"]
## F = 1.0616, num df = 20, denom df = 28, p-value = 0.8681
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.4755187 2.5112854
## sample estimates:
## ratio of variances
## 1.061553
El objetivo es verificar si la variabilidad en los KM recorridos difiere significativamente entre las rutas.
Conclusión: Dado que el valor p es muy alto (por ejemplo, 0.86), se concluye que las varianzas son similares. Esto significa que ambas rutas presentan niveles comparables de variabilidad en las distancias recorridas. En la práctica, esto es positivo porque indica que no hay una ruta con comportamientos extremos o inesperados en términos de kilometraje, lo que facilita la estandarización de recursos logísticos como combustible, mantenimiento y tiempos de entrega. Desde la perspectiva operativa, esto es positivo. Tener niveles similares de dispersión en la distancia recorrida indica que la carga logística entre las rutas está equilibrada. No se presentan rutas con trayectos inesperadamente largos o cortos de manera sistemática. En resumen, en todas las pruebas realizadas no se rechazaron las hipótesis nulas. Esto nos indica que los promedios, proporciones y varianzas observadas en la muestra son consistentes con los valores esperados.