1 Instrucciones

  • Duración: 2 horas. Trabajo en parejas.
  • Ejecute cada bloque de código en orden (botón ▶ verde o Ctrl + Shift + Enter).
  • Donde diga Respuesta:, escriba su interpretación con sus palabras y en el contexto del problema.
  • Entrega: al final, presione Knit y suba el archivo .html generado. Si el documento no compila, no se puede corregir.
  • Solo se usa R base; no necesita instalar paquetes.

Nombre(s): ______________________________________

2 Contexto del problema

La empresa Envasadora del Valle llena botellas de jugo con un contenido nominal de 500 ml. Un cliente mayorista reclama que las botellas vienen con menos producto. La jefatura de calidad le encarga a usted analizar una muestra de la producción.

La planta tiene dos máquinas llenadoras (A y B). Además, inspección visual registra si cada botella sale defectuosa (etiqueta mal puesta, tapa suelta, etc.).

El siguiente bloque genera los datos de la muestra. No lo modifique: set.seed() hace que todos obtengan exactamente los mismos números.

set.seed(2026)
maquina_A <- round(rnorm(30, mean = 498.6, sd = 4.0), 1)
maquina_B <- round(rnorm(35, mean = 501.2, sd = 3.0), 1)

llenado <- data.frame(
  ml      = c(maquina_A, maquina_B),
  maquina = factor(c(rep("A", 30), rep("B", 35)))
)
head(llenado)
#>      ml maquina
#> 1 500.7       A
#> 2 494.3       A
#> 3 499.2       A
#> 4 498.3       A
#> 5 495.9       A
#> 6 488.5       A
str(llenado)
#> 'data.frame':    65 obs. of  2 variables:
#>  $ ml     : num  501 494 499 498 496 ...
#>  $ maquina: Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...

3 Repaso rápido: ¿qué es un intervalo de confianza?

Piense en un pescador que lanza una red a un lago donde hay un pez quieto (el parámetro \(\mu\), que nadie ve). Cada muestra es un lanzamiento; cada intervalo es la red. Una red de “95%” no significa que esta red tenga 95% de probabilidad de atrapar al pez: significa que el método atrapa al pez en el 95% de los lanzamientos.

Comprobémoslo simulando 100 muestras de un proceso donde sí sabemos que \(\mu = 500\):

set.seed(1)
mu_real <- 500
n_rep   <- 100
li <- ls <- numeric(n_rep)

for (i in 1:n_rep) {
  m  <- rnorm(25, mean = mu_real, sd = 4)
  ic <- t.test(m, conf.level = 0.95)$conf.int
  li[i] <- ic[1]; ls[i] <- ic[2]
}

atrapa <- li <= mu_real & ls >= mu_real
cat("Intervalos que contienen a mu:", sum(atrapa), "de", n_rep, "\n")
#> Intervalos que contienen a mu: 96 de 100
plot(NULL, xlim = range(c(li, ls)), ylim = c(1, n_rep),
     xlab = "ml", ylab = "Muestra", main = "100 intervalos de confianza al 95%")
segments(li, 1:n_rep, ls, 1:n_rep, col = ifelse(atrapa, "grey40", "red"), lwd = 2)
abline(v = mu_real, col = "blue", lwd = 2, lty = 2)

Pregunta 1. ¿Cuántos intervalos no contienen a \(\mu = 500\) (en rojo)? ¿Es coherente con un 95% de confianza?

Respuesta:

4 Exploración de los datos

Antes de cualquier prueba, mire los datos.

summary(llenado$ml)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   488.4   497.7   499.5   499.6   501.7   506.2
tapply(llenado$ml, llenado$maquina, mean)
#>        A        B 
#> 498.3167 500.6257
tapply(llenado$ml, llenado$maquina, sd)
#>        A        B 
#> 4.388157 2.304387
boxplot(ml ~ maquina, data = llenado, col = c("#9ecae1", "#fdae6b"),
        ylab = "Contenido (ml)", main = "Llenado por máquina")
abline(h = 500, lty = 2, col = "red")

Pregunta 2. A simple vista, ¿alguna máquina parece llenar bajo los 500 ml? ¿Cuál tiene mayor variabilidad?

Respuesta:

5 Intervalo de confianza para la media

Trabajaremos con todas las botellas (\(n = 65\)). Como \(\sigma\) es desconocida, usamos la distribución \(t\) de Student:

\[ \bar{x} \pm t_{\alpha/2,\; n-1}\cdot \frac{s}{\sqrt{n}} \]

5.1 Cálculo paso a paso

x     <- llenado$ml
n     <- length(x)
media <- mean(x)
s     <- sd(x)
t_crit <- qt(0.975, df = n - 1)     # 95% -> deja 2,5% en cada cola
error  <- t_crit * s / sqrt(n)

c(media = media, s = s, t_crit = t_crit, error = error)
#>       media           s      t_crit       error 
#> 499.5600000   3.5905605   1.9977297   0.8896973
c(limite_inf = media - error, limite_sup = media + error)
#> limite_inf limite_sup 
#>   498.6703   500.4497

5.2 Con la función t.test()

t.test(x, conf.level = 0.95)$conf.int
#> [1] 498.6703 500.4497
#> attr(,"conf.level")
#> [1] 0.95

Ambos resultados deben coincidir.

Pregunta 3. Interprete el intervalo en el contexto de la empresa. ¿Incluye el valor 500?

Respuesta:

Pregunta 4. Cambie conf.level a 0.99. ¿El intervalo se hace más ancho o más angosto? ¿Por qué?

t.test(x, conf.level = 0.99)$conf.int
#> [1] 498.3776 500.7424
#> attr(,"conf.level")
#> [1] 0.99

Respuesta:

6 Prueba de hipótesis para una media

El reclamo del cliente es sobre la máquina A. Siga siempre los cinco pasos:

  1. Hipótesis. El cliente sostiene que se llena de menos: \(H_0:\ \mu_A = 500 \qquad H_1:\ \mu_A < 500\)
  2. Nivel de significancia: \(\alpha = 0{,}05\).
  3. Estadístico de prueba: \(t = \dfrac{\bar{x} - \mu_0}{s/\sqrt{n}}\), con \(n-1\) grados de libertad.
  4. Valor-p y decisión: si valor-p \(< \alpha\), se rechaza \(H_0\).
  5. Conclusión en el contexto del problema.

6.1 Paso a paso

xA <- maquina_A
t_obs <- (mean(xA) - 500) / (sd(xA) / sqrt(length(xA)))
p_val <- pt(t_obs, df = length(xA) - 1)   # cola izquierda
c(t_observado = t_obs, valor_p = p_val)
#> t_observado     valor_p 
#> -2.10110918  0.02221855

6.2 Con t.test()

t.test(xA, mu = 500, alternative = "less")
#> 
#>  One Sample t-test
#> 
#> data:  xA
#> t = -2.1011, df = 29, p-value = 0.02222
#> alternative hypothesis: true mean is less than 500
#> 95 percent confidence interval:
#>      -Inf 499.6779
#> sample estimates:
#> mean of x 
#>  498.3167

El argumento alternative debe calzar con \(H_1\): "less" (\(<\)), "greater" (\(>\)) o "two.sided" (\(\neq\)).

Pregunta 5. Con \(\alpha = 0{,}05\), ¿se rechaza \(H_0\)? Redacte la conclusión para la jefatura de calidad (sin usar la palabra “hipótesis”).

Respuesta:

Pregunta 6. Repita la prueba para la máquina B. ¿Llega a la misma conclusión?

# Escriba aquí su código

Respuesta:

7 Comparación de dos medias

¿Las dos máquinas llenan, en promedio, lo mismo?

\[ H_0:\ \mu_A = \mu_B \qquad H_1:\ \mu_A \neq \mu_B \]

Usamos la prueba \(t\) de Welch, que no supone varianzas iguales (es la opción por defecto en R).

t.test(ml ~ maquina, data = llenado)
#> 
#>  Welch Two Sample t-test
#> 
#> data:  ml by maquina
#> t = -2.592, df = 42.314, p-value = 0.01304
#> alternative hypothesis: true difference in means between group A and group B is not equal to 0
#> 95 percent confidence interval:
#>  -4.1064275 -0.5116677
#> sample estimates:
#> mean in group A mean in group B 
#>        498.3167        500.6257

Pregunta 7. ¿Hay diferencia significativa entre máquinas? Interprete el intervalo de confianza para \(\mu_A - \mu_B\): ¿qué significa que no contenga (o contenga) el 0?

Respuesta:

8 Inferencia para una proporción

De la producción del día se inspeccionaron 400 botellas y 18 resultaron defectuosas. El contrato con el cliente exige que la proporción de defectuosas no supere el 3%.

\[ H_0:\ p = 0{,}03 \qquad H_1:\ p > 0{,}03 \]

8.1 Paso a paso (aproximación normal)

\[ z = \frac{\hat{p} - p_0}{\sqrt{p_0(1-p_0)/n}} \]

n_insp <- 400
defect <- 18
p_hat  <- defect / n_insp
p0     <- 0.03

z_obs <- (p_hat - p0) / sqrt(p0 * (1 - p0) / n_insp)
p_val <- 1 - pnorm(z_obs)          # cola derecha
c(p_hat = p_hat, z = z_obs, valor_p = p_val)
#>      p_hat          z    valor_p 
#> 0.04500000 1.75863115 0.03932009

Verificación de supuestos: se requiere \(n p_0 \geq 5\) y \(n(1-p_0) \geq 5\).

c(n_p0 = n_insp * p0, n_1menos_p0 = n_insp * (1 - p0))
#>        n_p0 n_1menos_p0 
#>          12         388

8.2 Con prop.test()

prop.test(x = defect, n = n_insp, p = p0, alternative = "greater", correct = FALSE)
#> 
#>  1-sample proportions test without continuity correction
#> 
#> data:  defect out of n_insp, null probability p0
#> X-squared = 3.0928, df = 1, p-value = 0.03932
#> alternative hypothesis: true p is greater than 0.03
#> 95 percent confidence interval:
#>  0.03079222 1.00000000
#> sample estimates:
#>     p 
#> 0.045

prop.test() entrega el estadístico \(\chi^2 = z^2\). Compruebe: z_obs^2. Para muestras pequeñas use la prueba exacta binom.test(defect, n_insp, p = p0, alternative = "greater").

Pregunta 8. ¿Hay evidencia de que la empresa incumple el contrato? ¿Qué le recomendaría a la jefatura?

Respuesta:

9 Ejercicios para entregar

E1. Construya un intervalo de confianza al 90% para el contenido medio de la máquina B. Interprételo.

Respuesta:

E2. Una auditora afirma que la máquina B llena más de 500 ml (sobrellenado, que cuesta dinero). Plantee las hipótesis y realice la prueba con \(\alpha = 0{,}05\).

Respuesta:

E3. Calcule a mano (con mean, sd, qt) el intervalo al 95% para la máquina A y verifique con t.test().

E4. Construya un intervalo de confianza al 95% para la proporción de defectuosas. ¿Incluye el 3%? Relacione su respuesta con la Pregunta 8.

Respuesta:

E5 (desafío). ¿Cuántas botellas defectuosas, de 400, harían falta como mínimo para rechazar \(H_0:\ p = 0{,}03\) con \(\alpha = 0{,}05\)? Pista: pruebe varios valores en un ciclo for o con sapply().

Respuesta:

10 Resumen de funciones

Objetivo Función en R
Valor crítico \(t\) qt(1 - alfa/2, df = n - 1)
Valor crítico \(z\) qnorm(1 - alfa/2)
Probabilidad acumulada \(t\) / \(z\) pt(t, df) / pnorm(z)
IC y prueba para una media t.test(x, mu = , alternative = , conf.level = )
Comparar dos medias t.test(y ~ grupo, data = )
IC y prueba para una proporción prop.test(x, n, p = , alternative = , correct = FALSE)
Prueba exacta de proporción binom.test(x, n, p = )