Hasta ahora hemos estimado parámetros y probado hipótesis respecto de una sola población. Sin embargo, las decisiones organizacionales suelen requerir comparaciones: ¿qué sede vende más?, ¿funcionó una capacitación?, ¿qué canal convierte mejor?, ¿cuál proceso es más estable?
Consideremos una empresa que compara dos sucursales. Encontrar una venta promedio de $540 mil en la primera y $515 mil en la segunda no demuestra que la primera sea superior: ambos promedios provienen de muestras y, por tanto, contienen incertidumbre.
La respuesta depende, entre otros aspectos, del tamaño de muestra, de la variabilidad y de cómo se recolectaron los datos.
Al terminar esta unidad, el estudiante estará en capacidad de:
| Pregunta | Tipo de dato | Diseño | Procedimiento habitual |
|---|---|---|---|
| ¿Dos sedes tienen igual venta promedio? | Cuantitativo | Dos grupos independientes | Diferencia de medias (Z o t) |
| ¿Cambió el tiempo después de una capacitación? | Cuantitativo | Antes/después de las mismas personas | t pareada |
| ¿Dos canales generan igual tasa de compra? | Binario (sí/no) | Dos grupos independientes | Diferencia de proporciones (Z) |
| ¿Dos máquinas tienen igual variabilidad? | Cuantitativo | Dos grupos independientes | Comparación de varianzas (F) |
Dos muestras son independientes cuando las observaciones de una no están emparejadas ni dependen de las observaciones de la otra. Por ejemplo, seleccionar vendedores de dos sedes diferentes sin relacionar cada vendedor de una sede con uno de la otra.
Si \(\bar X_1\) y \(\bar X_2\) son medias muestrales independientes:
\[ E(\bar X_1-\bar X_2)=\mu_1-\mu_2, \]
\[ \operatorname{Var}(\bar X_1-\bar X_2) =\frac{\sigma_1^2}{n_1}+\frac{\sigma_2^2}{n_2}. \]
En consecuencia, el error estándar de la diferencia de medias, con desviaciones poblacionales conocidas, es:
\[ EE(\bar X_1-\bar X_2) =\sqrt{\frac{\sigma_1^2}{n_1}+\frac{\sigma_2^2}{n_2}}. \]
No se suman las desviaciones estándar; se suman las varianzas de los estimadores y se obtiene la raíz cuadrada.
Este escenario es útil para comprender la teoría, aunque en aplicaciones empresariales es poco común conocer las varianzas poblacionales verdaderas. Puede ocurrir, por ejemplo, cuando se cuenta con parámetros históricos confiables del proceso.
Un negocio estudia las ventas diarias por asesor (en miles de pesos) en dos sedes. Los resúmenes muestrales son:
| Estadístico | Sede A | Sede B |
|---|---|---|
| Media muestral | 540 | 515 |
| Desviación estándar poblacional, conocida | 60 | 70 |
| Tamaño de muestra | 64 | 49 |
Se quiere saber si existen diferencias entre las medias poblacionales con \(\alpha=0,05\).
El parámetro de interés es \(\mu_A-\mu_B\). Como se pregunta por una diferencia en cualquier dirección, se utiliza una prueba bilateral:
\[H_0:\mu_A-\mu_B=0, \qquad H_1:\mu_A-\mu_B\neq 0.\]
\[\bar x_A-\bar x_B=540-515=25.\]
\[EE=\sqrt{\frac{60^2}{64}+\frac{70^2}{49}} =\sqrt{56,25+100}=12,5.\]
\[Z=\frac{(\bar x_A-\bar x_B)-0}{EE} =\frac{25}{12,5}=2.\]
La distribución de referencia es aproximadamente normal estándar cuando los supuestos de normalidad o aproximación por muestras grandes lo justifican.
Para una prueba bilateral al 5 %, las regiones críticas están por debajo de \(-1,96\) y por encima de \(1,96\).
media_a <- 540; media_b <- 515
sigma_a <- 60; sigma_b <- 70
n_a <- 64; n_b <- 49
alpha <- 0.05
dif_z <- media_a - media_b
se_z <- sqrt(sigma_a^2/n_a + sigma_b^2/n_b)
z_obs <- dif_z/se_z
p_z <- 2*pnorm(-abs(z_obs))
z_crit <- qnorm(1-alpha/2)
ic_z <- dif_z + c(-1, 1)*z_crit*se_z
data.frame(diferencia = dif_z, error_estandar = se_z,
z = z_obs, valor_p = p_z,
IC_inferior = ic_z[1], IC_superior = ic_z[2]) |>
knitr::kable(digits = 4, caption = "Prueba Z e intervalo para la diferencia de medias")| diferencia | error_estandar | z | valor_p | IC_inferior | IC_superior |
|---|---|---|---|---|---|
| 25 | 12.5 | 2 | 0.0455 | 0.5005 | 49.4995 |
El valor-p bilateral es aproximadamente 0,0455. Como es inferior a 0,05, rechazamos \(H_0\): existe evidencia estadística de una diferencia entre las ventas medias de las dos sedes.
curva <- data.frame(z=seq(-3.8,3.8,length.out=900))
curva$densidad <- dnorm(curva$z)
curva$region <- ifelse(abs(curva$z) >= z_crit, "Rechazo de H0", "No rechazo")
ggplot(curva, aes(z,densidad)) +
geom_area(data=subset(curva,region=="Rechazo de H0"),
fill="#e8a05d",alpha=.7) +
geom_line(color="#226b9a", linewidth=1.1) +
geom_vline(xintercept=c(-z_crit,z_crit), linetype="dashed",color="#bf6f32") +
geom_vline(xintercept=z_obs,color="#a62935",linewidth=1.1) +
annotate("text",x=z_obs+.1,y=.31,label="Z observado = 2",hjust=0,
color="#a62935",size=4) +
labs(title="Prueba bilateral para dos medias",subtitle="Las colas sombreadas tienen área total de 5 %",
x="Estadístico Z",y="Densidad") + temaDistribución normal estándar, regiones críticas y estadístico observado.
\[IC_{95\%}(\mu_A-\mu_B)= (\bar x_A-\bar x_B)\pm z_{0,975} \sqrt{\frac{\sigma_A^2}{n_A}+\frac{\sigma_B^2}{n_B}}.\]
\[IC_{95\%}=25\pm 1,96(12,5)\approx [0,50;\ 49,50].\]
El intervalo es positivo y excluye el cero: concuerda con la conclusión de la prueba bilateral. Las ventas medias de A podrían superar las de B en aproximadamente entre 0,5 y 49,5 miles de pesos, con el procedimiento de confianza del 95 %.
Normalmente no conocemos \(\sigma_1\) ni \(\sigma_2\). Las estimamos con \(s_1\) y \(s_2\). En muestras independientes sin asumir igualdad de varianzas, una elección robusta y habitual es la prueba t de Welch.
\[t=\frac{(\bar x_1-\bar x_2)-\Delta_0} {\sqrt{\frac{s_1^2}{n_1}+\frac{s_2^2}{n_2}}}.\]
Los grados de libertad se aproximan mediante Welch–Satterthwaite:
\[\nu\approx \frac{\left(s_1^2/n_1+s_2^2/n_2\right)^2} {\frac{(s_1^2/n_1)^2}{n_1-1}+\frac{(s_2^2/n_2)^2}{n_2-1}}.\]
Importante: no es obligatorio verificar que ambas varianzas sean iguales para aplicar Welch; de hecho, su principal ventaja es no imponer ese supuesto.
Se seleccionaron muestras independientes de solicitudes atendidas en dos centros de servicio. El tiempo se mide en minutos. Queremos comparar las medias mediante una prueba bilateral e intervalo del 95 %.
# Datos ilustrativos reproducibles de tiempos de atención, en minutos.
centro_a <- c(18,20,19,17,22,21,18,20,19,17,21,18,20,19,22,18)
centro_b <- c(23,22,25,20,24,23,26,21,24,22,25,23,27,20)
datos_centros <- data.frame(
tiempo=c(centro_a,centro_b),
centro=rep(c("Centro A","Centro B"), c(length(centro_a),length(centro_b)))
)
resumen <- aggregate(tiempo~centro,datos_centros,
function(x) c(n=length(x), media=mean(x), s=sd(x)))
resumen_tabla <- data.frame(centro=resumen$centro,
n=resumen$tiempo[,"n"],
media=resumen$tiempo[,"media"],
desviacion=resumen$tiempo[,"s"])
knitr::kable(resumen_tabla, digits=2,
caption="Resumen descriptivo de los tiempos de atención")| centro | n | media | desviacion |
|---|---|---|---|
| Centro A | 16 | 19.31 | 1.62 |
| Centro B | 14 | 23.21 | 2.12 |
ggplot(datos_centros,aes(centro,tiempo,fill=centro)) +
geom_boxplot(alpha=.35,width=.48,outlier.shape=NA) +
geom_jitter(width=.10,height=0,size=2,alpha=.75) +
scale_fill_manual(values=c("#277eb3","#e3a24d")) +
labs(title="¿Los centros presentan tiempos de atención diferentes?",
x="Centro",y="Tiempo de atención (minutos)") +
theme(legend.position="none") + temaDistribución de tiempos por centro. Un gráfico permite examinar dispersión y posibles atípicos.
El gráfico ofrece información descriptiva, pero no sustituye la inferencia estadística.
\[H_0:\mu_A-\mu_B=0,\qquad H_1:\mu_A-\mu_B\neq 0.\]
n1 <- length(centro_a); n2 <- length(centro_b)
x1 <- mean(centro_a); x2 <- mean(centro_b)
s1 <- sd(centro_a); s2 <- sd(centro_b)
se_w <- sqrt(s1^2/n1+s2^2/n2)
t_w <- (x1-x2)/se_w
nu_w <- (s1^2/n1+s2^2/n2)^2 /
((s1^2/n1)^2/(n1-1)+(s2^2/n2)^2/(n2-1))
p_w <- 2*pt(-abs(t_w),df=nu_w)
tc_w <- qt(.975,df=nu_w)
ic_w <- (x1-x2)+c(-1,1)*tc_w*se_w
data.frame(diferencia=x1-x2, EE=se_w, t=t_w,gl=nu_w,
valor_p=p_w, LI=ic_w[1],LS=ic_w[2]) |>
knitr::kable(digits=4)| diferencia | EE | t | gl | valor_p | LI | LS |
|---|---|---|---|---|---|---|
| -3.9018 | 0.6964 | -5.6028 | 24.2247 | 0 | -5.3384 | -2.4652 |
prueba_welch <- t.test(centro_a,centro_b,
alternative="two.sided",conf.level=.95,
var.equal=FALSE)
prueba_welch##
## Welch Two Sample t-test
##
## data: centro_a and centro_b
## t = -5.6028, df = 24.225, p-value = 8.823e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -5.338370 -2.465202
## sample estimates:
## mean of x mean of y
## 19.31250 23.21429
En este ejemplo, $x_A-x_B = $ -3,90 minutos y el valor-p es 0,0000. La decisión al 5 % es rechazar la hipótesis nula.
t.test() entrega el estadístico, grados de libertad,
valor-p e intervalo de confianza. Una lectura completa debe incorporar
también la dirección y la magnitud de la diferencia, además de comprobar
el diseño muestral.
Si existe una justificación sustantiva para asumir \(\sigma_1^2=\sigma_2^2\), puede emplearse la varianza combinada:
\[s_p^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2}.\]
\[t=\frac{(\bar x_1-\bar x_2)-\Delta_0} {s_p\sqrt{1/n_1+1/n_2}},\qquad gl=n_1+n_2-2.\]
# Solo bajo una hipótesis defendible de varianzas poblacionales iguales.
t.test(centro_a,centro_b,var.equal=TRUE)##
## Two Sample t-test
##
## data: centro_a and centro_b
## t = -5.7049, df = 28, p-value = 4.061e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -5.302764 -2.500807
## sample estimates:
## mean of x mean of y
## 19.31250 23.21429
No debemos escoger automáticamente la t combinada por el simple hecho de obtener un valor-p grande en una prueba de varianzas. En la práctica, Welch suele ser la opción predeterminada si no existe razón clara para imponer homocedasticidad.
Se dice que las observaciones están pareadas cuando cada valor del primer momento o condición tiene una correspondencia natural con uno del segundo. Por ejemplo, medir a las mismas personas antes y después de un curso.
El objeto de análisis deja de ser la diferencia entre dos medias de muestras independientes y pasa a ser la media de las diferencias dentro de cada par.
Definimos:
\[D_i=X_{\mathrm{después},i}-X_{\mathrm{antes},i}.\]
Así:
\[\bar D=\frac{1}{n}\sum_{i=1}^nD_i,\qquad s_D=\sqrt{\frac{\sum_{i=1}^n(D_i-\bar D)^2}{n-1}}.\]
La prueba de hipótesis para \(H_0:\mu_D=\Delta_0\) utiliza:
\[t=\frac{\bar D-\Delta_0}{s_D/\sqrt n},\qquad gl=n-1.\]
Y el intervalo de confianza correspondiente es:
\[IC(\mu_D)=\bar D\pm t_{1-\alpha/2,n-1}\frac{s_D}{\sqrt n}.\]
Doce trabajadores realizan una tarea antes y después de un programa de capacitación. Los tiempos se expresan en minutos. La empresa considera que una reducción es favorable.
antes <- c(52,49,55,51,48,53,50,57,54,46,56,52)
despues <- c(47,45,50,47,46,49,45,52,50,43,51,48)
trabajador <- seq_along(antes)
d <- despues-antes
base_pares <- data.frame(trabajador,antes,despues,diferencia=d)
knitr::kable(base_pares,caption="Mediciones de cada trabajador y diferencia después − antes")| trabajador | antes | despues | diferencia |
|---|---|---|---|
| 1 | 52 | 47 | -5 |
| 2 | 49 | 45 | -4 |
| 3 | 55 | 50 | -5 |
| 4 | 51 | 47 | -4 |
| 5 | 48 | 46 | -2 |
| 6 | 53 | 49 | -4 |
| 7 | 50 | 45 | -5 |
| 8 | 57 | 52 | -5 |
| 9 | 54 | 50 | -4 |
| 10 | 46 | 43 | -3 |
| 11 | 56 | 51 | -5 |
| 12 | 52 | 48 | -4 |
Buscamos una reducción en el tiempo. Dado que \(D=\mathrm{después}-\mathrm{antes}\), una reducción corresponde a \(\mu_D<0\):
\[H_0:\mu_D=0,\qquad H_1:\mu_D<0.\]
Se realiza una prueba unilateral izquierda al 5 %.
base_larga <- rbind(
data.frame(trabajador, momento="Antes", tiempo=antes),
data.frame(trabajador, momento="Después", tiempo=despues)
)
base_larga$momento <- factor(base_larga$momento,levels=c("Antes","Después"))
ggplot(base_larga,aes(momento,tiempo,group=trabajador)) +
geom_line(color="#8daec2",alpha=.75) +
geom_point(aes(color=momento),size=2.8) +
scale_color_manual(values=c("#b57b35","#1479a7")) +
labs(title="Comparación antes/después por trabajador",
subtitle="Cada línea representa una persona, no dos observaciones independientes",
x="Momento de medición",y="Minutos") +
theme(legend.position="none") + temaCada segmento conecta las mediciones del mismo trabajador; este emparejamiento es parte esencial del diseño.
n_d <- length(d)
d_media <- mean(d)
d_sd <- sd(d)
se_d <- d_sd/sqrt(n_d)
t_d <- d_media/se_d
p_d <- pt(t_d,df=n_d-1)
# Intervalo bilateral del 95 % para la media de las diferencias
ic_d <- d_media+c(-1,1)*qt(.975,df=n_d-1)*se_d
data.frame(n=n_d, media_diferencias=d_media, sd_diferencias=d_sd,
EE=se_d, t=t_d, gl=n_d-1, valor_p_unilateral=p_d,
LI_95=ic_d[1],LS_95=ic_d[2]) |>
knitr::kable(digits=4)| n | media_diferencias | sd_diferencias | EE | t | gl | valor_p_unilateral | LI_95 | LS_95 |
|---|---|---|---|---|---|---|---|---|
| 12 | -4.1667 | 0.9374 | 0.2706 | -15.397 | 11 | 0 | -4.7623 | -3.571 |
t.test()##
## Paired t-test
##
## data: despues and antes
## t = -15.397, df = 11, p-value = 4.327e-09
## alternative hypothesis: true mean difference is less than 0
## 95 percent confidence interval:
## -Inf -3.680674
## sample estimates:
## mean difference
## -4.166667
La media de las diferencias fue de -4,17 minutos. El valor-p unilateral es 0,0000, por lo que rechazamos \(H_0\) al nivel del 5 %. La evidencia apoya una disminución media del tiempo de proceso.
Nota sobre intervalos: el IC del 95 % calculado
manualmente es bilateral; en cambio, la llamada
anterior a t.test(..., alternative="less") reporta un
intervalo unilateral superior, consistente con la
hipótesis direccional. Ambos responden preguntas diferentes.
##
## Paired t-test
##
## data: despues and antes
## t = -15.397, df = 11, p-value = 8.654e-09
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -4.762286 -3.571048
## sample estimates:
## mean difference
## -4.166667
# Esta llamada trata equivocadamente ambos vectores como independientes.
t.test(despues,antes,paired=FALSE)$p.value## [1] 0.002940947
## [1] 8.653832e-09
La variabilidad entre personas puede ser grande, mientras que el cambio dentro de cada persona es estable. El análisis pareado aprovecha esa información. No debemos elegir la prueba con el valor-p más pequeño: debemos elegir la prueba correcta para el diseño.
ggplot(data.frame(diferencia=d),aes(diferencia)) +
geom_histogram(binwidth=1,fill="#3f92bc",color="white",boundary=-.5) +
geom_vline(xintercept=d_media,color="#ae4f37",linetype="dashed",linewidth=1) +
labs(title="Distribución de cambios individuales",
x="Después − antes (minutos)",y="Número de trabajadores") + temaLa distribución relevante para revisar la t pareada es la de las diferencias individuales.
Una proporción representa la fracción de unidades que tienen cierta característica: comprar/no comprar, pagar/no pagar, cumplir/no cumplir. Si comparamos dos campañas, interesan los parámetros \(p_1\) y \(p_2\).
La proporción observada en cada muestra es:
\[\hat p_1=\frac{x_1}{n_1},\qquad \hat p_2=\frac{x_2}{n_2},\]
con \(x_i\) igual al número de éxitos y \(n_i\) al número de unidades de cada grupo.
La diferencia estimada es \(\hat p_1-\hat p_2\). Para muestras independientes suficientemente grandes, el intervalo normal aproximado es:
\[IC(p_1-p_2)=(\hat p_1-\hat p_2) \pm z_{1-\alpha/2} \sqrt{\frac{\hat p_1(1-\hat p_1)}{n_1}+ \frac{\hat p_2(1-\hat p_2)}{n_2}}.\]
En este intervalo utilizamos las proporciones calculadas por separado. El método normal de Wald es introductorio y puede ser poco preciso con tamaños pequeños o probabilidades cercanas a cero o uno; en tales casos se prefieren métodos más adecuados.
Para la prueba \(H_0:p_1=p_2\) se supone una proporción común. Por ello, el estimador de la proporción bajo la hipótesis nula es:
\[\hat p_c=\frac{x_1+x_2}{n_1+n_2}.\]
El estadístico es:
\[Z=\frac{\hat p_1-\hat p_2} {\sqrt{\hat p_c(1-\hat p_c)\left(\frac1{n_1}+\frac1{n_2}\right)}}.\]
Una empresa compara dos canales de venta en campañas realizadas durante el mismo periodo. Se registró si cada visitante terminó haciendo una compra.
| Resultado | Canal web | Canal aplicación |
|---|---|---|
| Visitantes | 400 | 350 |
| Compraron | 116 | 133 |
| No compraron | 284 | 217 |
¿Existe evidencia de que las tasas de conversión sean distintas? Trabajaremos con un 5 % de significancia.
n_web <- 400; x_web <- 116
n_app <- 350; x_app <- 133
p_web <- x_web/n_web
p_app <- x_app/n_app
p_dif <- p_web-p_app
data.frame(canal=c("Web","Aplicación"),n=c(n_web,n_app),
compradores=c(x_web,x_app),
tasa_conversion=c(p_web,p_app)) |>
knitr::kable(digits=4)| canal | n | compradores | tasa_conversion |
|---|---|---|---|
| Web | 400 | 116 | 0.29 |
| Aplicación | 350 | 133 | 0.38 |
Las conversiones muestrales son 29,0 % y 38,0 %, respectivamente. La diferencia web − aplicación es -9,0 puntos porcentuales, no un porcentaje relativo.
\[H_0:p_{\mathrm{web}}-p_{\mathrm{app}}=0,\qquad H_1:p_{\mathrm{web}}-p_{\mathrm{app}}\neq 0.\]
p_combinada <- (x_web+x_app)/(n_web+n_app)
se_h0 <- sqrt(p_combinada*(1-p_combinada)*(1/n_web+1/n_app))
z_prop <- p_dif/se_h0
p_val_prop <- 2*pnorm(-abs(z_prop))
se_ic_prop <- sqrt(p_web*(1-p_web)/n_web+p_app*(1-p_app)/n_app)
ic_prop <- p_dif+c(-1,1)*qnorm(.975)*se_ic_prop
data.frame(p_combinada=p_combinada, z=z_prop,
valor_p=p_val_prop, LI=ic_prop[1],LS=ic_prop[2]) |>
knitr::kable(digits=4)| p_combinada | z | valor_p | LI | LS |
|---|---|---|---|---|
| 0.332 | -2.6111 | 0.009 | -0.1576 | -0.0224 |
tasas <- data.frame(canal=c("Web","Aplicación"),tasa=c(p_web,p_app))
ggplot(tasas,aes(canal,tasa,fill=canal))+
geom_col(width=.52,alpha=.85) +
geom_text(aes(label=paste0(round(100*tasa,1)," %")),vjust=-.5,size=5)+
scale_y_continuous(limits=c(0,.48),labels=function(x) paste0(round(x*100)," %"))+
scale_fill_manual(values=c("#287ca8","#d89a4d"))+
labs(title="Conversión observada por canal",x="Canal",y="Tasa de compra")+
theme(legend.position="none") + temaTasas de conversión observadas, sin confundir diferencia porcentual con puntos porcentuales.
La función prop.test() de R utiliza un estadístico
ji-cuadrado para dos proporciones; sin corrección de continuidad, su
estadístico equivale al cuadrado del Z anterior. El método y el
intervalo que reporta pueden diferir del intervalo normal manual.
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(x_web, x_app) out of c(n_web, n_app)
## X-squared = 6.8177, df = 1, p-value = 0.009026
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.15755177 -0.02244823
## sample estimates:
## prop 1 prop 2
## 0.29 0.38
En este caso, el valor-p aproximado de la prueba manual es 0,0090. En consecuencia, rechazamos \(H_0\) al 5 %.
En control de calidad y operaciones no basta con que dos procesos tengan el mismo promedio: uno puede producir resultados mucho más dispersos y, por tanto, ser menos predecible.
Para dos muestras aleatorias independientes de poblaciones normales, el estadístico:
\[F=\frac{S_1^2/\sigma_1^2}{S_2^2/\sigma_2^2}\]
sigue una distribución F con \(n_1-1\) y \(n_2-1\) grados de libertad. Bajo la hipótesis nula \(H_0:\sigma_1^2=\sigma_2^2\), se reduce a:
\[F_{obs}=\frac{s_1^2}{s_2^2},\quad F\sim F_{n_1-1,n_2-1}.\]
La distribución F solo toma valores positivos y generalmente es asimétrica.
Dos líneas producen componentes y se registra la longitud de una característica en milímetros. La empresa busca saber si sus varianzas poblacionales son diferentes.
linea_a <- c(10.2,9.9,10.1,10.0,10.3,9.8,10.2,10.1,9.9,10.0,10.2,10.1)
linea_b <- c(9.4,10.5,9.7,10.8,9.2,10.4,9.6,10.7,9.5,10.6,9.3,10.3)
produccion <- data.frame(
longitud=c(linea_a,linea_b),
linea=rep(c("Línea A","Línea B"),each=12)
)
s2_a <- var(linea_a); s2_b <- var(linea_b)
f_obs <- s2_a/s2_b
gl1 <- length(linea_a)-1
gl2 <- length(linea_b)-1
data.frame(linea=c("A","B"),n=c(length(linea_a),length(linea_b)),
media=c(mean(linea_a),mean(linea_b)),
varianza=c(s2_a,s2_b),
desviacion=c(sd(linea_a),sd(linea_b))) |>
knitr::kable(digits=4)| linea | n | media | varianza | desviacion |
|---|---|---|---|---|
| A | 12 | 10.0667 | 0.0224 | 0.1497 |
| B | 12 | 10.0000 | 0.3618 | 0.6015 |
ggplot(produccion,aes(linea,longitud,fill=linea))+
geom_boxplot(alpha=.45,width=.5,outlier.shape=NA)+
geom_jitter(width=.1,size=2,alpha=.8)+
scale_fill_manual(values=c("#277eb3","#daa150"))+
labs(title="Dispersión de medidas por línea de producción",
x="Línea",y="Longitud (mm)")+
theme(legend.position="none") + temaLa comparación de dispersión es distinta de la comparación de promedios.
\[H_0:\sigma_A^2=\sigma_B^2,\qquad H_1:\sigma_A^2\neq\sigma_B^2.\]
Para la prueba bilateral, el valor-p puede calcularse como dos veces la menor probabilidad de cola de la distribución F correspondiente, limitado a 1.
p_f <- min(1,2*min(pf(f_obs,gl1,gl2),pf(f_obs,gl1,gl2,lower.tail=FALSE)))
crit_inf <- qf(.025,gl1,gl2)
crit_sup <- qf(.975,gl1,gl2)
data.frame(F_observado=f_obs,gl_numerador=gl1,gl_denominador=gl2,
critico_inferior=crit_inf,critico_superior=crit_sup,
valor_p=p_f) |> knitr::kable(digits=5)| F_observado | gl_numerador | gl_denominador | critico_inferior | critico_superior | valor_p |
|---|---|---|---|---|---|
| 0.06198 | 11 | 11 | 0.28788 | 3.4737 | 6e-05 |
fgrid <- data.frame(f=seq(.001,max(6,crit_sup*1.25),length.out=1200))
fgrid$dens <- df(fgrid$f,gl1,gl2)
fgrid$rechazo <- fgrid$f<crit_inf | fgrid$f>crit_sup
ggplot(fgrid,aes(f,dens))+
geom_area(data=subset(fgrid,rechazo),fill="#e8a05d",alpha=.65)+
geom_line(color="#226b9a",linewidth=1)+
geom_vline(xintercept=c(crit_inf,crit_sup),linetype="dashed",color="#c38543")+
geom_vline(xintercept=f_obs,color="#9e3041",linewidth=1.1)+
labs(title="Distribución F bajo igualdad de varianzas",
subtitle=paste0("Grados de libertad: ",gl1," y ",gl2),
x="Estadístico F",y="Densidad")+temaPrueba F bilateral: las dos regiones críticas se determinan con los grados de libertad del numerador y del denominador.
var.test()##
## F test to compare two variances
##
## data: linea_a and linea_b
## F = 0.061977, num df = 11, denom df = 11, p-value = 6.275e-05
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.01784166 0.21528788
## sample estimates:
## ratio of variances
## 0.06197655
El estadístico F calculado es 0,0620 y el valor-p es 1e-04. Por tanto, al 5 % rechazamos \(H_0\). Esto aporta evidencia de varianzas distintas, suponiendo válidos los requisitos de la prueba.
Es útil complementar el contraste con un intervalo para \(\sigma_1^2/\sigma_2^2\):
\[\left[ \frac{s_1^2/s_2^2}{F_{1-\alpha/2,\,n_1-1,\,n_2-1}},\quad \frac{s_1^2/s_2^2}{F_{\alpha/2,\,n_1-1,\,n_2-1}} \right].\]
ic_razon <- c(f_obs/qf(.975,gl1,gl2),
f_obs/qf(.025,gl1,gl2))
data.frame(razon_muestral=f_obs,LI_95=ic_razon[1],LS_95=ic_razon[2]) |>
knitr::kable(digits=4)| razon_muestral | LI_95 | LS_95 |
|---|---|---|
| 0.062 | 0.0178 | 0.2153 |
Si el intervalo para la razón de varianzas incluye 1, es compatible con igualdad de varianzas al nivel de confianza elegido; si no lo incluye, concuerda con el rechazo bilateral de \(H_0\).
La igualdad de medias no garantiza igualdad de varianzas y la desigualdad de varianzas no implica medias diferentes. Podemos tener una línea muy estable con un promedio alto y otra inestable con el mismo promedio.
| Situación | Parámetro | Prueba/estimación | Función de R |
|---|---|---|---|
| Dos medias independientes, \(\sigma_1,\sigma_2\) conocidas | \(\mu_1-\mu_2\) | Z | pnorm(), qnorm() y cálculo
manual |
| Dos medias independientes, varianzas desconocidas | \(\mu_1-\mu_2\) | t de Welch | t.test(..., var.equal=FALSE) |
| Dos medias independientes, igualdad de varianzas justificada | \(\mu_1-\mu_2\) | t combinada | t.test(..., var.equal=TRUE) |
| Antes/después o parejas | \(\mu_D\) | t pareada | t.test(..., paired=TRUE) |
| Dos tasas de compra | \(p_1-p_2\) | Z de dos proporciones | prop.test(..., correct=FALSE) |
| Dos dispersiones de poblaciones normales | \(\sigma_1^2/\sigma_2^2\) | F | var.test() |
Una empresa implementó una nueva plataforma comercial. Al presentar resultados al comité directivo se informa lo siguiente:
Sin embargo, la gerencia formula una pregunta más exigente:
Para elaborar el informe, un analista debe distinguir por lo menos tres niveles:
| Nivel | Pregunta | Ejemplo de respuesta |
|---|---|---|
| Descriptivo | ¿Qué ocurrió en los datos observados? | La aplicación tuvo mayor conversión muestral. |
| Inferencial | ¿Qué dice la evidencia sobre las poblaciones? | El intervalo estima la diferencia poblacional y muestra su incertidumbre. |
| Gerencial | ¿Qué hacemos con ese resultado? | Evaluar costos, perfiles de usuarios, rentabilidad y reproducibilidad del cambio. |
Las siguientes situaciones están planteadas para practicar la elección y justificación del procedimiento. Deben resolverse con operaciones estadísticas, código en R e interpretación contextual.
Dos sedes obtuvieron los siguientes ingresos por operación (en miles de pesos):
sede_norte <- c(125,132,128,136,130,129,134,127,131,135,126,133)
sede_sur <- c(119,121,124,118,126,123,120,125,122,117,127,121)Preguntas: ¿son muestras independientes?, ¿qué prueba corresponde si se desconocen las varianzas?, ¿existe diferencia estadísticamente significativa al 5 %?, ¿qué indica el intervalo del 95 %? Explique por qué comparar únicamente los promedios puede llevar a una conclusión incorrecta.
Ocho analistas registran trámites procesados por día antes y después de automatizar una tarea:
productividad_antes <- c(24,26,22,28,25,23,27,24)
productividad_despues <- c(28,30,25,31,29,26,31,27)Preguntas: defina la diferencia como después − antes; plantee una prueba unilateral que corresponda a una mejora; calcule las diferencias y su media; ejecute la t pareada; interprete el valor-p y discuta si este diseño, por sí solo, permite atribuir el resultado a la automatización.
En la campaña A compraron 84 de 300 visitantes y en la B compraron 105 de 300.
Preguntas: calcule las tasas y la diferencia en puntos porcentuales; contraste \(H_0:p_A=p_B\) al 5 %; construya un intervalo aproximado del 95 %; formule una recomendación considerando tanto significancia como costos por adquisición.
Dos máquinas tienen estos registros de tiempo por unidad (segundos):
Preguntas: represente los datos, estime las varianzas, explique el supuesto de normalidad de la prueba F, contraste la igualdad de varianzas e interprete la razón y su intervalo de confianza. ¿Una máquina con menor varianza es necesariamente la mejor?
| Error | Por qué está mal | Cómo corregirlo |
|---|---|---|
| Aplicar t independiente a datos antes/después | Ignora el emparejamiento | Analizar las diferencias por unidad |
| Decir que un valor-p alto demuestra igualdad | No rechazar no equivale a aceptar | Hablar de evidencia insuficiente; revisar precisión y potencia |
| Confundir porcentaje con puntos porcentuales | Son magnitudes distintas | Expresar correctamente la diferencia de tasas |
| Usar proporción combinada para todo intervalo | La combinación corresponde a \(H_0:p_1=p_2\) en la prueba Z presentada | Para el intervalo normal introductorio usar proporciones separadas |
| Elegir la F sin revisar normalidad | Puede producir resultados engañosos | Examinar datos, supuestos y alternativas robustas |
| Confundir diferencia estadística con causalidad | El diseño puede contener sesgos y variables de confusión | Revisar la asignación, el muestreo y las explicaciones alternativas |
| Interpretar solo el signo o el valor-p | No informa completamente sobre magnitud e incertidumbre | Reportar estimación, intervalo, valor-p y relevancia práctica |
La inferencia sobre dos poblaciones exige mucho más que sustituir números en una fórmula. Primero debemos reconocer qué significa cada observación y cómo se relaciona con las demás. Luego seleccionamos la estimación o prueba que corresponde, cuantificamos la incertidumbre y redactamos una conclusión en el lenguaje del problema.
Material didáctico elaborado para Estadística Inferencial, Universidad Libre, periodo 2026-2. Los datos de los ejemplos y ejercicios de esta guía son ilustrativos; no corresponden a mediciones de empresas reales.