Este trabajo de investigación tiene como objetivo analizar y comparar las probabilidades asociadas a los defectos en lotes de paquetes, utilizando una distribución normal como modelo inicial. Se emplean dos bases de datos, de 50 y 2000 paquetes enviados, para estudiar la probabilidad de defectos bajo diferentes condiciones. El análisis se centra en la transformación de la distribución normal a una binomial, evaluando la probabilidad de defectos en lotes específicos y utilizando la aproximación normal para lotes de 2000 paquetes. La visualización de la distribución normal y sus probabilidades se realiza mediante gráficos de curva, facilitando una mayor comprensión de los resultados obtenidos.
Entre los resultados puntuales, se determinó que la probabilidad de que exactamente 2 envíos estén dañados en un lote de 50 es de 0.1858, mientras que la probabilidad de 2 o más defectos en el mismo lote es de 0.2642. Para el lote de 2000 paquetes, la probabilidad de exactamente 30 defectos usando la aproximación normal resultó en 0.0178, y sin aproximación, mediante la distribución binomial exacta, fue de 0.0181, mostrando una estrecha similitud entre ambos métodos.
La distribución normal, también conocida como curva de Gauss, es un modelo estadístico fundamental que describe la variación de datos en torno a una media en forma de campana. Es ampliamente utilizada en estadísticas, ciencias naturales y sociales debido a su capacidad para modelar fenómenos aleatorios con simetría y dispersión predecible. Caracterizada por su media y desviación estándar, permite calcular probabilidades y realizar inferencias mediante herramientas como tablas de puntajes z o software especializado, como R o Excel.
La distribución binomial es un modelo probabilístico que describe el número de éxitos en una serie fija de ensayos independientes, cada uno con solo dos posibles resultados: éxito o fracaso, bajo una probabilidad constante de éxito. Comúnmente empleada en estadísticas para analizar experimentos como pruebas de calidad o encuestas, se define por los parámetros n (número de ensayos) y p (probabilidad de éxito).
R es un lenguaje de programación de alto nivel orientado al análisis estadístico y la visualización de datos. Ampliamente utilizado en ciencia de datos, estadística y aprendizaje automático, ofrece una gran variedad de paquetes especializados que permiten realizar cálculos, simulaciones y visualizaciones de manera eficiente. Su comunidad global y abundante documentación lo convierten en una herramienta accesible para usuarios de todos los niveles.
R Markdown es un formato de documento que integra código R, texto narrativo, gráficos y resultados en un único archivo reproducible. Permite generar informes en HTML, PDF o Word de forma automática, asegurando que los cálculos y las visualizaciones estén siempre actualizados con los datos más recientes.
Para analizar las distribuciones normal y binomial en el contexto de
defectos en lotes de paquetes, se utilizaron las siguientes herramientas
de R. Las funciones estadísticas (dbinom,
pbinom, pnorm, dnorm) son nativas
de R base. El paquete readxl se emplea para la importación
de archivos Excel, y knitr para la presentación de
tablas.
Se cargaron dos planillas en R utilizando la función
read_excel(). Los datos contienen información sobre el
estado (dañado o no) de cada paquete en los lotes de 50 y 2000 envíos.
Adicionalmente se carga un CSV con datos de distribución normal para la
sección de tipificación.
Nota: reemplazá los nombres entre comillas de
get()por los nombres exactos que aparecen en tu panel Environment de RStudio, o usáread_excel(file.choose())para seleccionar cada archivo manualmente.
# --- Usando objetos ya importados en el Environment ---
df1 <- read_xlsx("/Users/agusbain/Desktop/UCU/tarea_2_normal_R/tarea 2/binomial50.xlsx")
df2 <- read_xlsx("/Users/agusbain/Desktop/UCU/tarea_2_normal_R/tarea 2/binomial2000.xlsx")
file.exists("/Users/agusbain/Desktop/UCU/tarea_2_normal_R/dn.csv")## [1] FALSE
## [1] "/Users/agusbain/Downloads"
df_normal <- read.csv2("dn.csv")
# Renombramos para evitar problemas con la ñ en "dañado"
names(df1) <- c("paquete", "danado")
names(df2) <- c("paquete", "danado")Tabla 1: Primeras filas del conjunto de datos (lote de 50 paquetes)
kable(head(df1, 5), col.names = c("Concepto", "Paquete", "Dañado")[c(FALSE,TRUE,TRUE)],
align = "c")| Paquete | Dañado |
|---|---|
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
En esta sección se realiza un análisis detallado de ambos conjuntos de datos: verificación de dimensiones, inspección de primeras entradas, estadísticas descriptivas y cálculo del porcentaje de paquetes dañados.
## Dimensiones (filas x columnas): 50 2
kable(
data.frame(
Estadístico = c("Count", "Media", "Desv. Est.", "Mín.", "Q1", "Mediana", "Q3", "Máx."),
Paquete = c(nrow(df1), round(mean(df1$paquete),2), round(sd(df1$paquete),2),
min(df1$paquete), quantile(df1$paquete,.25),
median(df1$paquete), quantile(df1$paquete,.75), max(df1$paquete)),
Dañado = c(nrow(df1), round(mean(df1$danado),4), round(sd(df1$danado),4),
min(df1$danado), quantile(df1$danado,.25),
median(df1$danado), quantile(df1$danado,.75), max(df1$danado))
),
caption = "Tabla 2a: Estadísticas descriptivas – lote 50 paquetes",
align = "c"
)| Estadístico | Paquete | Dañado |
|---|---|---|
| Count | 50.00 | 50.0000 |
| Media | 25.50 | 0.0200 |
| Desv. Est. | 14.58 | 0.1414 |
| Mín. | 1.00 | 0.0000 |
| Q1 | 13.25 | 0.0000 |
| Mediana | 25.50 | 0.0000 |
| Q3 | 37.75 | 0.0000 |
| Máx. | 50.00 | 1.0000 |
## Porcentaje de paquetes dañados (n=50): 2.00%
## Dimensiones (filas x columnas): 2000 2
kable(
data.frame(
Estadístico = c("Count", "Media", "Desv. Est.", "Mín.", "Q1", "Mediana", "Q3", "Máx."),
Paquete = c(nrow(df2), round(mean(df2$paquete),2), round(sd(df2$paquete),2),
min(df2$paquete), quantile(df2$paquete,.25),
median(df2$paquete), quantile(df2$paquete,.75), max(df2$paquete)),
Dañado = c(nrow(df2), round(mean(df2$danado),4), round(sd(df2$danado),4),
min(df2$danado), quantile(df2$danado,.25),
median(df2$danado), quantile(df2$danado,.75), max(df2$danado))
),
caption = "Tabla 2b: Estadísticas descriptivas – lote 2000 paquetes",
align = "c"
)| Estadístico | Paquete | Dañado |
|---|---|---|
| Count | 2000.00 | 2000.00 |
| Media | 1000.50 | 0.02 |
| Desv. Est. | 577.49 | 0.14 |
| Mín. | 1.00 | 0.00 |
| Q1 | 500.75 | 0.00 |
| Mediana | 1000.50 | 0.00 |
| Q3 | 1500.25 | 0.00 |
| Máx. | 2000.00 | 1.00 |
## Porcentaje de paquetes dañados (n=2000): 2.00%
Los datos revelan que el 2.00% de los paquetes en el lote de 2000 envíos resultaron dañados, con una desviación estándar mínima que indica una distribución relativamente uniforme. El rango de valores entre 0 y 1 confirma que las observaciones se limitan a dos categorías (dañado o no dañado), consolidando la idoneidad de un modelo binomial para este análisis.
# Proporciones y tamaños de lote
p1 <- P1 / 100
p2 <- P2 / 100
n1 <- nrow(df1) # 50
n2 <- nrow(df2) # 2000Se visualizan las distribuciones binomiales para ambos lotes. Los rangos de valores k representan el número posible de paquetes dañados desde 0 hasta el tamaño de cada lote.
k1_values <- 0:n1
k2_values <- 0:n2
binom_n1 <- dbinom(k1_values, size = n1, prob = p1)
binom_n2 <- dbinom(k2_values, size = n2, prob = p2)La distribución binomial para el lote de 50 paquetes muestra una probabilidad máxima cercana a 0.35 para un bajo número de defectos, con una dispersión marcada debido al tamaño reducido de la muestra. Esto indica que los defectos tienden a concentrarse en pocos paquetes, reflejando una variabilidad significativa.
barplot(
height = binom_n1,
names.arg = k1_values,
col = adjustcolor("steelblue", alpha.f = 0.8),
main = sprintf("Distribución Binomial\nn = %d, p = %.2f", n1, p1),
xlab = "Número de paquetes dañados",
ylab = "Probabilidad",
border = NA,
space = 0,
las = 1
)Figura 2: Distribución Binomial para n=50, p=0.02
Para el lote de 2000 paquetes, la distribución binomial presenta una forma más suavizada y simétrica, con una probabilidad máxima alrededor de 0.05 y una concentración de defectos entre 20 y 60 paquetes. Esto sugiere una mayor estabilidad y una tendencia a aproximarse a una distribución normal debido al tamaño de la muestra.
rango2 <- k2_values <= 60
barplot(
height = binom_n2[rango2],
names.arg = k2_values[rango2],
col = adjustcolor("forestgreen", alpha.f = 0.8),
main = sprintf("Distribución Binomial\nn = %d, p = %.4f", n2, p2),
xlab = "Número de paquetes dañados",
ylab = "Probabilidad",
border = NA,
space = 0,
las = 1
)Figura 3: Distribución Binomial para n=2000, p=0.02
En esta sección se responden las preguntas planteadas en el enunciado, aplicando las distribuciones binomial y normal para calcular las probabilidades de defectos en los lotes.
Se calcula la probabilidad puntual usando la función de masa de
probabilidad binomial dbinom(), equivalente a
stats.binom.pmf() en Python.
prob_a <- dbinom(2, size = n1, prob = p1)
cat(sprintf("a) P(X = 2) exactamente dañados en lote de %d: %.4f\n", n1, prob_a))## a) P(X = 2) exactamente dañados en lote de 50: 0.1858
Resultado: La probabilidad de que exactamente 2 envíos lleguen dañados en un lote de 50 paquetes es de 0.1858.
Se emplea la función de distribución acumulada complementaria: P(X ≥ 2) = 1 − P(X ≤ 1).
prob_b <- 1 - pbinom(1, size = n1, prob = p1)
cat(sprintf("b) P(X >= 2) dañados en lote de %d: %.4f\n", n1, prob_b))## b) P(X >= 2) dañados en lote de 50: 0.2642
Resultado: La probabilidad de que 2 o más envíos lleguen dañados en un lote de 50 paquetes es de 0.2642.
Se calcula la media (µ) y desviación estándar (σ) de la distribución binomial y se aplica la corrección de continuidad, evaluando P(29.5 < X < 30.5).
## µ = 40.0000 | σ = 6.2610
prob_c <- pnorm(30.5, mean = mu, sd = sigma) - pnorm(29.5, mean = mu, sd = sigma)
cat(sprintf("c) P(X ≈ 30) con aprox. normal en lote de %d: %.4f\n", n2, prob_c))## c) P(X ≈ 30) con aprox. normal en lote de 2000: 0.0178
Resultado: Usando la aproximación normal con corrección de continuidad, P(X = 30) ≈ 0.0178.
prob_d <- dbinom(30, size = n2, prob = p2)
cat(sprintf("d) P(X = 30) exacta (binomial) en lote de %d: %.4f\n", n2, prob_d))## d) P(X = 30) exacta (binomial) en lote de 2000: 0.0181
Resultado: La probabilidad binomial exacta de que exactamente 30 envíos estén dañados en un lote de 2000 paquetes es 0.0181.
kable(
data.frame(
Método = c("Aproximación Normal (con corrección de continuidad)",
"Distribución Binomial Exacta"),
Probabilidad = c(round(prob_c, 4), round(prob_d, 4)),
Diferencia = c(round(abs(prob_c - prob_d), 6), "—")
),
caption = "Tabla 3: Comparación entre aproximación normal y binomial exacta para P(X=30), n=2000",
align = "c"
)| Método | Probabilidad | Diferencia |
|---|---|---|
| Aproximación Normal (con corrección de continuidad) | 0.0178 | 0.000312 |
| Distribución Binomial Exacta | 0.0181 | — |
La diferencia entre ambos métodos es mínima (3.12^{-4}), lo que valida el uso de la aproximación normal para muestras grandes como n = 2000.
Se aplica una tipificación (estandarización Z) a los datos de distribución normal para escalarlos a media = 0 y desviación estándar = 1. Esto permite comparar datos en diferentes escalas de forma más precisa.
La fórmula de tipificación es:
\[Z = \frac{X - \mu}{\sigma}\]
valores <- as.numeric(df_normal[[1]])
mu_v <- mean(valores)
sigma_v <- sd(valores)
tipificados1 <- (valores - mu_v)
tipificados <- tipificados1/sigma_v
cat(sprintf("Media original: %.4f\n", mu_v))## Media original: 49.5474
## Desv. estándar original: 9.8753
## Media tipificada (≈ 0): -0.000000
## Desv. estándar tip. (≈ 1): 1.000000
El histograma muestra la distribución original de los datos con su curva de densidad normal superpuesta, calculada a partir de la media y desviación estándar del conjunto.
hist(
valores,
freq = FALSE,
col = adjustcolor("forestgreen", alpha.f = 0.7),
border = "white",
main = "Distribución Normal",
xlab = "Valores",
ylab = "Densidad",
las = 1
)
curve(dnorm(x, mean = mu_v, sd = sigma_v),
add = TRUE, col = "black", lwd = 2)Figura 4: Distribución Normal de los Valores Originales
Luego de la tipificación, los datos se centran en 0 con dispersión unitaria, adoptando la forma de la distribución normal estándar N(0,1).
hist(
tipificados,
freq = FALSE,
col = adjustcolor("mediumpurple", alpha.f = 0.7),
border = "white",
main = "Distribución Tipificada",
xlab = "Valores Tipificados",
ylab = "Densidad",
las = 1
)
curve(dnorm(x, mean = 0, sd = 1),
add = TRUE, col = "black", lwd = 2)Figura 5: Distribución Tipificada de los Valores
dato <- 50
z_score <- (dato - mu_v) / sigma_v
prob_orig <- pnorm(dato, mean = mu_v, sd = sigma_v)
prob_tip <- pnorm(z_score)
cat(sprintf("Valor original: %.0f\n", dato))## Valor original: 50
## Z-score: 0.0458
## P(X <= 50) distribución original: 0.5183
## P(Z <= 0.0458) distribución tipif.: 0.5183
A lo largo del caso de estudio se desarrolló un análisis exhaustivo y estructurado de las probabilidades asociadas a los defectos en lotes de 50 y 2000 paquetes, extendiendo el enfoque inicial basado en la distribución normal con una aplicación detallada de la distribución binomial. El proceso comenzó con la carga de dos bases de datos provenientes de archivos Excel, utilizando R y sus herramientas nativas, lo que permitió manejar y procesar los datos de manera eficiente.
La visualización jugó un rol central en el estudio, con la generación de histogramas que representaron las distribuciones binomiales para ambos lotes. El gráfico del lote de 50 paquetes mostró una dispersión notable con una probabilidad máxima cercana al 35%, mientras que el del lote de 2000 paquetes exhibió una forma más suavizada y simétrica, reflejando la tendencia a acercarse a una distribución normal en muestras grandes.
En la fase final se abordaron los objetivos específicos mediante cálculos probabilísticos detallados. La diferencia entre la aproximación normal y la distribución binomial exacta resultó ser de apenas 3.12^{-4}, lo que valida la eficacia de la aproximación en muestras grandes.
Las conclusiones del estudio subrayan que la distribución binomial es adecuada para muestras pequeñas, mientras que la aproximación normal se vuelve más relevante en muestras grandes, como el lote de 2000 paquetes. El uso de R no solo optimizó los cálculos y visualizaciones, sino que también enriqueció la interpretación de los datos, proporcionando una base sólida para la toma de decisiones en el control de calidad.
QuestionPro. Campana de Gauss: qué es, características y ejemplo. https://www.questionpro.com/blog/es/campana-de-gauss-que-es-caracteristicas-y-ejemplo
Economipedia. Distribución binomial. https://economipedia.com/definiciones/distribucion-binomial.html
R Project. The R Project for Statistical Computing. https://www.r-project.org/
RStudio. R Markdown: The Definitive Guide. https://rmarkdown.rstudio.com/