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. Fijamosset.seed(123)para reproducibilidad.
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
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
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.
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
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.
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
effectsize::cohens_d, effectsize::oddsratio
(cuando aplique).shapiro.test si n pequeño; independencia por diseño;
outliers con boxplots).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()