Una empresa metalmecánica produce un producto.
La empresa no tiene inventario de ese producto, sino que se produce cuando llega la orden de compra.
Es lunes a primera hora y un asesor comercial pregunta el tiempo en el que se le puede entregar a un cliente una pieza después de montada la orden de compra.
El área de producción lleva un registro histórico detallado del tiempo requerido para fabricar dicha pieza.
El objetivo consiste en estimar una fecha de entrega utilizando herramientas de estadística descriptiva.
library(ggplot2)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tibble)
library(psych)
##
## Adjuntando el paquete: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
tiempos <- c(
23.39, 6.12, 16.35, 20.41, 9.67, 22.57,
5.37, 18.58, 18.24, 15.05, 7.62, 65.06,
33.48, 16.38, 18.23, 14.43, 4.03, 23.61,
22.69, 5.73, 17.61, 40.39, 21.55, 26.42,
11.70, 18.83, 13.86, 28.83, 21.80, 34.58,
20.33, 18.25, 23.70, 45.54, 28.22, 10.71,
18.60, 19.51, 13.01, 34.86, 18.37, 24.45,
15.67, 17.12, 65.23, 20.30, 5.64, 15.07,
15.46, 16.05, 16.41, 6.49, 16.93, 17.88,
18.55, 15.30, 14.73, 11.04, 10.78, 5.44
)
Inicialmente se calcula el promedio y la desviación estándar para obtener una medida de tendencia central y una medida de dispersión de los tiempos de producción.
promedio <- mean(tiempos)
desviacion <- sd(tiempos)
promedio
## [1] 19.70367
desviacion
## [1] 11.94855
A continuación se construye un gráfico de barras para comparar visualmente el promedio y la desviación estándar de los tiempos de producción.
resumen <- tibble(
Medida = c("Promedio", "Desviación estándar"),
Valor = c(promedio, desviacion)
)
ggplot(resumen,
aes(x = Medida,
y = Valor,
fill = Medida)) +
geom_bar(stat = "identity",
color = "black",
width = 0.5) +
geom_text(aes(label = round(Valor,2)),
vjust = -0.5) +
scale_fill_manual(values = c("gray70","gray40")) +
labs(
title = "Comparación entre el promedio y la desviación estándar",
y = "Horas"
) +
theme_minimal()
Para comprender mejor el comportamiento de los tiempos de producción se construyen un histograma y un diagrama de caja.
par(mfrow = c(1,2))
hist(
tiempos,
breaks = 15,
col = "gray",
border = "black",
main = "Histograma del tiempo de producción",
xlab = "Horas",
ylab = "Frecuencia"
)
boxplot(
tiempos,
col = "gray",
main = "Boxplot del tiempo de producción",
ylab = "Horas"
)
Se calculan medidas de posición y dispersión que permiten describir la distribución de los tiempos observados.
q1 <- quantile(tiempos,0.25)
q2 <- median(tiempos)
q3 <- quantile(tiempos,0.75)
iqr <- q3 - q1
minimo <- min(tiempos)
maximo <- max(tiempos)
rango <- maximo - minimo
cv <- (desviacion/promedio)*100
deciles <- quantile(
tiempos,
probs = seq(0.1,0.9,0.1)
)
tabla_estadisticas <- tibble(
Estadistica = c(
"Minimo",
"Maximo",
"Rango",
"Q1",
"Mediana",
"Q3",
"Rango Intercuartil",
"Promedio",
"Desviacion Estandar",
"Coeficiente de Variacion",
paste0("D",1:9)
),
Valor = c(
minimo,
maximo,
rango,
q1,
q2,
q3,
iqr,
promedio,
desviacion,
cv,
as.numeric(deciles)
)
)
tabla_estadisticas
## # A tibble: 19 × 2
## Estadistica Valor
## <chr> <dbl>
## 1 Minimo 4.03
## 2 Maximo 65.2
## 3 Rango 61.2
## 4 Q1 14.3
## 5 Mediana 18.1
## 6 Q3 22.6
## 7 Rango Intercuartil 8.31
## 8 Promedio 19.7
## 9 Desviacion Estandar 11.9
## 10 Coeficiente de Variacion 60.6
## 11 D1 6.45
## 12 D2 11.6
## 13 D3 15.1
## 14 D4 16.4
## 15 D5 18.1
## 16 D6 18.6
## 17 D7 20.8
## 18 D8 23.6
## 19 D9 33.6
Una primera aproximación consiste en utilizar el tiempo promedio histórico de producción.
fecha_inicio <- as.Date("2025-06-25")
horas_estimadas <- mean(tiempos)
dias_laborales <- ceiling(horas_estimadas/8)
fecha_entrega <- fecha_inicio + dias_laborales
fecha_entrega
## [1] "2025-06-28"
Una segunda aproximación utiliza el promedio más una desviación estándar.
horas_conservadoras <- mean(tiempos) + sd(tiempos)
dias_conservadores <- ceiling(horas_conservadoras/8)
fecha_entrega_conservadora <- fecha_inicio + dias_conservadores
fecha_entrega_conservadora
## [1] "2025-06-29"