Ruta de aprendizaje: (1) diseño completamente aleatorizado y ANOVA; (2) tablas de contingencia y prueba chi-cuadrado; (3) correlación de Pearson; (4) correlación de Spearman; (5) práctica integradora.
Antes de empezar. Los datos son simulados para fines pedagógicos. Los códigos pueden copiarse y ejecutarse por bloques en RStudio o Posit Cloud. El nivel de significancia por defecto es \(\alpha=0.05\). Los resultados estadísticos orientan decisiones, pero no sustituyen criterios de costo, viabilidad y contexto empresarial.
Un experimento modifica deliberadamente un factor para estudiar sus efectos sobre una variable respuesta. En un diseño completamente aleatorizado (DCA), las unidades experimentales se asignan al azar a los tratamientos. La aleatorización ayuda a evitar sesgos sistemáticos; la independencia de los errores depende además de cómo se implementa y mide el experimento.
| Concepto | Significado | En el ejemplo |
|---|---|---|
| Unidad experimental | Elemento al que se asigna un tratamiento | Tienda participante |
| Factor | Variable que controla el investigador | Campaña publicitaria |
| Tratamientos | Niveles del factor | Redes, correo, influenciadores |
| Respuesta | Resultado numérico de interés | Ventas semanales (millones) |
| Réplica | Otra unidad independiente con el mismo tratamiento | Otra tienda asignada |
Situación. Una empresa selecciona 15 tiendas comparables y asigna aleatoriamente cinco a cada campaña, durante una misma semana. Evalúa sus ventas semanales (millones de pesos).
ventas <- data.frame(
campana = factor(rep(c('Redes','Correo','Influenciadores'), each=5)),
ventas = c(12.4,13.1,12.8,13.5,12.9,
14.8,15.2,14.5,15.7,15.1,
16.1,17.3,16.8,17.1,16.5)
)
ventasImportante: ANOVA no plantea que todas las medias son distintas; basta con que una difiera.
ggplot(ventas, aes(x=campana, y=ventas, fill=campana)) +
geom_boxplot(alpha=.65, width=.5, outlier.shape=NA) +
geom_jitter(width=.08, size=2.5, alpha=.85) +
scale_fill_manual(values=c('#265D91','#169B83','#EA8B35')) +
labs(title='Ventas semanales por tipo de campaña',
x='Campaña', y='Ventas (millones de pesos)') +
guides(fill='none') + temaEl modelo de un factor es \(Y_{ij}=\mu+\tau_i+\varepsilon_{ij}\), donde \(\mu\) es la media global, \(\tau_i\) es el efecto del tratamiento \(i\) y \(\varepsilon_{ij}\) es el error individual.
ANOVA separa la variación total en variación entre tratamientos y variación dentro de tratamientos. La estadística \(F\) compara los cuadrados medios de ambas fuentes:
\[F=\frac{CM_{\mathrm{entre}}}{CM_{\mathrm{dentro}}}.\]
Un valor de \(F\) suficientemente grande aporta evidencia de diferencias entre medias, bajo los supuestos del modelo.
## Df Sum Sq Mean Sq F value Pr(>F)
## campana 2 36.63 18.314 92.5 5.11e-08 ***
## Residuals 12 2.38 0.198
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Lectura del resultado: ubique el valor
Pr(>F). Si \(p<0.05\), rechace \(H_0\); si \(p\geq0.05\), no la rechace. No rechazar no
significa demostrar que las medias sean idénticas.
En este caso, el valor \(p\) calculado es 5.11e-08. Por tanto, existe evidencia estadística de que al menos una media es diferente.
Para el ANOVA clásico se consideran: observaciones independientes (según el diseño), residuos aproximadamente normales dentro del modelo y varianzas similares entre tratamientos.
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_aov)
## W = 0.95552, p-value = 0.6152
##
## Bartlett test of homogeneity of variances
##
## data: ventas by campana
## Bartlett's K-squared = 0.1026, df = 2, p-value = 0.95
Interpretación responsable: con cinco unidades por
grupo, las pruebas formales de supuestos tienen poca potencia. Examine
también los gráficos y el conocimiento del proceso. La independencia se
fundamenta en el diseño, no se demuestra con
shapiro.test().
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = ventas ~ campana, data = ventas)
##
## $campana
## diff lwr upr p adj
## Influenciadores-Correo 1.70 0.9491966 2.450803 0.0001598
## Redes-Correo -2.12 -2.8708034 -1.369197 0.0000192
## Redes-Influenciadores -3.82 -4.5708034 -3.069197 0.0000000
logistica <- data.frame(
metodo = factor(rep(c('Tradicional','Zonas','Automatizado'), each=6)),
pedidos_hora = c(42,45,43,41,46,44, 48,51,49,52,50,47, 53,57,55,58,56,54)
)
logisticaatencion <- data.frame(
protocolo = factor(rep(c('A','B','C','D'), each=5)),
minutos = c(18,21,19,20,22, 15,14,16,13,15,
12,13,11,14,12, 16,15,17,14,16)
)
atencionPreguntas de discusión: ¿qué ocurre si los agentes más experimentados quedan todos en el mismo protocolo? ¿Qué cambia cuando los tratamientos se asignan sin aleatorización?
Una tabla de contingencia cruza dos variables categóricas y muestra sus frecuencias conjuntas. Para comparar grupos de distinto tamaño conviene usar porcentajes condicionados al grupo correspondiente.
La prueba chi-cuadrado de independencia permite evaluar si dos variables categóricas están asociadas en la población representada por la muestra.
Bajo \(H_0\), la frecuencia esperada de la celda \((i,j)\) es
\[E_{ij}=\frac{(\mathrm{total\ fila\ }i)(\mathrm{total\ columna\ }j)}{n}.\]
La estadística de contraste es
\[\chi^2=\sum_i\sum_j\frac{(O_{ij}-E_{ij})^2}{E_{ij}},\]
con \((r-1)(c-1)\) grados de libertad para una tabla \(r\times c\).
Situación. Una empresa encuesta a 300 clientes y registra el canal utilizado y su nivel de satisfacción.
canal <- matrix(c(65,25,10,
55,30,15,
75,15,10),
nrow=3, byrow=TRUE,
dimnames=list(
Canal=c('Tienda','Web','App'),
Satisfaccion=c('Satisfecho','Neutral','Insatisfecho')))
canal## Satisfaccion
## Canal Satisfecho Neutral Insatisfecho
## Tienda 65 25 10
## Web 55 30 15
## App 75 15 10
## Satisfaccion
## Canal Satisfecho Neutral Insatisfecho Sum
## Tienda 65 25 10 100
## Web 55 30 15 100
## App 75 15 10 100
## Sum 195 70 35 300
## Satisfaccion
## Canal Satisfecho Neutral Insatisfecho
## Tienda 65 25 10
## Web 55 30 15
## App 75 15 10
datos_canal <- as.data.frame(as.table(canal))
ggplot(datos_canal, aes(x=Canal, y=Freq, fill=Satisfaccion)) +
geom_col(position='fill', color='white') +
scale_y_continuous(labels=function(x) paste0(round(x*100),'%')) +
scale_fill_manual(values=c('#169B83','#EA8B35','#C76D78')) +
labs(title='Composición de satisfacción por canal',
x='Canal', y='Proporción de clientes', fill='Satisfacción') + tema##
## Pearson's Chi-squared test
##
## data: canal
## X-squared = 9.5055, df = 4, p-value = 0.04963
## Satisfaccion
## Canal Satisfecho Neutral Insatisfecho
## Tienda 65 23.33333 11.66667
## Web 65 23.33333 11.66667
## App 65 23.33333 11.66667
## Satisfaccion
## Canal Satisfecho Neutral Insatisfecho
## Tienda 0.000000 0.3450328 -0.4879500
## Web -1.240347 1.3801311 0.9759001
## App 1.240347 -1.7251639 -0.4879500
Lectura: el valor \(p\) es 0.0496. A nivel de significancia del 5 %, se rechaza la independencia.
La prueba chi-cuadrado habitual requiere observaciones independientes y frecuencias esperadas suficientemente grandes para que su aproximación sea adecuada. Revise las esperadas; si son pequeñas, considere otras pruebas o métodos según el tipo de tabla.
Para cuantificar asociación en tablas generales puede utilizarse V de Cramér, con valores entre 0 y 1. Un valor mayor indica mayor intensidad de asociación, no causalidad.
n <- sum(canal)
v_cramer <- sqrt(as.numeric(prueba_chi$statistic) /
(n * min(nrow(canal)-1, ncol(canal)-1)))
v_cramer## [1] 0.125867
promo <- matrix(c(84,36, 51,69), nrow=2, byrow=TRUE,
dimnames=list(Promocion=c('Si','No'), Compra=c('Si','No')))
promo## Compra
## Promocion Si No
## Si 84 36
## No 51 69
mercado <- matrix(c(45,35,20, 25,45,30, 20,30,50), nrow=3, byrow=TRUE,
dimnames=list(Pais=c('Colombia','Mexico','Chile'),
Presentacion=c('Pequena','Mediana','Grande')))
mercado## Presentacion
## Pais Pequena Mediana Grande
## Colombia 45 35 20
## Mexico 25 45 30
## Chile 20 30 50
El coeficiente de Pearson \(r\) mide la dirección y fuerza de la asociación lineal entre dos variables cuantitativas. Toma valores entre \(-1\) y \(1\): valores cercanos a \(1\) sugieren asociación lineal positiva, cercanos a \(-1\) asociación negativa, y cercanos a \(0\) poca asociación lineal.
\[r=\frac{\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^n(x_i-\bar{x})^2\sum_{i=1}^n(y_i-\bar{y})^2}}.\]
No confunda: \(r\approx 0\) no demuestra independencia y una correlación alta no demuestra causalidad. Los valores atípicos pueden modificar mucho el coeficiente.
publicidad <- data.frame(
inversion=c(2,3,4,5,6,7,8,9),
ventas=c(24,27,33,35,41,43,48,51))
publicidadggplot(publicidad, aes(inversion, ventas)) +
geom_point(color=col_azul, size=3) +
geom_smooth(method='lm', se=FALSE, color=col_naranja) +
labs(title='Inversión publicitaria y ventas',
x='Inversión (millones de pesos)',
y='Ventas (millones de pesos)') + tema## [1] 0.9959476
##
## Pearson's product-moment correlation
##
## data: publicidad$inversion and publicidad$ventas
## t = 27.126, df = 6, p-value = 1.659e-07
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9768331 0.9992968
## sample estimates:
## cor
## 0.9959476
La prueba contrasta \(H_0:\rho=0\) frente a \(H_1:\rho\neq0\) (bilateral). El coeficiente muestral es 0.996 y la prueba arroja \(p\) = 1.66e-07.
El coeficiente de Spearman \(\rho_s\) calcula la correlación de Pearson entre los rangos de los datos. Es útil para datos ordinales y para estudiar relaciones monótonas, aunque no sean lineales. Si hay empates, R asigna rangos promedio.
Para datos sin empates se puede usar \(\rho_s=1-\frac{6\sum d_i^2}{n(n^2-1)}\), donde \(d_i\) es la diferencia de rangos. Con empates, utilice el cálculo de correlación sobre rangos, en lugar de aplicar mecánicamente esa fórmula simplificada.
Situación. Diez clientes califican la calidad percibida y su intención de volver a comprar en escalas ordinales de 1 a 5.
clientes <- data.frame(
calidad=c(1,2,2,3,3,4,4,5,5,5),
recompra=c(2,1,3,2,4,4,3,5,4,5))
clientes$rango_calidad <- rank(clientes$calidad)
clientes$rango_recompra <- rank(clientes$recompra)
clientesggplot(clientes, aes(calidad, recompra)) +
geom_count(color=col_verde, alpha=.85) +
scale_size_area(max_size=10) +
scale_x_continuous(breaks=1:5) + scale_y_continuous(breaks=1:5) +
labs(title='Calidad percibida e intención de recompra',
x='Calidad (1 a 5)', y='Recompra (1 a 5)', size='Clientes') + tema## [1] 0.8259494
##
## Spearman's rank correlation rho
##
## data: clientes$calidad and clientes$recompra
## S = 28.718, p-value = 0.003236
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.8259494
El coeficiente muestral de Spearman es 0.826. La opción
exact=FALSE evita solicitar una prueba exacta no disponible
con estos empates; el valor \(p\) es
aproximado.
| Pregunta de negocios | Variables | Técnica | Precaución central |
|---|---|---|---|
| ¿Difieren las medias de ventas entre tratamientos aleatorizados? | Factor categórico y respuesta cuantitativa | ANOVA de un factor | Diseño y supuestos |
| ¿Canal y satisfacción categórica están asociados? | Dos categóricas | Chi-cuadrado de independencia | Frecuencias esperadas e independencia |
| ¿Publicidad y ventas se relacionan linealmente? | Dos cuantitativas | Pearson | Linealidad y valores atípicos |
| ¿Las calificaciones ordinales se relacionan de forma monótona? | Dos ordinales | Spearman | Empates e interpretación de rangos |
Una empresa distribuidora quiere mejorar sus resultados. El gerente pregunta:
Trabajo durante la clase: para cada pregunta, identifique variables, formule hipótesis cuando corresponda, seleccione prueba y gráfica, indique qué supuestos verificaría y escriba una conclusión de máximo cuatro líneas dirigida al gerente. Utilice los datos de los ejercicios anteriores como referencia de estructura; en el cierre no se proporcionan nuevas observaciones.
?aov, ?chisq.test,
?cor.test.