Este documento trae ejercicios + plantillas en R para cada caso de las diapositivas:
Z para medias con varianzas conocidas, t con varianzas desconocidas e iguales, t de Welch (desiguales), t pareada, F para varianzas y Z para diferencia de proporciones.
Corré cada chunk con Run en RStudio. Fijamos set.seed(123) para reproducibilidad.

1) Diferencia de medias — varianzas poblacionales conocidas (Z)

Contexto. Una empresa compara el tiempo de armado (minutos) de dos líneas de producción. Se conoce históricamente que la varianza poblacional es \(\sigma_1^2 = 4\) y \(\sigma_2^2 = 9\). Se toman dos muestras independientes.

Datos simulados.

n1 <- 40; n2 <- 35
sigma1 <- 2; sigma2 <- 3   # desvíos conocidos
mu1_true <- 15; mu2_true <- 16
x1 <- rnorm(n1, mu1_true, sigma1)
x2 <- rnorm(n2, mu2_true, sigma2)

xbar1 <- mean(x1); xbar2 <- mean(x2)
xbar1; xbar2
## [1] 15.09037
## [1] 16.01447

Hipótesis (bilateral). \(H_0: \mu_1-\mu_2=0\) vs \(H_1: \mu_1-\mu_2 \ne 0\). Use \(\alpha=0.05\).

Plantilla Z manual y con BSDA::z.test.

alpha <- 0.05
d0 <- 0
z_calc <- ((xbar1 - xbar2) - d0) / sqrt(sigma1^2/n1 + sigma2^2/n2)
p_val <- 2*pnorm(-abs(z_calc))
c(z_calc=z_calc, p_value=p_val)
##     z_calc    p_value 
## -1.5463284  0.1220253
# Con paquete (opcional)
if (!requireNamespace("BSDA", quietly=TRUE)) {
  install.packages("BSDA", repos="https://cloud.r-project.org")
}
BSDA::zsum.test(mean.x=xbar1, sigma.x=sigma1, n.x=n1,
                mean.y=xbar2, sigma.y=sigma2, n.y=n2,
                alternative="two.sided", mu=0, conf.level=0.95)
## 
##  Two-sample z-Test
## 
## data:  Summarized x and y
## z = -1.5463, p-value = 0.122
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -2.0954105  0.2471945
## sample estimates:
## mean of x mean of y 
##  15.09037  16.01447

Consignas. 1. Reporte \(Z_{calc}\), p-value y la conclusión. 2. Calcule un IC del 95% para \(\mu_1-\mu_2\) usando varianzas conocidas. 3. Interprete en términos operativos.

z_crit <- qnorm(1 - alpha/2)
ic_low  <- (xbar1-xbar2) - z_crit*sqrt(sigma1^2/n1 + sigma2^2/n2)
ic_high <- (xbar1-xbar2) + z_crit*sqrt(sigma1^2/n1 + sigma2^2/n2)
c(ic_low=ic_low, ic_high=ic_high)
##     ic_low    ic_high 
## -2.0954105  0.2471945

2) Diferencia de medias — varianzas desconocidas pero iguales (t con varianza pooled)

Contexto. Dos métodos de estudio para un examen. Suponga normalidad y igualdad de varianzas.

n1 <- 25; n2 <- 27
m1 <- 70; m2 <- 75; sd_common <- 10
y1 <- rnorm(n1, m1, sd_common)
y2 <- rnorm(n2, m2, sd_common)

mean(y1); mean(y2); sd(y1); sd(y2)
## [1] 72.82576
## [1] 72.28267
## [1] 8.304201
## [1] 7.602078

Hipótesis. \(H_0:\mu_1-\mu_2=0\) (bilateral).

t con varianza agrupada y con t.test(..., var.equal=TRUE).

s1 <- var(y1); s2 <- var(y2)
sp2 <- ((n1-1)*s1 + (n2-1)*s2)/(n1+n2-2)
t_calc <- (mean(y1)-mean(y2)) / sqrt(sp2*(1/n1 + 1/n2))
gl <- n1+n2-2
p_val <- 2*pt(-abs(t_calc), df=gl)
c(t_calc=t_calc, df=gl, p_value=p_val)
##     t_calc         df    p_value 
##  0.2462196 50.0000000  0.8065202
t.test(y1, y2, var.equal=TRUE, alternative="two.sided", conf.level=0.95)
## 
##  Two Sample t-test
## 
## data:  y1 and y2
## t = 0.24622, df = 50, p-value = 0.8065
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -3.887174  4.973342
## sample estimates:
## mean of x mean of y 
##  72.82576  72.28267

Chequeo de igualdad de varianzas (opcional): car::leveneTest o prueba F.

if (!requireNamespace("car", quietly=TRUE)) install.packages("car", repos="https://cloud.r-project.org")
car::leveneTest(c(y1,y2), factor(rep(c("A","B"), c(n1,n2))))
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1   0.393 0.5336
##       50

3) Diferencia de medias — varianzas desconocidas y desiguales (t de Welch)

Contexto. Salarios (en miles) en dos sectores con distinta dispersión.

n1 <- 22; n2 <- 30
a <- rnorm(n1, mean=50, sd=6)
b <- rnorm(n2, mean=53, sd=12)  # variabilidad mayor
t.test(a, b, var.equal=FALSE)   # Welch por defecto
## 
##  Welch Two Sample t-test
## 
## data:  a and b
## t = -2.1243, df = 49.098, p-value = 0.03871
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -10.9430074  -0.3039159
## sample estimates:
## mean of x mean of y 
##  48.88967  54.51313

Consigna. Reporte \(t\), gl de Welch y p-value. Construya el IC del 95% y compárelo con el caso var.equal=TRUE.


4) Medias pareadas (muestras dependientes)

Contexto. Medición antes vs. después de un taller de capacitación (mismos individuos).

n <- 20
antes  <- rnorm(n, 60, 8)
mejora <- rnorm(n, 5, 3)
despues <- antes + mejora
d <- despues - antes
mean(d); sd(d)
## [1] 5.193335
## [1] 3.09673
t.test(d, alternative="two.sided", mu=0)        # sobre diferencias
## 
##  One Sample t-test
## 
## data:  d
## t = 7.4999, df = 19, p-value = 4.312e-07
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  3.744020 6.642649
## sample estimates:
## mean of x 
##  5.193335
# o equivalente:
t.test(despues, antes, paired=TRUE)
## 
##  Paired t-test
## 
## data:  despues and antes
## t = 7.4999, df = 19, p-value = 4.312e-07
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  3.744020 6.642649
## sample estimates:
## mean difference 
##        5.193335

Consignas. Verifique supuestos (normalidad de d con shapiro.test si n pequeño) y calcule el tamaño del efecto (Cohen’s d para muestras pareadas: mean(d)/sd(d)).

shapiro.test(d)
## 
##  Shapiro-Wilk normality test
## 
## data:  d
## W = 0.90479, p-value = 0.05075
cohen_d_pareada <- mean(d)/sd(d)
cohen_d_pareada
## [1] 1.677038

5) Cociente de varianzas (prueba F)

Contexto. Contraste \(\sigma_1^2 = \sigma_2^2\) vs \(\sigma_1^2 \ne \sigma_2^2\) (normalidad).

set.seed(321)
g1 <- rnorm(18, 100, 5)
g2 <- rnorm(24, 102, 8)

# Estadístico F = s1^2 / s2^2 con df (n1-1, n2-1)
s1 <- var(g1); s2 <- var(g2); n1 <- length(g1); n2 <- length(g2)
Fcalc <- s1/s2
df1 <- n1-1; df2 <- n2-1
p_val_bilateral <- 2*min(pf(Fcalc, df1, df2), 1-pf(Fcalc, df1, df2))
c(Fcalc=Fcalc, df1=df1, df2=df2, p_value=p_val_bilateral)
##       Fcalc         df1         df2     p_value 
##  0.29476558 17.00000000 23.00000000  0.01245082
# Paquete conveniente
if (!requireNamespace("EnvStats", quietly=TRUE)) install.packages("EnvStats", repos="https://cloud.r-project.org")
var.test(g1, g2, ratio=1, alternative="two.sided")  # base R: estable y suficiente
## 
##  F test to compare two variances
## 
## data:  g1 and g2
## F = 0.29477, num df = 17, denom df = 23, p-value = 0.01245
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.1220233 0.7581782
## sample estimates:
## ratio of variances 
##          0.2947656

Consignas. Reporte \(F\), gl y conclusión. Úselo como pre-chequeo para decidir var.equal en la prueba de medias.


6) Diferencia de proporciones (muestras grandes)

Contexto. Conversión: sitio A vs B. En A hubo \(x_1=120\) éxitos sobre \(n_1=1500\); en B \(x_2=170\) sobre \(n_2=1600\).

Z con proporción combinada \(\hat p\).

x1 <- 120; n1 <- 1500
x2 <- 170; n2 <- 1600
p1 <- x1/n1; p2 <- x2/n2
phat <- (x1+x2)/(n1+n2)
z_calc <- (p1 - p2) / sqrt(phat*(1-phat)*(1/n1 + 1/n2))
p_val <- 2*pnorm(-abs(z_calc))
c(p1=p1, p2=p2, z_calc=z_calc, p_value=p_val)
##          p1          p2      z_calc     p_value 
##  0.08000000  0.10625000 -2.50820839  0.01213451

Con prop.test (usa corrección de continuidad; gl=1).

prop.test(x=c(x1,x2), n=c(n1,n2), alternative="two.sided", correct=TRUE)
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  c(x1, x2) out of c(n1, n2)
## X-squared = 5.9854, df = 1, p-value = 0.01443
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.047303685 -0.005196315
## sample estimates:
##  prop 1  prop 2 
## 0.08000 0.10625

Consignas. Interprete el resultado y calcule el IC del 95% para \(p_1-p_2\).

se_hat <- sqrt(phat*(1-phat)*(1/n1 + 1/n2))
ic <- (p1-p2) + c(-1,1)*qnorm(0.975)*se_hat
ic
## [1] -0.046762273 -0.005737727

Bonus (para todas las pruebas)

  • Reporte tamaño del efecto: effectsize::cohens_d, effectsize::oddsratio (cuando aplique).
  • Verifique supuestos (normalidad con shapiro.test si n pequeño; independencia por diseño; outliers con boxplots).
  • Agregue gráficos rápidos: ggplot2 (density plots, boxplots) para visualizar diferencias.
if (!requireNamespace("ggplot2", quietly=TRUE)) install.packages("ggplot2", repos="https://cloud.r-project.org")
df_plot <- data.frame(grupo=rep(c("A","B"), c(length(a), length(b))), valor=c(a,b))
ggplot2::ggplot(df_plot, ggplot2::aes(grupo, valor)) + ggplot2::geom_boxplot()