1 Ejercicio 1. DCA: biomasa seca y dosis de nitrógeno

1.1 tabla Anova

1.1.1 Problema

Se desea determinar si la biomasa seca media de Arabidopsis thaliana difiere entre cuatro dosis de nitrógeno: N0, N50, N100 y N150. El diseño es un DCA con 24 unidades experimentales, 6 réplicas por tratamiento.

1.1.2 Datos

datos1 <- data.frame(
  Tratamiento = rep(c("N0", "N50", "N100", "N150"), each = 6),
  Biomasa = c(
    0.42, 0.39, 0.47, 0.44, 0.41, 0.45,
    0.58, 0.55, 0.62, 0.60, 0.57, 0.63,
    0.74, 0.72, 0.78, 0.80, 0.75, 0.77,
    0.70, 0.68, 0.73, 0.71, 0.69, 0.74
  )
)

datos1
##    Tratamiento Biomasa
## 1           N0    0.42
## 2           N0    0.39
## 3           N0    0.47
## 4           N0    0.44
## 5           N0    0.41
## 6           N0    0.45
## 7          N50    0.58
## 8          N50    0.55
## 9          N50    0.62
## 10         N50    0.60
## 11         N50    0.57
## 12         N50    0.63
## 13        N100    0.74
## 14        N100    0.72
## 15        N100    0.78
## 16        N100    0.80
## 17        N100    0.75
## 18        N100    0.77
## 19        N150    0.70
## 20        N150    0.68
## 21        N150    0.73
## 22        N150    0.71
## 23        N150    0.69
## 24        N150    0.74

1.1.3 Modelo ANOVA

El modelo para el DCA es:

\[ Y_{ij} = \mu + \tau_i + \varepsilon_{ij}, \qquad \varepsilon_{ij} \sim N(0,\sigma^2) \]

Donde:

  • \(Y_{ij}\): biomasa observada en la unidad \(j\) del tratamiento \(i\),
  • \(\mu\): media general,
  • \(\tau_i\): efecto del tratamiento,
  • \(\varepsilon_{ij}\): error aleatorio.

Hipótesis:

\[ H_0: \mu_{N0} = \mu_{N50} = \mu_{N100} = \mu_{N150} \]

\[ H_1: \text{al menos una media difiere} \]

mod1 <- aov(Biomasa ~ Tratamiento, data = datos1)
summary(mod1)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Tratamiento  3 0.3857 0.12856   163.1 3.17e-14 ***
## Residuals   20 0.0158 0.00079                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación. El valor-p del factor Tratamiento es menor que 0.05, por lo tanto se rechaza la hipótesis nula. Existe evidencia estadística de que la biomasa media difiere entre las dosis de nitrógeno.

1.2 Verificación de supuestos

1.2.1 Gráficos diagnósticos

par(mfrow = c(2,2))
plot(mod1)

par(mfrow = c(1,1))

1.2.2 Prueba de normalidad de Shapiro-Wilk

shapiro.test(residuals(mod1))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(mod1)
## W = 0.94374, p-value = 0.1975

1.2.3 Prueba de homogeneidad de varianzas de Levene

leveneTest(Biomasa ~ Tratamiento, data = datos1)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  3  0.2817  0.838
##       20

Conclusión sobre supuestos.

  • La prueba de Shapiro-Wilk presenta valor-p mayor que 0.05, por lo que no se evidencia desviación importante de la normalidad.
  • La prueba de Levene presenta valor-p mayor que 0.05, por lo que no se rechaza la igualdad de varianzas.
  • En consecuencia, los supuestos del ANOVA se consideran razonablemente cumplidos.

1.3 Comparación múltiple de medias de Tukey

tukey1 <- TukeyHSD(mod1)
tukey1
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Biomasa ~ Tratamiento, data = datos1)
## 
## $Tratamiento
##                  diff        lwr          upr     p adj
## N100-N0    0.33000000  0.2846281  0.375371936 0.0000000
## N150-N0    0.27833333  0.2329614  0.323705269 0.0000000
## N50-N0     0.16166667  0.1162947  0.207038602 0.0000000
## N150-N100 -0.05166667 -0.0970386 -0.006294731 0.0220847
## N50-N100  -0.16833333 -0.2137053 -0.122961398 0.0000000
## N50-N150  -0.11666667 -0.1620386 -0.071294731 0.0000032
medias1 <- datos1 %>%
  group_by(Tratamiento) %>%
  summarise(
    Media = mean(Biomasa),
    DE = sd(Biomasa)
  )

letras1 <- multcompLetters4(mod1, tukey1)
letras1_df <- data.frame(
  Tratamiento = names(letras1$Tratamiento$Letters),
  Grupo = letras1$Tratamiento$Letters
)

resumen1 <- left_join(medias1, letras1_df, by = "Tratamiento") %>%
  arrange(desc(Media))

kable(resumen1, digits = 3,
      caption = "Medias, desviaciones estándar y grupos de Tukey - Ejercicio 1") %>%
  kable_styling(full_width = FALSE)
Medias, desviaciones estándar y grupos de Tukey - Ejercicio 1
Tratamiento Media DE Grupo
N100 0.760 0.029 a
N150 0.708 0.023 b
N50 0.592 0.031 c
N0 0.430 0.029 d

Interpretación. Todas las comparaciones por pares resultan significativas. El mayor promedio de biomasa se observa en N100, seguido de N150, luego N50 y finalmente N0. Por tanto, la dosis intermedia-alta (N100) produjo la mayor biomasa promedio.

1.4 Boxplot

ggplot(datos1, aes(x = Tratamiento, y = Biomasa, fill = Tratamiento)) +
  geom_boxplot(alpha = 0.8) +
  theme_minimal() +
  labs(
    title = "Biomasa seca por tratamiento de nitrógeno",
    x = "Tratamiento",
    y = "Biomasa seca (g)"
  ) +
  theme(legend.position = "none")

Comentario del gráfico. La variabilidad dentro de cada tratamiento es baja y no se aprecian valores atípicos marcados. Se observa una clara separación entre tratamientos, especialmente entre N0 y los niveles superiores de nitrógeno.

La dosis de nitrógeno influye significativamente sobre la biomasa seca de las plántulas. En estos datos, la dosis N100 produjo la mayor biomasa promedio, mientras que N0 mostró el menor crecimiento. Biológicamente, esto sugiere que una fertilización intermedia-alta favorece el desarrollo de las plántulas, aunque incrementar de N100 a N150 no mejora la respuesta, sino que la reduce ligeramente.


2 Ejercicio 2. DBCA: rendimiento de tomate y control biológico

2.1 Ajuste del modelo Anova

Se desea evaluar diferencias en el rendimiento de tomate entre cuatro métodos de control biológico, controlando la variabilidad entre lotes mediante bloques. El diseño es un DBCA con 4 tratamientos y 6 bloques. fileciteturn0file0L27-L43

2.1.1 Datos

datos2 <- data.frame(
  Bloque = rep(paste0("B", 1:6), times = 4),
  Tratamiento = rep(c("Depredadores", "Hongos", "Extracto", "ControlQ"), each = 6),
  Rendimiento = c(
    5.9, 6.1, 6.0, 6.3, 6.2, 6.1,
    5.5, 5.7, 5.6, 5.8, 5.7, 5.6,
    5.2, 5.3, 5.4, 5.5, 5.4, 5.3,
    6.0, 6.2, 6.1, 6.4, 6.3, 6.2
  )
)

datos2
##    Bloque  Tratamiento Rendimiento
## 1      B1 Depredadores         5.9
## 2      B2 Depredadores         6.1
## 3      B3 Depredadores         6.0
## 4      B4 Depredadores         6.3
## 5      B5 Depredadores         6.2
## 6      B6 Depredadores         6.1
## 7      B1       Hongos         5.5
## 8      B2       Hongos         5.7
## 9      B3       Hongos         5.6
## 10     B4       Hongos         5.8
## 11     B5       Hongos         5.7
## 12     B6       Hongos         5.6
## 13     B1     Extracto         5.2
## 14     B2     Extracto         5.3
## 15     B3     Extracto         5.4
## 16     B4     Extracto         5.5
## 17     B5     Extracto         5.4
## 18     B6     Extracto         5.3
## 19     B1     ControlQ         6.0
## 20     B2     ControlQ         6.2
## 21     B3     ControlQ         6.1
## 22     B4     ControlQ         6.4
## 23     B5     ControlQ         6.3
## 24     B6     ControlQ         6.2

2.1.2 Modelo ANOVA con bloques

El modelo del DBCA es:

\[ Y_{ij} = \mu + \tau_i + \beta_j + \varepsilon_{ij}, \qquad \varepsilon_{ij} \sim N(0,\sigma^2) \]

Donde:

  • \(\tau_i\): efecto del tratamiento,
  • \(\beta_j\): efecto del bloque.

Hipótesis para tratamiento:

\[ H_0: \mu_1 = \mu_2 = \mu_3 = \mu_4 \]

Hipótesis para bloque:

\[ H_0: \beta_1 = \beta_2 = \cdots = \beta_6 = 0 \]

mod2 <- aov(Rendimiento ~ Tratamiento + Bloque, data = datos2)
summary(mod2)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Tratamiento  3  2.835   0.945   472.5 4.56e-15 ***
## Bloque       5  0.280   0.056    28.0 4.21e-07 ***
## Residuals   15  0.030   0.002                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación. Tanto el factor Tratamiento como el factor Bloque presentan valores-p menores que 0.05. Entonces:

  • existen diferencias significativas entre tratamientos,
  • y también hay diferencias entre lotes, lo que justifica el uso del bloqueo.

2.2 Verificación de supuestos

2.2.1 Gráficos diagnósticos

par(mfrow = c(2,2))
plot(mod2)

par(mfrow = c(1,1))

2.2.2 Normalidad

shapiro.test(residuals(mod2))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(mod2)
## W = 0.88983, p-value = 0.01318

2.2.3 Homogeneidad de varianzas

leveneTest(Rendimiento ~ Tratamiento, data = datos2)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  3  0.1042 0.9567
##       20

Conclusión sobre supuestos.

  • La prueba de Levene no muestra evidencia de heterocedasticidad.
  • La prueba de Shapiro-Wilk indica que se rechaza la hipótesis de normalidad en los residuales. Esta prueba puede resultar sensible debido a que los datos son muy regulares y con poca variación residual.
  • En términos prácticos, la homogeneidad de varianzas se cumple claramente y la normalidad no muestra desviaciones severas en los diagnósticos gráficos, aunque el test formal indica que se cumple este supuesto.

2.3 Comparación múltiple de Tukey para tratamientos

mod2_trat <- aov(Rendimiento ~ Tratamiento, data = datos2)
tukey2 <- TukeyHSD(mod2_trat)
tukey2
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Rendimiento ~ Tratamiento, data = datos2)
## 
## $Tratamiento
##                        diff         lwr        upr     p adj
## Depredadores-ControlQ -0.10 -0.30118621  0.1011862 0.5189818
## Extracto-ControlQ     -0.85 -1.05118621 -0.6488138 0.0000000
## Hongos-ControlQ       -0.55 -0.75118621 -0.3488138 0.0000013
## Extracto-Depredadores -0.75 -0.95118621 -0.5488138 0.0000000
## Hongos-Depredadores   -0.45 -0.65118621 -0.2488138 0.0000228
## Hongos-Extracto        0.30  0.09881379  0.5011862 0.0024351
medias2 <- datos2 %>%
  group_by(Tratamiento) %>%
  summarise(
    Media = mean(Rendimiento),
    DE = sd(Rendimiento)
  )

letras2 <- multcompLetters4(mod2_trat, tukey2)
letras2_df <- data.frame(
  Tratamiento = names(letras2$Tratamiento$Letters),
  Grupo = letras2$Tratamiento$Letters
)

resumen2 <- left_join(medias2, letras2_df, by = "Tratamiento") %>%
  arrange(desc(Media))

kable(resumen2, digits = 3,
      caption = "Medias, desviaciones estándar y grupos de Tukey - Ejercicio 2") %>%
  kable_styling(full_width = FALSE)
Medias, desviaciones estándar y grupos de Tukey - Ejercicio 2
Tratamiento Media DE Grupo
ControlQ 6.20 0.141 a
Depredadores 6.10 0.141 a
Hongos 5.65 0.105 b
Extracto 5.35 0.105 c

Interpretación.

  • ControlQ y Depredadores no difieren significativamente entre sí.
  • Ambos superan significativamente a Hongos y a Extracto.
  • Hongos supera significativamente a Extracto.

2.3.1 Gráfico de medias

ggplot(datos2, aes(x = Tratamiento, y = Rendimiento, fill = Tratamiento)) +
  stat_summary(fun = mean, geom = "bar", color = "black") +
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", width = 0.2) +
  theme_minimal() +
  labs(
    title = "Rendimiento medio por tratamiento",
    x = "Tratamiento",
    y = "Rendimiento (kg/parcela)"
  ) +
  theme(legend.position = "none")

2.4 Papel del bloqueo

Para mostrar el efecto del bloqueo, comparamos el modelo DBCA con un DCA hipotético sin bloques.

mod2_sin_bloque <- aov(Rendimiento ~ Tratamiento, data = datos2)
anova(mod2_sin_bloque)
## Analysis of Variance Table
## 
## Response: Rendimiento
##             Df Sum Sq Mean Sq F value    Pr(>F)    
## Tratamiento  3  2.835  0.9450  60.968 3.057e-10 ***
## Residuals   20  0.310  0.0155                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod2)
## Analysis of Variance Table
## 
## Response: Rendimiento
##             Df Sum Sq Mean Sq F value    Pr(>F)    
## Tratamiento  3  2.835   0.945   472.5 4.558e-15 ***
## Bloque       5  0.280   0.056    28.0 4.207e-07 ***
## Residuals   15  0.030   0.002                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Discusión. En el modelo sin bloques, la suma de cuadrados residual es mayor. Al incorporar el bloque, parte de la variabilidad atribuible a diferencias entre lotes se separa del error experimental. Esto reduce el error residual y aumenta la precisión para detectar diferencias entre tratamientos. Aquí el bloqueo fue útil porque los lotes sí presentaban diferencias sistemáticas.

Conclusión biológica

El método de control aplicado influye significativamente en el rendimiento del tomate. Los tratamientos ControlQ y Depredadores presentaron los mayores rendimientos, mientras que Extracto tuvo el menor desempeño. Además, el efecto de los lotes fue significativo, indicando que la fertilidad inicial o las condiciones del terreno afectaron la respuesta y que el bloqueo fue apropiado.


3 Ejercicio 3.

3.1 Ajuste del modelo Anova

Se desea determinar si el régimen de luz afecta el contenido de clorofila medido mediante índice SPAD, controlando diferencias entre bancales. El diseño es un DBCA con 3 tratamientos y 5 bloques.

3.1.1 Datos del problema

datos3 <- data.frame(
  Bloque = rep(paste0("B", 1:5), times = 3),
  Luz = rep(c("Baja", "Media", "Alta"), each = 5),
  SPAD = c(
    31.2, 30.5, 31.0, 30.8, 31.3,
    35.0, 34.6, 35.2, 34.8, 35.1,
    33.1, 33.3, 33.0, 33.4, 33.2
  )
)

datos3
##    Bloque   Luz SPAD
## 1      B1  Baja 31.2
## 2      B2  Baja 30.5
## 3      B3  Baja 31.0
## 4      B4  Baja 30.8
## 5      B5  Baja 31.3
## 6      B1 Media 35.0
## 7      B2 Media 34.6
## 8      B3 Media 35.2
## 9      B4 Media 34.8
## 10     B5 Media 35.1
## 11     B1  Alta 33.1
## 12     B2  Alta 33.3
## 13     B3  Alta 33.0
## 14     B4  Alta 33.4
## 15     B5  Alta 33.2

3.1.2 Modelo ANOVA con bloques

mod3 <- aov(SPAD ~ Luz + Bloque, data = datos3)
summary(mod3)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Luz          2  39.81  19.905 333.598 1.97e-08 ***
## Bloque       4   0.27   0.067   1.117    0.412    
## Residuals    8   0.48   0.060                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación. El factor Luz presenta un valor-p muy pequeño, por lo que existe evidencia de diferencias en el índice SPAD entre regímenes de luz. En contraste, Bloque no resulta significativo, de modo que los bancales no parecen introducir una variación importante en esta respuesta.

3.2 Verificación de supuestos

3.2.1 Gráficos diagnósticos

par(mfrow = c(2,2))
plot(mod3)

par(mfrow = c(1,1))

3.2.2 Normalidad

shapiro.test(residuals(mod3))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(mod3)
## W = 0.91487, p-value = 0.1608

3.2.3 Homogeneidad de varianzas

leveneTest(SPAD ~ Luz, data = datos3)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2   0.871 0.4434
##       12

Conclusión sobre supuestos. Los residuales no muestran desviaciones importantes de normalidad y las varianzas entre tratamientos pueden considerarse homogéneas. Por tanto, el ANOVA es adecuado para estos datos.

3.3 Comparación múltiple de Tukey

mod3_trat <- aov(SPAD ~ Luz, data = datos3)
tukey3 <- TukeyHSD(mod3_trat)
tukey3
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = SPAD ~ Luz, data = datos3)
## 
## $Luz
##             diff       lwr       upr p adj
## Baja-Alta  -2.24 -2.660136 -1.819864 0e+00
## Media-Alta  1.74  1.319864  2.160136 3e-07
## Media-Baja  3.98  3.559864  4.400136 0e+00
medias3 <- datos3 %>%
  group_by(Luz) %>%
  summarise(
    Media = mean(SPAD),
    DE = sd(SPAD)
  )

letras3 <- multcompLetters4(mod3_trat, tukey3)
letras3_df <- data.frame(
  Luz = names(letras3$Luz$Letters),
  Grupo = letras3$Luz$Letters
)

resumen3 <- left_join(medias3, letras3_df, by = "Luz") %>%
  arrange(desc(Media))

kable(resumen3, digits = 3,
      caption = "Medias, desviaciones estándar y grupos de Tukey - Ejercicio 3") %>%
  kable_styling(full_width = FALSE)
Medias, desviaciones estándar y grupos de Tukey - Ejercicio 3
Luz Media DE Grupo
Media 34.94 0.241 a
Alta 33.20 0.158 b
Baja 30.96 0.321 c

Interpretación. Todas las comparaciones por pares son significativas. El mayor contenido de clorofila se observa bajo Luz Media, seguido de Luz Alta, mientras que Luz Baja presenta el menor valor de SPAD.

3.3.1 Gráfico de apoyo

ggplot(datos3, aes(x = Luz, y = SPAD, fill = Luz)) +
  geom_boxplot(alpha = 0.8) +
  theme_minimal() +
  labs(
    title = "Índice SPAD según régimen de luz",
    x = "Régimen de luz",
    y = "SPAD"
  ) +
  theme(legend.position = "none")

3.4 Interpretación biológica

El régimen de luz afecta significativamente el contenido de clorofila. En estos datos, la luz media genera el mayor índice SPAD, lo que sugiere una condición más favorable para la acumulación de clorofila. La luz baja produce los valores más reducidos, posiblemente por limitación en la actividad fotosintética. La luz alta, aunque supera a la baja, no alcanza los valores observados en el nivel medio, lo que podría sugerir una condición subóptima frente al régimen intermedio.