1 Resumen

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.


2 Introducción

2.1 Distribución Normal

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.

2.2 Distribución Binomial

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).

2.3 Lenguaje R

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.

2.4 RStudio / R Markdown

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.


3 Desarrollo

3.1 Librerías

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.

library(readxl)   # lectura de archivos Excel
library(knitr)    # tablas formateadas en el informe

3.2 Carga de Datos

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
getwd()
## [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

3.3 Operaciones

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.

3.3.1 Base de datos de 50 paquetes

cat("Dimensiones (filas x columnas):", dim(df1), "\n")
## 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"
)
Tabla 2a: Estadísticas descriptivas – lote 50 paquetes
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
P1 <- mean(df1$danado) * 100
cat(sprintf("Porcentaje de paquetes dañados (n=50): %.2f%%\n", P1))
## Porcentaje de paquetes dañados (n=50): 2.00%

3.3.2 Base de datos de 2000 paquetes

cat("Dimensiones (filas x columnas):", dim(df2), "\n")
## 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"
)
Tabla 2b: Estadísticas descriptivas – lote 2000 paquetes
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
P2 <- mean(df2$danado) * 100
cat(sprintf("Porcentaje de paquetes dañados (n=2000): %.2f%%\n", P2))
## 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)   # 2000

3.4 Gráficos

Se 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)

3.4.1 Figura 2: Distribución Binomial para n = 50, p = 0.02

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

Figura 2: Distribución Binomial para n=50, p=0.02

3.4.2 Figura 3: Distribución Binomial para n = 2000, 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

Figura 3: Distribución Binomial para n=2000, p=0.02


3.5 Pruebas

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.

3.5.1 a) P(X = 2) exactamente dañados en lote de 50

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.

3.5.2 b) P(X ≥ 2) dos o más dañados en lote de 50

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.

3.5.3 c) Aproximación normal para P(X = 30) en lote de 2000

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).

mu    <- n2 * p2
sigma <- sqrt(n2 * p2 * (1 - p2))
cat(sprintf("µ = %.4f   |   σ = %.4f\n", mu, sigma))
## µ = 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.

3.5.4 d) Probabilidad exacta binomial P(X = 30) en lote de 2000

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.

3.5.5 Comparación de métodos

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"
)
Tabla 3: Comparación entre aproximación normal y binomial exacta para P(X=30), n=2000
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.


3.6 Pruebas 2: Tipificación

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
cat(sprintf("Desv. estándar original:     %.4f\n", sigma_v))
## Desv. estándar original:     9.8753
cat(sprintf("Media tipificada  (≈ 0):     %.6f\n", mean(tipificados)))
## Media tipificada  (≈ 0):     -0.000000
cat(sprintf("Desv. estándar tip. (≈ 1):   %.6f\n", sd(tipificados)))
## Desv. estándar tip. (≈ 1):   1.000000

3.6.1 Figura 4: Distribución Normal de los Valores Originales

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

Figura 4: Distribución Normal de los Valores Originales

3.6.2 Figura 5: Distribución Tipificada de los Valores

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

Figura 5: Distribución Tipificada de los Valores

3.6.3 Ejemplo de cálculo tipificado

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
cat(sprintf("Z-score:                            %.4f\n",    z_score))
## Z-score:                            0.0458
cat(sprintf("P(X <= %.0f) distribución original: %.4f\n",   dato, prob_orig))
## P(X <= 50) distribución original: 0.5183
cat(sprintf("P(Z <= %.4f) distribución tipif.:  %.4f\n",    z_score, prob_tip))
## P(Z <= 0.0458) distribución tipif.:  0.5183

4 Conclusión

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.


5 Bibliografía

  1. QuestionPro. Campana de Gauss: qué es, características y ejemplo. https://www.questionpro.com/blog/es/campana-de-gauss-que-es-caracteristicas-y-ejemplo

  2. Economipedia. Distribución binomial. https://economipedia.com/definiciones/distribucion-binomial.html

  3. R Project. The R Project for Statistical Computing. https://www.r-project.org/

  4. RStudio. R Markdown: The Definitive Guide. https://rmarkdown.rstudio.com/