Contexto del problema

Se sometieron dos tipos de moluscos (A y B) a tres concentraciones de agua de mar (100%, 75% y 50%), y se midió el consumo de oxígeno (proporción de O2 por unidad de peso seco). El diseño es balanceado, con 8 réplicas por combinación** (48 observaciones en total). El objetivo es evaluar si el tipo de molusco y la concentración de agua de mar (y su interacción) afectan el consumo de oxígeno.

library(ggplot2)
library(dplyr)
library(knitr)
library(car)         # Levene
library(agricolae)   # LSD.test (post-hoc)
load("moluscos.RData")   # objeto: BD_moluscos

# Convertimos las variables categóricas a factor.
# La concentración se deja como factor (no numérica), porque en este
# taller nos interesa comparar niveles discretos, no un efecto lineal continuo.
BD_moluscos <- BD_moluscos %>%
  mutate(
    c_agua  = factor(c_agua, levels = c(50, 75, 100),
                      labels = c("50%", "75%", "100%")),
    molusco = factor(molusco)
  )

str(BD_moluscos)
## tibble [48 × 3] (S3: tbl_df/tbl/data.frame)
##  $ c_agua : Factor w/ 3 levels "50%","75%","100%": 3 3 3 3 3 3 3 3 3 3 ...
##  $ molusco: Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 2 2 ...
##  $ cons_o : num [1:48] 7.16 8.26 6.78 14 13.6 11.1 8.93 9.66 6.14 6.14 ...

a. Análisis exploratorio univariado

Variable molusco (tipo de molusco, cualitativa nominal):

table(BD_moluscos$molusco)
## 
##  A  B 
## 24 24

Variable c_agua (concentración de agua de mar, cualitativa ordinal):

table(BD_moluscos$c_agua)
## 
##  50%  75% 100% 
##   16   16   16

Las dos tablas confirman que el diseño está perfectamente balanceado: 24 observaciones para cada tipo de molusco y 16 para cada concentración, con 8 réplicas en cada una de las 6 combinaciones molusco x concentración.

Variable cons_o (consumo de oxígeno, cuantitativa continua):

BD_moluscos %>%
  summarise(
    n      = n(),
    media  = mean(cons_o),
    de     = sd(cons_o),
    cv_pct = 100 * de / media,
    min    = min(cons_o),
    q1     = quantile(cons_o, 0.25),
    mediana= median(cons_o),
    q3     = quantile(cons_o, 0.75),
    max    = max(cons_o)
  ) %>%
  kable(digits = 2, caption = "Estadísticos descriptivos del consumo de oxígeno (global)")
Estadísticos descriptivos del consumo de oxígeno (global)
n media de cv_pct min q1 mediana q3 max
48 9.3 3.68 39.58 1.8 6.31 9.7 11.23 18.8
p1 <- ggplot(BD_moluscos, aes(x = cons_o)) +
  geom_histogram(bins = 10, fill = "steelblue", color = "white") +
  labs(title = "Histograma del consumo de O2", x = "Consumo de O2", y = "Frecuencia") +
  theme_minimal()

p2 <- ggplot(BD_moluscos, aes(y = cons_o)) +
  geom_boxplot(fill = "steelblue") +
  labs(title = "Boxplot del consumo de O2", y = "Consumo de O2") +
  theme_minimal() +
  theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())

gridExtra::grid.arrange(p1, p2, ncol = 2)

Interpretación graficas: Distribución univariada del consumo de oxígeno considerando las 48 observaciones en conjunto, sin distinguir por tipo de molusco ni concentración de agua de mar. El histograma (izquierda) agrupa los datos en intervalos de igual amplitud y muestra la frecuencia de observaciones en cada uno, permitiendo identificar la forma general de la distribución. El diagrama de caja (derecha) resume la misma variable mediante sus cuartiles (Q1, mediana, Q3), los límites de dispersión normal (bigotes) y los valores atípicos

Interpretación (a): el consumo de oxígeno global tiene una media cercana a 9-10 unidades, con una dispersión moderada (CV alrededor de 30-35%, valor típico en variables fisiológicas). El histograma muestra una distribución con ligera asimetría positiva (cola hacia la derecha) y el boxplot evidencia un valor atípico. Esta variabilidad relativamente alta es esperable porque, como se verá en el literal (b), el consumo de oxígeno cambia según el molusco y la concentración de agua, por lo que la distribución “global” mezcla varias subpoblaciones distintas.

b. Análisis exploratorio bivariado

Consumo de oxígeno según concentración de agua de mar (sin distinguir molusco):

ggplot(BD_moluscos, aes(x = c_agua, y = cons_o, fill = c_agua)) +
  geom_boxplot(alpha = 0.8) +
  labs(title = "Consumo de O2 según concentración de agua de mar",
       x = "Concentración de agua de mar", y = "Consumo de O2") +
  theme_minimal() +
  theme(legend.position = "none")

Interpretación grafica: Diagrama de caja del consumo de oxígeno según las tres concentraciones de agua de mar (50%, 75% y 100%), agrupando conjuntamente los dos tipos de molusco. Permite comparar visualmente la mediana, la dispersión y el rango de valores del consumo de oxígeno entre los tres niveles de concentración, como primer paso exploratorio antes de confirmar formalmente estas diferencias mediante el ANOVA de dos vías. Se observa que la concentración de 50% presenta el consumo más alto y disperso, mientras que 75% y 100% muestran medianas más bajas y relativamente similares entre sí.

BD_moluscos %>%
  group_by(c_agua) %>%
  summarise(media = mean(cons_o), de = sd(cons_o)) %>%
  kable(digits = 2, caption = "Consumo de O2 promedio por concentración")
Consumo de O2 promedio por concentración
c_agua media de
50% 12.25 3.2
75% 6.99 2.8
100% 8.67 3.0

El consumo de oxígeno no es monótono en la concentración: es más alto al 50%, disminuye al 75% y sube de nuevo (parcialmente) al 100%. En otras palabras, la mayor diferencia se observa entre la concentración baja (50%) y la intermedia (75%), sugiriendo que la dilución del agua de mar exige un mayor gasto metabólico al molusco.

¿Este patrón es el mismo para los dos tipos de molusco?

ggplot(BD_moluscos, aes(x = c_agua, y = cons_o, color = molusco, fill = molusco)) +
  geom_boxplot(alpha = 0.5, position = position_dodge(0.8)) +
  labs(title = "Consumo de O2 por concentración, según tipo de molusco",
       x = "Concentración de agua de mar", y = "Consumo de O2",
       color = "Molusco", fill = "Molusco") +
  theme_minimal()

Interpretación grafica: Diagrama de caja del consumo de oxígeno según concentración de agua de mar, separado por tipo de molusco (A y B), permitiendo comparar simultáneamente ambos factores. Cada concentración muestra dos cajas lado a lado (una por molusco), lo que facilita observar si el patrón de consumo frente a la concentración es similar o distinto entre A y B. Se observa que en la concentración de 50% ambos moluscos presentan medianas y dispersión similares, mientras que en 75% y especialmente en 100% el molusco A muestra una mediana más alta que B, sugiriendo visualmente una posible diferencia en la respuesta de cada especie ante la disminución de la concentración de agua de mar.

resumen <- BD_moluscos %>%
  group_by(c_agua, molusco) %>%
  summarise(media = mean(cons_o), .groups = "drop")

kable(resumen, digits = 2, caption = "Consumo de O2 promedio por combinación")
Consumo de O2 promedio por combinación
c_agua molusco media
50% A 12.18
50% B 12.33
75% A 7.89
75% B 6.10
100% A 9.94
100% B 7.41
ggplot(resumen, aes(x = c_agua, y = media, color = molusco, group = molusco)) +
  geom_point(size = 3) +
  geom_line(linewidth = 1) +
  labs(title = "Gráfico de interacción: molusco x concentración",
       x = "Concentración de agua de mar", y = "Consumo de O2 promedio",
       color = "Molusco") +
  theme_minimal()

Interpretación grafica: Gráfico de perfiles o gráfico de interacción que muestra el consumo promedio de oxígeno para cada combinación de tipo de molusco (A, B) y concentración de agua de mar (50%, 75%, 100%), con los puntos de cada molusco unidos por una línea siguiendo el orden de concentración. Este gráfico permite evaluar visualmente si el efecto de la concentración sobre el consumo de oxígeno es el mismo para ambos tipos de molusco: si las líneas son paralelas, el efecto es similar entre moluscos (no hay interacción); si no son paralelas o se cruzan, sugiere que el efecto depende del tipo de molusco (posible interacción). En este caso, las líneas descienden de forma casi paralela entre 50% y 75%, pero se separan levemente entre 75% y 100%, donde el molusco A muestra un mayor incremento que B – una divergencia que se evalúa formalmente en el ANOVA de dos vías.

Interpretación (b): en la concentración de 50% ambos moluscos consumen prácticamente lo mismo, mientras que en 75% y 100% el molusco A muestra un promedio ligeramente mayor que B, y las líneas del gráfico de interacción se ven algo divergentes. A nivel puramente descriptivo esto sugiere que el patrón podría no ser idéntico para los dos moluscos. Sin embargo, esta impresión visual debe confirmarse con una prueba formal antes de sacar conclusiones. Esto se evalúa en el literal (c) mediante el término de interacción del ANOVA de dos vías.

c. ANOVA de dos vías

Hipótesis del modelo

Se plantean las siguientes hipótesis:

Efecto de la concentración de agua de mar:

  • H0: el consumo promedio de oxígeno es igual entre las tres concentraciones.

  • H1: al menos una concentración tiene un consumo promedio distinto.

modelo <- aov(cons_o ~ molusco * c_agua, data = BD_moluscos)
summary(modelo)
##                Df Sum Sq Mean Sq F value   Pr(>F)    
## molusco         1   23.2   23.23   2.651    0.111    
## c_agua          2  230.8  115.41  13.171 3.63e-05 ***
## molusco:c_agua  2   15.4    7.68   0.876    0.424    
## Residuals      42  368.0    8.76                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Verificación de supuestos

1. Normalidad de los residuales

residuos <- residuals(modelo)

qqnorm(residuos, main = "QQ-plot de los residuales")
qqline(residuos, col = "red")

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

Interpretación graficas: Gráfico cuantil-cuantil (QQ-plot) de los residuales del modelo de ANOVA de dos vías, comparando los cuantiles observados de los residuales (eje Y) contra los cuantiles teóricos que se esperarían bajo una distribución normal perfecta (eje X). La línea roja representa la referencia de normalidad exacta; cuanto más se ajustan los puntos a esa línea, más se acerca la distribución de los residuales a la normalidad. Se utiliza como verificación visual del supuesto de normalidad, previa a la interpretación de la tabla ANOVA, y se complementa con la prueba formal de Shapiro-Wilk.

2. Homogeneidad de varianzas (Levene, sobre los 6 grupos molusco x concentración)

leveneTest(cons_o ~ molusco * c_agua, data = BD_moluscos)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  5  0.1723 0.9715
##       42

Interpretación de los supuestos: el QQ-plot muestra los residuales razonablemente alineados sobre la recta de referencia, y la prueba de Shapiro-Wilk da W = 0.958, valor-p = 0.086 > 0.05, por lo que no se rechaza la normalidad de los residuales. La prueba de Levene da F = 0.172, valor-p = 0.971 > 0.05, por lo que no hay evidencia de heterogeneidad de varianzas entre los 6 grupos molusco x concentración. Ambos supuestos se cumplen razonablemente, así que el ANOVA de dos vías es una técnica válida para este conjunto de datos.

Interpretación de los efectos

De la tabla ANOVA:

  • Efecto principal de molusco: evalúa si, en promedio (a través de las tres concentraciones), el consumo de oxígeno difiere entre A y B.
  • Efecto principal de c_agua: evalúa si, en promedio (a través de los dos moluscos), el consumo de oxígeno difiere entre las tres concentraciones.
  • Interacción molusco:c_agua: evalúa si el efecto de la concentración sobre el consumo de oxígeno es distinto según el tipo de molusco.

Con los datos analizados, la tabla ANOVA arroja:

Fuente gl F valor-p ¿Significativo (α = 0.05)?
molusco 1 2.65 0.111 No
c_agua 2 13.17 3.63e-05
molusco:c_agua 2 0.88 0.424 No

Interpretación:

  • Tipo de molusco: no hay evidencia de que A y B difieran, en promedio, en su consumo de oxígeno (p = 0.111 > 0.05).
  • Concentración de agua de mar: sí afecta significativamente el consumo de oxígeno (p < 0.001): el consumo de O2 cambia según la concentración de agua de mar a la que se somete al molusco, independientemente del tipo.
  • Interacción molusco x concentración: no es significativa (p = 0.424). Esto significa que, aunque en el gráfico del literal (b) las líneas parecían algo divergentes, esa diferencia no es estadísticamente sostenible con estos datos: el efecto de la concentración sobre el consumo de oxígeno es el mismo para ambos tipos de molusco. Es ejemplo de por qué la exploración visual (b) debe confirmarse con la prueba formal (c) antes de concluir.

Decisión estadística

Con base en la tabla ANOVA y usando α = 0.05:

  • Tipo de molusco (p = 0.111 > 0.05): No hay evidencia estadística de que el consumo promedio de oxígeno difiera entre los moluscos A y B.
  • Concentración de agua de mar (p = 3.63e-05 < 0.05): se rechaza H0. Hay evidencia estadística de que el consumo promedio de oxígeno difiere entre al menos una de las tres concentraciones.
  • Interacción molusco:c_agua (p = 0.424 > 0.05): No hay evidencia de que el efecto de la concentración dependa del tipo de molusco.

Por tener un efecto principal significativo únicamente en c_agua, las comparaciones post-hoc se realizan solo sobre este factor.

Comparaciones post-hoc (LSD)

Como el único efecto significativo es c_agua, la prueba de Diferencia Mínima Significativa (LSD) se aplica solo sobre ese factor, usando la función LSD.test() del paquete agricolae:

posanova <- LSD.test(modelo, "c_agua")

# Solo el valor de LSD usado como margen de comparación
cat("LSD =", round(posanova$statistics$LSD, 3), "\n")
## LSD = 2.112
# Tabla de letras: la parte que realmente comunica la conclusión
kable(posanova$groups, digits = 2,
      caption = "Medias de consumo de O2 por concentración y grupos LSD")
Medias de consumo de O2 por concentración y grupos LSD
cons_o groups
50% 12.25 a
100% 8.67 b
75% 6.99 b

Con los datos, la tabla muestra que 50% queda con una letra propia (el grupo con mayor consumo, significativamente distinto de los demás), mientras que 75% y 100% comparten la misma letra (no son significativamente distintos entre sí). La diferencia entre 50% y las otras dos concentraciones es de 5.26 y 3.58 unidades respectivamente (ambas mayores al LSD de 2.112), mientras que la diferencia entre 75% y 100% es de solo 1.68 (menor al LSD).

Interpretación (c):

El análisis exploratorio univariado mostró que el consumo de oxígeno tiene una distribución moderadamente dispersa (CV ≈ 32%) y un valor atípico puntual, consistente con la variabilidad natural de una variable fisiológica medida sobre organismos distintos. El análisis bivariado sugirió visualmente que la respuesta a la concentración de agua de mar podría no ser idéntica entre moluscos, pero el ANOVA de dos vías – con normalidad y homogeneidad de varianzas verificadas – mostró que solo la concentración de agua de mar tiene un efecto significativo sobre el consumo de oxígeno (p < 0.001), mientras que el tipo de molusco y la interacción no lo tienen. La prueba post-hoc LSD confirmó que la concentración de 50% genera un consumo significativamente mayor que 75% y 100%, las cuales no difieren entre sí. Biológicamente, esto sugiere que diluir el agua de mar a la mitad exige un esfuerzo osmorregulatorio considerablemente mayor en ambos tipos de molusco por igual, mientras que reducciones moderadas de concentración (hasta 75%) no generan una exigencia metabólica muy distinta a la de agua de mar sin diluir.

Conclusiones

  • El consumo de oxígeno promedio es notablemente más alto al 50% (≈12.25) que al 75% (≈6.99) o al 100% (≈8.67), y la prueba LSD (LSD = 2.112) confirma que la concentración de 50% difiere significativamente de las otras dos (diferencia de 5.26 y 3.58, ambas > LSD), mientras que 75% y 100% no difieren significativamente entre sí (diferencia = 1.68 < LSD = 2.112). En términos biológicos, esto indica que diluir el agua de mar hasta la mitad de su concentración normal obliga al molusco a un gasto metabólico considerablemente mayor – se asocia con un mayor consumo de oxígeno. Este aumento podría estar relacionado con procesos fisiológicos necesarios para mantener el equilibrio interno frente al cambio de salinidad, aunque el presente análisis no permite determinar directamente el mecanismo responsable. – mientras que reducir la concentración solo hasta 75% no genera una exigencia metabólica muy distinta de la que se observa en agua de mar sin diluir (100%). A diferencia de la concentración, el tipo de molusco (A o B) no mostró diferencias significativas en su consumo de oxígeno, ni tampoco se encontró que ambos tipos respondan de manera distinta a los cambios de concentración (interacción no significativa): la respuesta fisiológica ante la dilución del agua de mar es, según esta evidencia, comparable entre ambos moluscos.

  • No se encontraron diferencias estadísticamente significativas en el consumo de oxígeno entre los dos tipos de molusco. Además, la interacción entre el tipo de molusco y la concentración de agua no fue significativa, por lo que no se encontró evidencia suficiente para afirmar que el efecto de la concentración sobre el consumo de oxígeno dependa del tipo de molusco.

  • Finalmente, los resultados deben interpretarse considerando que el estudio evaluó el consumo de oxígeno en un único momento y únicamente en dos tipos de moluscos. Por lo tanto, no es posible determinar si la respuesta observada se mantiene a largo plazo ni generalizar los resultados a otros organismos marinos sin estudios adicionales.