Incluye contexto, pasos, código en R, gráficos e interpretación para: 1) Z (medias con σ conocidas), 2) t pooled, 3) Welch, 4) Pareadas, 5) F de varianzas, 6) Z de proporciones.

1 1. Z — Diferencia de medias con varianzas conocidas

Contexto. Tiempos de armado (minutos) de dos líneas. Se conocen desvíos poblacionales: \(\sigma_1=2\), \(\sigma_2=3\).

n1 <- 40; n2 <- 35
sigma1 <- 2; sigma2 <- 3
x1 <- rnorm(n1, mean=15, sd=sigma1)
x2 <- rnorm(n2, mean=16, sd=sigma2)
xbar1 <- mean(x1); xbar2 <- mean(x2)
z_calc <- ((xbar1 - xbar2) - 0) / sqrt(sigma1^2/n1 + sigma2^2/n2)
p_val  <- 2*pnorm(-abs(z_calc))
c(xbar1=xbar1, xbar2=xbar2, z_calc=z_calc, p_value=p_val)
##      xbar1      xbar2     z_calc    p_value 
## 15.0903666 16.0144746 -1.5463284  0.1220253

Gráfico. Distribuciones empíricas de las muestras.

df <- rbind(
  data.frame(linea="Línea 1", valor=x1),
  data.frame(linea="Línea 2", valor=x2)
)
ggplot(df, aes(valor, fill=linea)) +
  geom_histogram(aes(y=after_stat(density)), bins=20, alpha=.6, position="identity") +
  geom_density(alpha=.2) +
  labs(x="Minutos", y="Densidad")
Tiempos de armado con σ conocidas

Tiempos de armado con σ conocidas

IC95% e interpretación.

alpha <- 0.05; zcrit <- qnorm(1-alpha/2)
se <- sqrt(sigma1^2/n1 + sigma2^2/n2)
ic <- (xbar1-xbar2) + c(-1,1)*zcrit*se
data.frame(IC95_low=ic[1], IC95_high=ic[2])
##   IC95_low IC95_high
## 1 -2.09541 0.2471945

2 2. t — Varianzas desconocidas pero iguales (pooled)

n1 <- 25; n2 <- 27
y1 <- rnorm(n1, 70, 10)
y2 <- rnorm(n2, 75, 10)
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

Chequeo de igualdad de varianzas (Levene).

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

Gráfico. Boxplots con dispersión similar.

df2 <- data.frame(grupo=rep(c("A","B"), c(n1,n2)), puntaje=c(y1,y2))
ggplot(df2, aes(grupo, puntaje)) + geom_boxplot() + labs(x="", y="Puntaje")

t.test con var.equal=TRUE y IC.

t.test(y1, y2, var.equal=TRUE, conf.level=.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

3 3. t — Varianzas desiguales (Welch)

a <- rnorm(22, 50, 6)
b <- rnorm(30, 53, 12)  # mayor dispersión
t.test(a, b, var.equal=FALSE, conf.level=.95)
## 
##  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

Gráfico. Boxplots con diferente amplitud (desigualdad de varianzas).

df3 <- data.frame(grupo=rep(c("Sector A","Sector B"), c(length(a), length(b))), valor=c(a,b))
ggplot(df3, aes(grupo, valor)) + geom_boxplot() + labs(x="", y="Salario (miles)")


4 4. Pareadas (antes–después)

Trabajamos con las diferencias \(d_j = \text{después}_j - \text{antes}_j\).

n <- 30
antes  <- rnorm(n, 60, 8)
mejora <- rnorm(n, 5, 3)
despues <- antes + mejora
d <- despues - antes
t.test(d, mu=0, alternative="two.sided")
## 
##  One Sample t-test
## 
## data:  d
## t = 10.156, df = 29, p-value = 4.644e-11
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  3.836371 5.771232
## sample estimates:
## mean of x 
##  4.803802

Normalidad de las diferencias (si n pequeño).

shapiro.test(d)
## 
##  Shapiro-Wilk normality test
## 
## data:  d
## W = 0.95712, p-value = 0.261

Gráfico. Trayectorias individuo a individuo + histograma de \(d\).
(Solución al error: inicializamos la trama con plot(..., type="n") antes de lines)

par(mfrow=c(1,2))

# --- Panel 1: trayectorias (inicializamos la figura)
ylim <- range(c(antes, despues))
plot(c(1,2), c(min(ylim), max(ylim)), type="n", xaxt="n", xlab="", ylab="Puntaje")
axis(1, at=c(1,2), labels=c("Antes","Después"))
title("Trayectorias pareadas")
for (i in 1:n) lines(c(1,2), c(antes[i], despues[i]), type="b", pch=16)

# --- Panel 2: distribución de diferencias ---
hist(d, breaks=10, main="Distribución de diferencias (d)", xlab="d = después - antes")

par(mfrow=c(1,1))

5 5. Igualdad de varianzas (prueba F)

set.seed(321)
g1 <- rnorm(18, 100, 5)
g2 <- rnorm(24, 102, 8)
var.test(g1, g2, ratio=1, alternative="two.sided")
## 
##  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

Gráfico. Distribuciones con distinta dispersión.

df5 <- rbind(data.frame(proc="P1", x=g1), data.frame(proc="P2", x=g2))
ggplot(df5, aes(x, fill=proc)) +
  geom_histogram(aes(y=after_stat(density)), bins=20, position="identity", alpha=.6) +
  geom_density(alpha=.2) + labs(x="Medición", y="Densidad")


6 6. Diferencia de proporciones (muestras grandes)

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
prop.test(c(x1,x2), c(n1,n2), 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

Gráfico. Barras con IC95% individuales.

se1 <- sqrt(p1*(1-p1)/n1)
se2 <- sqrt(p2*(1-p2)/n2)
df6 <- data.frame(sitio=c("A","B"), p=c(p1,p2), se=c(se1,se2))
ggplot(df6, aes(sitio, p)) + 
  geom_col() +
  geom_errorbar(aes(ymin=p-1.96*se, ymax=p+1.96*se), width=.15) +
  labs(y="Proporción", x="Sitio")


6.1 Recomendaciones de reporte

  • Informar estadístico, gl (cuando aplique), p-value e IC95%.
  • Complementar con tamaño del efecto y gráficos simples (boxplot, densidades, barras con IC).
  • Declarar supuestos y cómo se validaron (normalidad, homocedasticidad, independencia). ```