Introducción

🦪 Contexto del estudio Dos tipos de moluscos (A y B) fueron sometidos a tres concentraciones distintas de agua de mar (100%, 75% y 50%), con el fin de evaluar su consumo de oxígeno, medido como la proporción de O2 por unidad de peso seco del molusco. El diseño corresponde a un experimento factorial 2×3 (tipo de molusco × concentración de agua de mar), con 8 réplicas por combinación, para un total de 48 observaciones.

48Observaciones

2Tipos de molusco (A, B)

3Concentraciones de agua de mar

1Variable respuesta (Consumo O2)

library(tidyverse)
library(agricolae)
library(car)
library(knitr)
library(kableExtra)

load("moluscos.RData")

BD_moluscos <- BD_moluscos %>%
  mutate(
    c_agua  = factor(c_agua, levels = c(100, 75, 50)),
    molusco = factor(molusco)
  )

a. Análisis Exploratorio Univariado

Se realiza un análisis exploratorio univariado para cada variable del estudio (tipo de molusco, concentración de agua de mar y consumo de oxígeno), con el fin de describir su comportamiento individual antes de evaluar relaciones entre variables.

Variables categóricas: tipo de molusco y concentración de agua

Al ser variables cualitativas (factores), se describen mediante tablas de frecuencia y no mediante estadísticos de tendencia central.

tabla_molusco <- as.data.frame(table(BD_moluscos$molusco))
kable(tabla_molusco,
      caption = "Frecuencia por tipo de molusco",
      col.names = c("Molusco", "N"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Frecuencia por tipo de molusco
Molusco N
A 24
B 24
tabla_agua <- as.data.frame(table(BD_moluscos$c_agua))
kable(tabla_agua,
      caption = "Frecuencia por concentración de agua de mar",
      col.names = c("Concentración (%)", "N"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Frecuencia por concentración de agua de mar
Concentración (%) N
100 16
75 16
50 16

Variable numérica: consumo de oxígeno

resumen_o2 <- data.frame(
  Estadistico = c("Mínimo", "1er Cuartil", "Mediana", "Media", "3er Cuartil",
                   "Máximo", "Desviación estándar"),
  Valor = round(c(min(BD_moluscos$cons_o), quantile(BD_moluscos$cons_o, 0.25),
                    median(BD_moluscos$cons_o), mean(BD_moluscos$cons_o),
                    quantile(BD_moluscos$cons_o, 0.75), max(BD_moluscos$cons_o),
                    sd(BD_moluscos$cons_o)), 2)
)

kable(resumen_o2,
      caption = "Estadísticos descriptivos del consumo de O2",
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Estadísticos descriptivos del consumo de O2
Estadistico Valor
Mínimo 1.80
1er Cuartil 6.31
Mediana 9.70
Media 9.30
3er Cuartil 11.23
Máximo 18.80
Desviación estándar 3.68
ggplot(BD_moluscos, aes(x = cons_o)) +
  geom_histogram(bins = 10, fill = "steelblue", color = "white") +
  labs(title = "Distribución del consumo de O2", x = "Consumo de O2", y = "Frecuencia") +
  theme_minimal()

ggplot(BD_moluscos, aes(y = cons_o)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Boxplot del consumo de O2", y = "Consumo de O2") +
  theme_minimal()

Interpretación

🔍 Interpretación El diseño es completamente balanceado: 24 observaciones para cada tipo de molusco (A y B) y 16 observaciones para cada concentración de agua de mar (100%, 75% y 50%). Respecto al consumo de oxígeno, la media (9.30) y la mediana (9.70) son cercanas entre sí, lo que sugiere una asimetría moderada. La desviación estándar (3.68) frente a una media de 9.30 indica una dispersión relativa considerable (CV ≈ 40%). El histograma muestra una distribución con una ligera cola hacia valores altos, y el boxplot evidencia un valor atípico (18.8), correspondiente al máximo registrado. Es importante notar que este análisis mezcla las seis combinaciones posibles de molusco y concentración; el comportamiento diferenciado entre grupos se explora en el análisis bivariado.

b. Análisis Exploratorio Bivariado

Se evalúa cómo se comporta el consumo de oxígeno según la concentración de agua de mar, y si este comportamiento es consistente entre los dos tipos de molusco.

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

medias <- BD_moluscos %>%
  group_by(c_agua, molusco) %>%
  summarise(media_cons_o = round(mean(cons_o), 2), .groups = "drop")

kable(medias,
      caption = "Media de consumo de O2 por combinación molusco x concentración",
      col.names = c("Concentración (%)", "Molusco", "Media Consumo O2"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Media de consumo de O2 por combinación molusco x concentración
Concentración (%) Molusco Media Consumo O2
100 A 9.94
100 B 7.41
75 A 7.89
75 B 6.10
50 A 12.18
50 B 12.33
ggplot(medias, aes(x = c_agua, y = media_cons_o, color = molusco, group = molusco)) +
  geom_point(size = 3) +
  geom_line(linewidth = 1) +
  labs(title = "Gráfico de interacción: concentración x tipo de molusco",
       x = "Concentración de agua de mar (%)",
       y = "Media de consumo de O2",
       color = "Molusco") +
  theme_minimal()

Interpretación

🔍 Interpretación En las concentraciones de 100% y 75%, el molusco A presenta un consumo de oxígeno promedio superior al molusco B (9.94 vs 7.41, y 7.89 vs 6.10, respectivamente). Sin embargo, en la concentración de 50%, ambos tipos de molusco presentan un consumo prácticamente idéntico (12.2 vs 12.3). En ambos moluscos, el patrón general frente a la concentración es el mismo: el consumo disminuye de 100% a 75%, y luego aumenta marcadamente al llegar a 50%. Esta forma de “V” sugiere que una menor concentración de agua de mar (mayor dilución, y por tanto mayor estrés osmótico) incrementa la demanda de oxígeno. El hecho de que la brecha entre A y B se reduzca en la concentración más baja podría sugerir una interacción leve entre los factores, lo cual se evalúa formalmente en el ANOVA.

c. ANOVA de dos vías y Postanova

📐 Enfoque estadístico Se ajusta un ANOVA de dos vías con los factores tipo de molusco, concentración de agua de mar y su interacción, sobre la variable respuesta consumo de oxígeno. Se verifican los supuestos de normalidad de los residuales (Shapiro-Wilk) y homogeneidad de varianzas (Levene), y en caso de encontrar efectos significativos se realizan comparaciones post-hoc mediante la prueba de LSD.

ANOVA: Consumo de O2 ~ Molusco * Concentración

modelo <- aov(cons_o ~ molusco * c_agua, data = BD_moluscos)

anova_tabla <- as.data.frame(summary(modelo)[[1]])
anova_tabla <- round(anova_tabla, 4)

kable(anova_tabla,
      caption = "Tabla ANOVA: Consumo de O2 ~ Molusco * Concentración de agua",
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Tabla ANOVA: Consumo de O2 ~ Molusco * Concentración de agua
Df Sum Sq Mean Sq F value Pr(>F)
molusco 1 23.2269 23.2269 2.6508 0.1110
c_agua 2 230.8160 115.4080 13.1712 0.0000
molusco:c_agua 2 15.3563 7.6781 0.8763 0.4238
Residuals 42 368.0112 8.7622 NA NA

Verificación de supuestos

shapiro_res <- shapiro.test(residuals(modelo))
levene_res  <- leveneTest(cons_o ~ molusco * c_agua, data = BD_moluscos)

supuestos_tabla <- data.frame(
  Prueba = c("Shapiro-Wilk (normalidad)", "Levene (homogeneidad de varianzas)"),
  Estadistico = c(round(shapiro_res$statistic, 4), round(levene_res$`F value`[1], 4)),
  p_valor = c(round(shapiro_res$p.value, 4), round(levene_res$`Pr(>F)`[1], 4))
)

kable(supuestos_tabla,
      caption = "Verificación de supuestos del ANOVA",
      col.names = c("Prueba", "Estadístico", "p-valor"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Verificación de supuestos del ANOVA
Prueba Estadístico p-valor
Shapiro-Wilk (normalidad) 0.9582 0.0857
Levene (homogeneidad de varianzas) 0.1723 0.9715
par(mfrow = c(1, 2))
plot(modelo, which = 1)
plot(modelo, which = 2)

par(mfrow = c(1, 1))

✅ Interpretación de supuestos La prueba de Shapiro-Wilk sobre los residuales arroja un valor-p = 0.086, por lo que el supuesto de normalidad no se rechaza (los residuales son compatibles con una distribución normal). La prueba de Levene arroja un valor-p = 0.972, por lo que el supuesto de homogeneidad de varianzas tampoco se rechaza. Ambos supuestos se cumplen satisfactoriamente, lo que respalda la validez del ANOVA de dos vías.

Interpretación del ANOVA

🔍 Interpretación El ANOVA de dos vías evidenció que el tipo de molusco no tuvo un efecto significativo sobre el consumo de O2 (F(1,42) = 2.65, p = 0.111), y que la interacción entre molusco y concentración de agua tampoco fue significativa (F(2,42) = 0.876, p = 0.424). Esto indica que el efecto de la concentración de agua es consistente entre ambos tipos de molusco. En cambio, la concentración de agua de mar mostró un efecto altamente significativo sobre el consumo de oxígeno (F(2,42) = 13.17, p < 0.001). Dado que el único efecto significativo corresponde al factor concentración, las comparaciones post-hoc se centran en dicho factor.

Comparaciones Postanova (LSD) — Concentración de agua

posanova_c <- LSD.test(modelo, "c_agua", console = FALSE)

kable(as.data.frame(posanova_c$statistics),
      caption = "Estadísticos generales del modelo",
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Estadísticos generales del modelo
MSerror Df Mean CV t.value LSD
8.76217 42 9.304792 31.8126 2.018082 2.112028
grupos_tabla <- posanova_c$groups
grupos_tabla$Concentracion <- rownames(grupos_tabla)
grupos_tabla <- grupos_tabla[, c("Concentracion", "cons_o", "groups")]

kable(grupos_tabla,
      caption = "Agrupamiento LSD — Concentración de agua de mar",
      col.names = c("Concentración (%)", "Consumo O2 promedio", "Grupo"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Agrupamiento LSD — Concentración de agua de mar
Concentración (%) Consumo O2 promedio Grupo
50 12.25062 a
100 8.67125 b
75 6.99250 b

Interpretación

🔍 Interpretación La prueba de LSD muestra que la concentración de 50% forma un grupo estadísticamente distinto (grupo “a”), con el mayor consumo promedio de oxígeno (12.25), mientras que las concentraciones de 100% (8.67) y 75% (6.99) comparten el grupo “b”, sin diferencias significativas entre ellas. Esto indica que la caída del consumo de O2 entre 100% y 75% no es estadísticamente significativa, pero el incremento marcado al llegar a 50% sí lo es. Estos resultados sugieren que una dilución fuerte del agua de mar (50%) genera una condición de estrés osmótico que obliga a los moluscos —independientemente del tipo— a incrementar significativamente su consumo de oxígeno.

Conclusiones generales

🦪 Conclusiones

  • Análisis univariado (a): el diseño es completamente balanceado (24 obs. por tipo de molusco, 16 obs. por concentración). El consumo de O2 presenta una media de 9.30, una dispersión considerable (CV ≈ 40%) y un valor atípico (18.8).

  • Análisis bivariado (b): el consumo de O2 sigue un patrón en “V” frente a la concentración de agua (baja de 100% a 75%, y sube fuertemente en 50%) en ambos tipos de molusco. La diferencia entre molusco A y B es notoria en 100% y 75%, pero se diluye en 50%, lo que sugirió visualmente una posible interacción.

  • ANOVA de dos vías (c): se confirmó que la concentración de agua de mar afecta significativamente el consumo de O2 (F(2,42) = 13.17, p < 0.001), mientras que el tipo de molusco (p = 0.111) y la interacción molusco×concentración (p = 0.424) no fueron significativos. Ambos supuestos del modelo (normalidad, Shapiro-Wilk p = 0.086; homogeneidad de varianzas, Levene p = 0.972) se cumplieron. La prueba post-hoc de LSD mostró que la concentración de 50% difiere significativamente de 100% y 75%, mientras que estas dos últimas no difieren entre sí.

  • Conclusión integradora: la concentración de agua de mar es el factor determinante del consumo de oxígeno en estos moluscos, con un efecto consistente para ambos tipos (A y B). La dilución del agua de mar hasta 50% genera un incremento significativo en el consumo de O2, probablemente asociado a un mayor esfuerzo osmorregulador de los organismos ante el estrés hipoosmótico.