¡Entramos a una nueva etapa fascinante del curso! Al pasar a la función ea2 de easyanova, dejamos atrás los diseños de un solo factor y entramos al mundo real de la agroindustria y la agronomía, donde los fenómenos casi nunca dependen de una sola variable.

En un Arreglo Factorial, cruzamos dos o más factores simultáneamente (por ejemplo, evaluar 3 variedades de semilla de maíz cruzadas con 4 dosis de nitrógeno). El objetivo principal, más allá de ahorrar material experimental, es descubrir la interacción: saber si el comportamiento de una variedad cambia dependiendo de la dosis de fertilizante que reciba.

Aquí tienes la estructura pedagógica para iniciar esta nueva unidad en tu Google Colab.


📘 Cuaderno 11: Factorial Doble en Diseño Completamente al Azar (DCA)

a) Introducción Teórica al Factorial Doble en DCA

Un diseño Factorial Doble (\(A \times B\)) en DCA se utiliza cuando queremos evaluar simultáneamente el efecto de dos factores sobre una variable de respuesta, asumiendo que las unidades experimentales son completamente homogéneas (por ejemplo, macetas idénticas en una cámara de ambiente controlado o lotes de jugo en un laboratorio).

El concepto más importante que el estudiante debe aprender aquí es la Interacción (\(A \times B\)). Si la interacción es significativa, significa que los factores no actúan de forma independiente; el efecto del Factor A sobre el rendimiento dependerá del nivel en el que se encuentre el Factor B. En este caso, los “efectos principales” de A y B pasan a un segundo plano, y las recomendaciones agronómicas deben hacerse para combinaciones específicas.

El Modelo Estadístico Lineal: \[y_{ijk} = \mu + \alpha_i + \beta_j + (\alpha\beta)_{ij} + \epsilon_{ijk}\]

Donde: * \(y_{ijk}\): Respuesta en la \(k\)-ésima repetición de la combinación del nivel \(i\) del factor A y el nivel \(j\) del factor B. * \(\mu\): Media general del experimento. * \(\alpha_i\): Efecto principal del \(i\)-ésimo nivel del Factor A. * \(\beta_j\): Efecto principal del \(j\)-ésimo nivel del Factor B. * \((\alpha\beta)_{ij}\): Efecto de la interacción entre el nivel \(i\) de A y el nivel \(j\) de B. * \(\epsilon_{ijk}\): Error experimental.

Tabla ANOVA:

Fuente de Variación Grados de Libertad (GL) Suma de Cuadrados (SC) Cuadrado Medio (CM) F calculado
Factor A \(a - 1\) \(SCA\) \(CMA = \frac{SCA}{a-1}\) \(\frac{CMA}{CME}\)
Factor B \(b - 1\) \(SCB\) \(CMB = \frac{SCB}{b-1}\) \(\frac{CMB}{CME}\)
Interacción (AxB) \((a - 1)(b - 1)\) \(SCAB\) \(CMAB = \frac{SCAB}{(a-1)(b-1)}\) \(\frac{CMAB}{CME}\)
Error \(ab(r - 1)\) \(SCE\) \(CME = \frac{SCE}{ab(r-1)}\)
Total \(abr - 1\) \(SCT\)

(Nota: \(a\) = niveles de A, \(b\) = niveles de B, \(r\) = repeticiones).


b) Miniguía: Solución Manual (Papel y Lápiz)

Para comprender de dónde salen las sumas de cuadrados, el cálculo manual se divide enfocándose en los totales de cada factor y de las celdas combinadas:

  1. Totales y Factor de Corrección (FC): Calcula el gran total (\(Y_{...}\)) y el \(FC = \frac{Y_{...}^2}{abr}\).
  2. Suma de Cuadrados Total (SCT): Suma de todos los datos al cuadrado menos el FC.
  3. SC de Efectos Principales (SCA y SCB): * \(SCA = \sum \frac{Y_{i..}^2}{br} - FC\) (Totales de cada nivel de A al cuadrado, divididos por el número de datos que los forman).
    • \(SCB = \sum \frac{Y_{.j.}^2}{ar} - FC\)
  4. SC de Tratamientos o Subtotal (SCTrat): Se calcula usando los totales de cada celda combinada (\(Y_{ij.}\), es decir, la suma de las repeticiones de la combinación A1B1, A1B2, etc.). \[SCTrat = \sum \sum \frac{Y_{ij.}^2}{r} - FC\]
  5. SC de la Interacción (SCAB): Se obtiene por diferencia. Es la variabilidad de las combinaciones que no es explicada por los efectos principales simples. \[SCAB = SCTrat - SCA - SCB\]
  6. Suma de Cuadrados del Error (SCE): \[SCE = SCT - SCTrat\]
  7. Conclusión: Calcular los Cuadrados Medios y los estadísticos F. La regla de oro: Siempre se evalúa primero el F de la Interacción. Si es significativo, se analizan los efectos simples (A dentro de cada nivel de B y viceversa).

c) Exploración de Datos (EDA) en R

Para la función ea2, usaremos el conjunto de datos data9 que viene en el paquete easyanova. Las columnas representan el Factor 1, el Factor 2 y la Respuesta (al ser un DCA, no hay columna de bloques).

library(easyanova)

# Cargar el dataset de ejemplo para Factorial en DCA
data(data9)

# Inspeccionar los datos: Col 1 = Factor 1, Col 2 = Factor 2, Col 3 = Respuesta
head(data9)
summary(data9)

# EDA: Gráfico de Interacción (La herramienta visual más importante en factoriales)
# Un gráfico de líneas cruzadas nos dará una pista fuerte de si existe interacción
library(ggplot2)

# Calculamos las medias por cada combinación de factores para graficar
medias_interaccion <- aggregate(data9[,3], by = list(Factor1 = data9[,1], Factor2 = data9[,2]), FUN = mean)
colnames(medias_interaccion)[3] <- "Respuesta_Media"

ggplot(medias_interaccion, aes(x = Factor1, y = Respuesta_Media, group = Factor2, color = Factor2)) +
  geom_line(size = 1.2) +
  geom_point(size = 4) +
  labs(title = "Gráfico de Interacción: Factor 1 x Factor 2",
       subtitle = "Si las líneas no son paralelas (se cruzan o divergen), sugiere una interacción fuerte",
       x = "Niveles del Factor 1",
       y = "Respuesta Media",
       color = "Factor 2") +
  theme_minimal()

Propósito pedagógico: Este gráfico es el corazón de la clase. Pregunta a tus alumnos: “¿Las líneas corren paralelas como rieles de tren? Si es así, los factores actúan independientemente. Si las líneas se cruzan (por ejemplo, la Variedad 1 rinde más con la Dosis A, pero la Variedad 2 rinde más con la Dosis B), entonces hay interacción y no podemos dar una recomendación general.”


d) Plantilla de Código R: Solución con ea2

La sintaxis cambia ligeramente. Ahora usamos la función ea2 y establecemos design = 1 para indicar que el arreglo factorial se montó bajo un DCA. El paquete realiza automáticamente el desdoblamiento de los grados de libertad si la interacción es significativa.

# Ejecutar Factorial Doble en DCA (ea2, design = 1)
# Orden requerido: Col 1 = Factor 1, Col 2 = Factor 2, Col 3 = Respuesta
resultado_factorial <- ea2(data9, design = 1)

# Imprimir los resultados
# La salida mostrará la tabla ANOVA y, dependiendo de la interacción, la prueba de medias de efectos principales o efectos simples
print(resultado_factorial)

e) Prompts Sugeridos para tus Estudiantes

Motiva a tus alumnos a discutir la interpretación del diseño factorial conmigo:

  1. “Hola. Analizando la tabla ANOVA de este diseño factorial doble, ¿cuál es el valor p de la interacción (AxB)? Según ese valor, ¿puedo recomendar la mejor variedad de cultivo de forma general, o tengo que recomendar una variedad específica para cada tipo de fertilizante?”
  2. “En el output de easyanova, veo que se hizo un ‘desdoblamiento’ (análisis de efectos simples). ¿Podrías explicarme con palabras sencillas por qué el software decidió hacer esto en lugar de solo comparar los promedios generales del Factor A?”
  3. “Si uno de mis factores (por ejemplo, la Temperatura de secado) es cuantitativo y el otro (Variedad de fruta) es cualitativo, ¿cómo cambiaría la forma en que presento los resultados a mi equipo agroindustrial en lugar de usar una simple prueba de letras de Tukey?”

f) Plantillas Alternativas: Python y Julia

En Python (Usando statsmodels y seaborn): En Python, la notación de fórmula FactorA * FactorB le indica al modelo que incluya tanto los efectos principales como la interacción.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols

# Dataset simulado (Ej: Temperatura, Enzima, Rendimiento_Jugo)
data = {
    'Temperatura': ['T1','T1','T1', 'T2','T2','T2', 'T1','T1','T1', 'T2','T2','T2'],
    'Enzima':      ['E1','E1','E1', 'E1','E1','E1', 'E2','E2','E2', 'E2','E2','E2'],
    'Rendimiento': [45, 47, 44,     60, 62, 59,     50, 52, 51,     40, 42, 38]
}
df = pd.DataFrame(data)

# EDA: Gráfico de Interacción (pointplot es excelente para esto)
sns.pointplot(x='Temperatura', y='Rendimiento', hue='Enzima', data=df, markers=["o", "s"], capsize=.1)
plt.title('Interacción: Temperatura x Enzima')
plt.show()

# Ajuste del modelo Factorial Doble (El operador * incluye principales e interacción)
modelo_factorial = ols('Rendimiento ~ C(Temperatura) * C(Enzima)', data=df).fit()
tabla_anova = sm.stats.anova_lm(modelo_factorial, typ=2)

print("\n--- Tabla ANOVA (Factorial Doble en DCA) ---")
print(tabla_anova)

En Julia (Usando DataFrames y GLM):

using DataFrames, GLM

# DataFrame simulado
df = DataFrame(
    Temperatura = repeat(["T1", "T2"], inner=3, outer=2),
    Enzima = repeat(["E1", "E2"], inner=6),
    Rendimiento = [45.0, 47.0, 44.0, 60.0, 62.0, 59.0, 50.0, 52.0, 51.0, 40.0, 42.0, 38.0]
)

df.Temperatura = categorical(df.Temperatura)
df.Enzima = categorical(df.Enzima)

# En GLM, el operador * despliega la fórmula a: Temperatura + Enzima + Temperatura&Enzima
modelo_fac = lm(@formula(Rendimiento ~ Temperatura * Enzima), df)

println("--- Resumen del Modelo Factorial Doble ---")
println(modelo_fac)

Con esta base, los estudiantes están listos para entender casi cualquier experimento complejo.