1 Objetivo de la clase

En esta clase aprenderemos la lógica básica de un Diseño Completamente al Azar (DCA) usando R.

La idea principal es comprender la secuencia:

Experimento → datos → exploración → visualización → hipótesis → ANOVA → comparación de medias → supuestos → conclusión agropecuaria

Trabajaremos con el conjunto de datos sweetpotato, disponible en el paquete agricolae.

2 1. ¿Qué es un Diseño Completamente al Azar?

Un Diseño Completamente al Azar (DCA) se utiliza cuando tenemos varias unidades experimentales relativamente homogéneas y queremos asignar tratamientos de forma aleatoria.

El modelo estadístico puede expresarse como:

\[Y_{ij} = \mu + \tau_i + \varepsilon_{ij}\]

En palabras simples:

Variable respuesta = media general + efecto del tratamiento + error

En este ejemplo estudiaremos el rendimiento de camote bajo diferentes tratamientos asociados con infección viral.

3 2. Instalar y cargar los paquetes

# IMPORTANTE:
# install.packages() se utiliza solamente la primera vez que
# instalamos un paquete en un computador.

# Si no tiene instalados estos paquetes, quite el símbolo #:
# install.packages("agricolae")
# install.packages("ggplot2")
# install.packages("dplyr")

# Cargar los paquetes
library(agricolae)
library(ggplot2)
library(dplyr)

4 3. Cargar el conjunto de datos

# Cargar el conjunto de datos sweetpotato
data(sweetpotato)

# Mostrar los datos
sweetpotato
##    virus yield
## 1     cc  28.5
## 2     cc  21.7
## 3     cc  23.0
## 4     fc  14.9
## 5     fc  10.6
## 6     fc  13.1
## 7     ff  41.8
## 8     ff  39.2
## 9     ff  28.0
## 10    oo  38.2
## 11    oo  40.4
## 12    oo  32.1

4.1 ¿Qué representan las variables?

El conjunto contiene dos variables principales:

  • virus: tratamiento aplicado.
  • yield: rendimiento obtenido en kg por parcela.

Los tratamientos son:

  • cc: plantas infectadas con SPCSV.
  • fc: plantas infectadas con dos virus.
  • ff: plantas infectadas con SPFMV.
  • oo: plantas sanas, utilizadas como control.

Por lo tanto:

  • Tratamiento: virus
  • Variable respuesta: yield

La unidad experimental es la parcela sobre la cual se aplica el tratamiento y se registra el rendimiento.

5 4. Exploración inicial

Antes de realizar cualquier análisis estadístico, debemos conocer nuestros datos.

5.1 Primeras observaciones

head(sweetpotato)
##   virus yield
## 1    cc  28.5
## 2    cc  21.7
## 3    cc  23.0
## 4    fc  14.9
## 5    fc  10.6
## 6    fc  13.1

head() permite observar rápidamente las primeras filas.

5.2 Estructura de los datos

str(sweetpotato)
## 'data.frame':    12 obs. of  2 variables:
##  $ virus: Factor w/ 4 levels "cc","fc","ff",..: 1 1 1 2 2 2 3 3 3 4 ...
##  $ yield: num  28.5 21.7 23 14.9 10.6 13.1 41.8 39.2 28 38.2 ...

str() muestra el tipo de cada variable y la estructura general del objeto.

5.3 Resumen general

summary(sweetpotato)
##  virus      yield      
##  cc:3   Min.   :10.60  
##  fc:3   1st Qu.:20.00  
##  ff:3   Median :28.25  
##  oo:3   Mean   :27.62  
##         3rd Qu.:38.45  
##         Max.   :41.80

summary() proporciona un resumen rápido de cada variable.

5.4 Número de repeticiones por tratamiento

table(sweetpotato$virus)
## 
## cc fc ff oo 
##  3  3  3  3

table() permite contar cuántas observaciones existen para cada tratamiento.

6 5. Estadísticas descriptivas

Ahora calcularemos estadísticas sencillas para cada tratamiento.

resumen <- sweetpotato %>%
  group_by(virus) %>%
  summarise(
    n = n(),                  # Número de observaciones
    media = mean(yield),      # Rendimiento promedio
    desviacion = sd(yield),   # Desviación estándar
    minimo = min(yield),      # Valor mínimo
    maximo = max(yield)       # Valor máximo
  )

resumen
## # A tibble: 4 × 6
##   virus     n media desviacion minimo maximo
##   <fct> <int> <dbl>      <dbl>  <dbl>  <dbl>
## 1 cc        3  24.4       3.61   21.7   28.5
## 2 fc        3  12.9       2.16   10.6   14.9
## 3 ff        3  36.3       7.33   28     41.8
## 4 oo        3  36.9       4.3    32.1   40.4

Estas estadísticas nos permiten responder preguntas como:

  • ¿Qué tratamiento tiene mayor rendimiento promedio?
  • ¿Cuál presenta mayor variabilidad?
  • ¿Qué tan diferentes parecen ser los tratamientos antes del ANOVA?

Recuerde: una diferencia numérica entre medias no necesariamente significa una diferencia estadísticamente significativa.

7 6. Visualización con ggplot2

7.1 Boxplot

ggplot(sweetpotato, aes(x = virus, y = yield, fill = virus)) +
  geom_boxplot() +
  labs(
    title = "Rendimiento de camote según tratamiento",
    x = "Tratamiento",
    y = "Rendimiento (kg por parcela)"
  ) +
  theme_minimal()

El boxplot ayuda a comparar la distribución de los datos, su dispersión y posibles valores extremos.

7.2 Observaciones individuales

ggplot(sweetpotato, aes(x = virus, y = yield)) +
  geom_point(size = 3) +
  labs(
    title = "Observaciones individuales por tratamiento",
    x = "Tratamiento",
    y = "Rendimiento (kg por parcela)"
  ) +
  theme_minimal()

Este gráfico muestra directamente los valores registrados en cada tratamiento.

7.3 Gráfico de medias

ggplot(resumen, aes(x = virus, y = media)) +
  geom_col() +
  labs(
    title = "Rendimiento promedio por tratamiento",
    x = "Tratamiento",
    y = "Rendimiento promedio (kg)"
  ) +
  theme_minimal()

Este gráfico facilita comparar visualmente las medias.

8 7. Hipótesis del ANOVA

Las hipótesis son:

\[H_0: \mu_{cc} = \mu_{fc} = \mu_{ff} = \mu_{oo}\]

H₀: todos los tratamientos tienen el mismo rendimiento promedio.

H₁: al menos uno de los tratamientos presenta una media diferente.

9 8. Análisis de varianza

modelo <- aov(yield ~ virus, data = sweetpotato)

summary(modelo)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## virus        3 1170.2   390.1   17.34 0.000733 ***
## Residuals    8  179.9    22.5                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

9.1 ¿Cómo interpretar la tabla ANOVA?

Los elementos principales son:

  • Tratamiento: factor que estamos evaluando.
  • Df: grados de libertad.
  • Sum Sq: suma de cuadrados; mide variabilidad.
  • Mean Sq: cuadrado medio.
  • F value: compara la variabilidad entre tratamientos con la variabilidad dentro de tratamientos.
  • Pr(>F): valor p.

Regla sencilla:

  • Si p < 0.05, rechazamos H₀.
  • Si p >= 0.05, no tenemos evidencia suficiente para rechazar H₀.

Si rechazamos H₀, concluimos que al menos una media es diferente.

10 9. Comparación de medias

Si el ANOVA resulta significativo, podemos utilizar Tukey para identificar qué tratamientos son diferentes.

tukey <- HSD.test(
  modelo,
  "virus",
  group = TRUE,
  console = TRUE
)
## 
## Study: modelo ~ "virus"
## 
## HSD Test for yield 
## 
## Mean Square Error:  22.48917 
## 
## virus,  means
## 
##       yield      std r       se  Min  Max   Q25  Q50   Q75
## cc 24.40000 3.609709 3 2.737953 21.7 28.5 22.35 23.0 25.75
## fc 12.86667 2.159475 3 2.737953 10.6 14.9 11.85 13.1 14.00
## ff 36.33333 7.333030 3 2.737953 28.0 41.8 33.60 39.2 40.50
## oo 36.90000 4.300000 3 2.737953 32.1 40.4 35.15 38.2 39.30
## 
## Alpha: 0.05 ; DF Error: 8 
## Critical Value of Studentized Range: 4.52881 
## 
## Minimun Significant Difference: 12.39967 
## 
## Treatments with the same letter are not significantly different.
## 
##       yield groups
## oo 36.90000      a
## ff 36.33333     ab
## cc 24.40000     bc
## fc 12.86667      c
tukey$groups
##       yield groups
## oo 36.90000      a
## ff 36.33333     ab
## cc 24.40000     bc
## fc 12.86667      c

10.1 Interpretación de las letras

La regla es:

Tratamientos con la misma letra no presentan diferencias significativas entre sí.

Por ejemplo:

Tratamiento   Media   Grupo
oo            ...       a
ff            ...       a
cc            ...       b
fc            ...       c

En este caso:

  • oo y ff comparten la letra a, por lo tanto no son diferentes estadísticamente.
  • cc pertenece a otro grupo.
  • fc pertenece a otro grupo.

11 10. Supuestos del ANOVA

Los tres supuestos principales son:

  1. Normalidad de los residuos.
  2. Homogeneidad de varianzas.
  3. Independencia de los errores.

11.1 Gráficos de diagnóstico

par(mfrow = c(2, 2))

plot(modelo)

par(mfrow = c(1, 1))

Los gráficos más importantes para una introducción son:

  • Residuals vs Fitted: buscamos puntos dispersos sin patrones claros.
  • Normal Q-Q: buscamos que los puntos sigan aproximadamente la línea recta.

11.2 Normalidad de los residuos

residuos <- residuals(modelo)

shapiro.test(residuos)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.95878, p-value = 0.7663

Interpretación introductoria:

  • p > 0.05: no encontramos evidencia fuerte contra la normalidad.
  • p < 0.05: podría existir un problema de normalidad.

11.3 Homogeneidad de varianzas

bartlett.test(yield ~ virus, data = sweetpotato)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  yield by virus
## Bartlett's K-squared = 2.3886, df = 3, p-value = 0.4958

Interpretación introductoria:

  • p > 0.05: las varianzas pueden considerarse razonablemente similares.
  • p < 0.05: existen indicios de varianzas diferentes.

11.4 Independencia

La independencia depende principalmente de cómo fue diseñado y ejecutado el experimento.

Podemos observar los residuos en el orden de los datos:

plot(
  residuos,
  pch = 19,
  xlab = "Orden de las observaciones",
  ylab = "Residuos",
  main = "Residuos según orden de observación"
)

abline(h = 0, lty = 2)

Esperamos observar puntos distribuidos aproximadamente al azar alrededor de cero.

12 11. Conclusión del experimento

Una conclusión sencilla podría redactarse así:

El análisis de varianza mostró que los tratamientos asociados con infección viral producen diferencias significativas en el rendimiento del camote. La comparación de medias permite identificar cuáles tratamientos presentan rendimientos estadísticamente similares y cuáles son diferentes. En términos agronómicos, los tratamientos con menor rendimiento evidencian un mayor efecto negativo de la infección viral sobre la producción.

13 12. Idea final de la clase

La pregunta central del ANOVA es:

¿Las diferencias que observamos entre las medias son suficientemente grandes como para atribuirlas a los tratamientos y no solamente al azar?

El ANOVA responde primero si existen diferencias generales.

La comparación de medias responde después:

¿Entre cuáles tratamientos están esas diferencias?