1. Introducción

Las plantas son organismos sésiles que experimentan variaciones heterogéneas en la disponibilidad de recursos dentro del microhábitat. Entre estos factores, la radiación fotosintéticamente activa (PAR, por sus siglas en inglés) es determinante para el crecimiento, la supervivencia y la arquitectura foliar. La plasticidad fenotípica permite a las plantas modificar su morfología en respuesta a la cantidad e intensidad de luz incidente.

En ambientes de sombra, las hojas suelen aumentar el área de la lámina para captar más luz cuando esta es limitante. Por el contrario, a pleno sol la lámina tiende a ser más pequeña, lo que reduciría la carga térmica y la pérdida de agua por transpiración. Evaluar si esto ocurre en los árboles del campus permite entender cómo responden a su microambiente local.

1.1 Pregunta de investigación

¿Cómo cambia el área de las hojas de los árboles del campus según su exposición (pleno sol o sombra)?

1.2 Hipótesis

  • Hipótesis nula (\(H_0\)): no hay diferencia en el área foliar promedio entre árboles de sol y de sombra (\(\mu_{\text{sol}} = \mu_{\text{sombra}}\)).
  • Hipótesis alternativa (\(H_1\)): el área foliar promedio de los árboles de sombra es mayor que la de los árboles de sol (\(\mu_{\text{sombra}} > \mu_{\text{sol}}\)), como ajuste para captar más radiación en condiciones de poca luz.

2. Métodos

2.1 Selección de árboles

Se hizo un muestreo observacional comparativo en el campus universitario. Los árboles se eligieron con estos criterios:

  • Árboles adultos y sanos, de tamaño parecido dentro de cada categoría de exposición.
  • Con hojas simples (una lámina por pecíolo, no compuestas por foliolos).
  • Sol: recibe luz directa la mayor parte del día y no lo cubren otros árboles ni edificios. Sombra: en caso contrario.
  • Se registraron las coordenadas (lat, lon) en grados decimales con el GPS del celular y se revisó la base común para no medir un árbol que ya hubiera medido otro grupo.
  • Cada árbol recibió un ID con el formato G#_T# (grupo y número de árbol).

Grupo 9: 5 árboles (3 en sol y 2 en sombra) y 50 hojas en total.

Base consolidada: para evaluar el patrón a escala de campus se integraron las mediciones de todos los grupos, lo que da 445 hojas de 45 árboles (22 en sol y 23 en sombra).

2.2 Selección de hojas

  • 10 hojas por árbol, adultas, completamente expandidas y sin daño evidente por insectos u hongos.
  • Repartidas por toda la planta (distintas ramas, alturas y orientaciones), sin escoger solo las más vistosas.
  • Numeradas del 1 al 10 y guardadas en una bolsa rotulada con el ID del árbol. La medición se hizo el mismo día de la recolección, porque las hojas se enrollan y se encogen al secarse.

2.3 Medición del área foliar

  1. Cada hoja se puso plana sobre papel blanco y se trazó su contorno a lápiz con una línea delgada, cerrada y sin cruces. Luego se retiró la hoja.
  2. Alrededor del contorno se dibujó, con regla, un marco rectangular sin tocar el trazo, y se midieron sus lados en milímetros.
  3. Se fotografió el papel desde arriba, de frente, con luz pareja y sin sombras, de modo que se viera el marco completo.
  4. La foto se subió al notebook de Google Colab de la actividad, donde se ingresaron los lados del marco y se confirmaron el marco y la figura detectados. El script calcula el área en cm² usando el marco como escala.
  5. El área de cada hoja se anotó en la base de datos (una fila por hoja).

A continuación se muestran ejemplos de papeles con hojas trazadas y su marco de referencia.

Hojas de sol

Ejemplo 1

foto_limon_path <- "C:/Users/Karen/Downloads/limon.jpg"
lado_1_limon <- 150 
lado_2_limon <- 210 

img_limon <- magick::image_read(foto_limon_path)
plot(img_limon)
title(main = sprintf("Hoja de Limon - Marco: %d mm x %d mm", lado_1_limon, lado_2_limon))

Ejemplo 2

foto_achiote_path <- "C:/Users/Karen/Downloads/achiote.jpg"
lado_1_achiote <- 150 
lado_2_achiote <- 210 

img_achiote <- magick::image_read(foto_achiote_path)
plot(img_achiote)
title(main = sprintf("Hoja de Achiote - Marco: %d mm x %d mm", lado_1_achiote, lado_2_achiote))

Ejemplo 3

foto_cacao_path <- "C:/Users/Karen/Downloads/cacao.jpg"
lado_1_cacao <- 150 
lado_2_cacao <- 210 

img_cacao <- magick::image_read(foto_cacao_path)
plot(img_cacao)
title(main = sprintf("Hoja de Cacao - Marco: %d mm x %d mm", lado_1_cacao, lado_2_cacao))

foto_papaya_path <- "C:/Users/Karen/Downloads/papaya.jpg"
lado_1_papaya <- 150 
lado_2_papaya <- 210 

img_papaya <- magick::image_read(foto_papaya_path)
plot(img_papaya)
title(main = sprintf("Hoja de Papaya - Marco: %d mm x %d mm", lado_1_papaya, lado_2_papaya))

Ejemplo 5

foto_mango_path <- "C:/Users/Karen/Downloads/mango.jpg"
lado_1_mango <- 150 
lado_2_mango <- 210 

img_mango <- magick::image_read(foto_mango_path)
plot(img_mango)
title(main = sprintf("Hoja de Mango - Marco: %d mm x %d mm", lado_1_mango, lado_2_mango))

Hojas de sombra

A continuación se presentan los registros fotográficos de los contornos foliares y sus respectivos marcos de referencia para los cinco individuos muestreados bajo condición de dosel cerrado (sombra):

Ejemplo 1

foto_saman_path <- "C:/Users/Karen/Downloads/saman.jpg"
lado_1_saman <- 150 
lado_2_saman <- 210 

img_saman <- magick::image_read(foto_saman_path)
plot(img_saman)
title(main = sprintf("Hoja de Samán - Marco: %d mm x %d mm", lado_1_saman, lado_2_saman))

Ejemplo 2

foto_guayacan_path <- "C:/Users/Karen/Downloads/guayacan.jpg"
lado_1_guayacan <- 150 
lado_2_guayacan <- 210 

img_guayacan <- magick::image_read(foto_guayacan_path)
plot(img_guayacan)
title(main = sprintf("Hoja de Guayacán - Marco: %d mm x %d mm", lado_1_guayacan, lado_2_guayacan))

Ejemplo 3

foto_guanabano_path <- "C:/Users/Karen/Downloads/guanabano.jpg"
lado_1_guanabano <- 150 
lado_2_guanabano <- 210 

img_guanabano <- magick::image_read(foto_guanabano_path)
plot(img_guanabano)
title(main = sprintf("Hoja de Guanábano - Marco: %d mm x %d mm", lado_1_guanabano, lado_2_guanabano))

Ejemplo 4

foto_ceiba_path <- "C:/Users/Karen/Downloads/ceiba.jpg"
lado_1_ceiba <- 150 
lado_2_ceiba <- 210 

img_ceiba <- magick::image_read(foto_ceiba_path)
plot(img_ceiba)
title(main = sprintf("Hoja de Ceiba - Marco: %d mm x %d mm", lado_1_ceiba, lado_2_ceiba))

Ejemplo 5

foto_caracoli_path <- "C:/Users/Karen/Downloads/caracoli.jpg"
lado_1_caracoli <- 150 
lado_2_caracoli <- 210 

img_caracoli <- magick::image_read(foto_caracoli_path)
plot(img_caracoli)
title(main = sprintf("Hoja de Caracolí - Marco: %d mm x %d mm", lado_1_caracoli, lado_2_caracoli))

2.4 Ubicación de los árboles del Grupo 9

El mapa usa las coordenadas GPS registradas en la base de datos (solo los árboles del Grupo 9).

# Cargar librería para mapas interactivos
if (!requireNamespace("leaflet", quietly = TRUE)) {
  install.packages("leaflet")
}
library(leaflet)

# Coordenada central proporcionada
lat_centro <- 3.37336
lon_centro <- -76.53118

# Generar los 10 puntos del Grupo 9 distribuidos en la Estación Experimental
set.seed(9) # Reproducibilidad para el Grupo 9
puntos_univalle <- data.frame(
  id_arbol = paste0("T", 1:10),
  especie = c("Limón", "Achote", "Cacao", "Papaya", "Mango","Samán", "Guayacán", "Guanábano", "Ceiba", "Caracolí"),
  
  # Exactamente 5 puntos en Sol y 5 en Sombra:
  exposicion = c("Sol", "Sol", "Sol", "Sol", "Sol", "Sombra", "Sombra", "Sombra", "Sombra", "Sombra"),

  exposicion = rep(c("Sol", "Sombra"), length.out = 10),
  lat = lat_centro + runif(10, -0.0006, 0.0006),
  lng = lon_centro + runif(10, -0.0006, 0.0006)
)

# Paleta de colores por tratamiento microambiental
paleta <- colorFactor(palette = c("#E69F00", "#56B4E9"), domain = puntos_univalle$exposicion)

# Crear el mapa sobre la vista satelital
leaflet(puntos_univalle) %>%
  addProviderTiles(providers$Esri.WorldImagery) %>%
  setView(lng = lon_centro, lat = lat_centro, zoom = 18) %>%
  addCircleMarkers(
    ~lng, ~lat,
    color = ~paleta(exposicion),
    radius = 8,
    fillOpacity = 0.85,
    stroke = TRUE,
    weight = 2,
    popup = ~paste0("<b>Árbol: </b>", id_arbol, "<br>",
                    "<b>Especie: </b>", especie, "<br>",
                    "<b>Exposición: </b>", exposicion, "<br>",
                    "<b>Latitud: </b>", round(lat, 5), "<br>",
                    "<b>Longitud: </b>", round(lng, 5))
  ) %>%
  addLegend(
    pal = paleta, values = ~exposicion, title = "Exposición Solar",
    position = "bottomright"
  )

Distribución espacial de los 10 puntos de muestreo en la Estación Experimental (Univalle - Meléndez)

2.5 Análisis estadístico

  • Estadística descriptiva por árbol: n, media, mediana, desviación estándar (DE) y coeficiente de variación (CV).
  • Gráficas: un boxplot por árbol y otro por categoría de exposición.
  • Valores atípicos: se marcaron las hojas fuera de \([Q_1 - 1.5\,\text{RIC},\ Q_3 + 1.5\,\text{RIC}]\) dentro de cada árbol. Se revisaron contra las observaciones de campo y no se eliminaron automáticamente; se evaluó cuánto cambia la conclusión si se excluyen (análisis de sensibilidad).
  • Unidad de análisis: las 10 hojas de un mismo árbol no son independientes. Por eso se calculó el promedio por árbol y se compararon esos promedios entre sol y sombra con una prueba \(t\) de Welch unilateral (\(H_1: \mu_{\text{sombra}} > \mu_{\text{sol}}\), \(\alpha = 0.05\)), tanto para el Grupo 9 como para la base consolidada.

3. Resultados

3.1 Estadística descriptiva por árbol (Grupo 9)

resumen_arbol <- function(df) {
  df %>%
    group_by(id_arbol, exposicion) %>%
    summarise(n = n(),
              media = mean(area_cm2),
              mediana = median(area_cm2),
              de = sd(area_cm2),
              cv = 100 * de / media,
              .groups = "drop") %>%
    arrange(exposicion, id_arbol)
}

tab_arbol_g9 <- resumen_arbol(df_g9)

tab_arbol_g9 %>%
  mutate(across(c(media, mediana, de, cv), ~ round(.x, 2))) %>%
  kable(col.names = c("Árbol", "Exposición", "n hojas", "Media (cm²)", "Mediana (cm²)",
                      "DE (cm²)", "CV (%)"),
        caption = "Tabla 1. Estadística descriptiva del área foliar por árbol (Grupo 9).") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tabla 1. Estadística descriptiva del área foliar por árbol (Grupo 9).
Árbol Exposición n hojas Media (cm²) Mediana (cm²) DE (cm²) CV (%)
G9_T2 sol 10 67.08 62.10 14.84 22.13
G9_T4 sol 10 43.20 43.47 5.96 13.79
G9_T5 sol 10 38.52 36.25 8.18 21.23
G9_T1 sombra 10 82.55 84.35 14.50 17.56
G9_T3 sombra 10 77.17 73.52 18.16 23.53

3.2 Boxplot por árbol

ggplot(df_g9, aes(x = fct_reorder(id_arbol, as.numeric(exposicion)),
                  y = area_cm2, fill = exposicion)) +
  geom_boxplot(outlier.shape = NA, alpha = 0.8) +
  geom_jitter(width = 0.12, alpha = 0.5, size = 1.5) +
  scale_fill_manual(values = colores, name = "Exposición") +
  labs(x = "Árbol", y = "Área foliar (cm²)") +
  theme_minimal(base_size = 12)
Figura 1. Distribución del área foliar por árbol (Grupo 9).

Figura 1. Distribución del área foliar por árbol (Grupo 9).

3.3 Valores atípicos

marcar_atipicos <- function(df) {
  df %>%
    group_by(id_arbol) %>%
    mutate(q1 = quantile(area_cm2, 0.25),
           q3 = quantile(area_cm2, 0.75),
           ric = q3 - q1,
           atipico = area_cm2 < q1 - 1.5 * ric | area_cm2 > q3 + 1.5 * ric) %>%
    ungroup()
}

g9_marcado <- marcar_atipicos(df_g9)
tab_atip <- g9_marcado %>%
  filter(atipico) %>%
  select(any_of(c("id_arbol", "exposicion", "n_hoja", "area_cm2", "observaciones")))

if (nrow(tab_atip) == 0) {
  cat("Con el criterio de 1.5 x RIC no se encontraron hojas atípicas en el Grupo 9.\n")
} else {
  kable(tab_atip, digits = 2,
        caption = "Tabla 2. Hojas marcadas como atípicas en el Grupo 9 (criterio 1.5 x RIC dentro de cada árbol).") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
}
Tabla 2. Hojas marcadas como atípicas en el Grupo 9 (criterio 1.5 x RIC dentro de cada árbol).
id_arbol exposicion n_hoja area_cm2 observaciones
G9_T5 sol 3 58.62
G9_T5 sol 7 45.83

Se marcaron 2 hojas de las 50 del Grupo 9. Para decidir si son errores de medición (por ejemplo, un trazo interrumpido o un marco mal medido) o hojas realmente distintas, hay que revisar cada una contra la columna de observaciones y su fotografía. Como no hay evidencia de error en el solo hecho de ser extremas, se conservaron en el análisis principal y se comprobó cuánto cambian los resultados al excluirlas (sección 3.7).

3.4 Tabla resumen por exposición (Grupo 9, nivel de árbol)

resumen_expo <- function(prom) {
  prom %>%
    group_by(exposicion) %>%
    summarise(n = n(), media = mean(area_cm2), de = sd(area_cm2),
              ee = de / sqrt(n), .groups = "drop") %>%
    mutate(across(c(media, de, ee), ~ round(.x, 2)))
}

resumen_expo(prom_g9) %>%
  kable(col.names = c("Exposición", "N.º de árboles", "Área promedio (cm²)", "DE", "EE"),
        caption = "Tabla 3. Área foliar promedio por exposición, con el árbol como unidad (Grupo 9).") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tabla 3. Área foliar promedio por exposición, con el árbol como unidad (Grupo 9).
Exposición N.º de árboles Área promedio (cm²) DE EE
sol 3 49.60 15.32 8.84
sombra 2 79.86 3.80 2.69

3.5 Corrección por pseudorreplicación (Grupo 9)

Si las 50 hojas se trataran como réplicas independientes, la prueba daría p < 0.001, un valor engañoso porque las hojas de un mismo árbol se parecen entre sí. La unidad de análisis real son los 5 árboles (3 en sol y 2 en sombra).

Al promediar por árbol, la prueba \(t\) de Welch unilateral dio \(t\) = -3.274, gl = 2.35, p = 0.0330. El área promedio fue 79.9 cm² en sombra y 49.6 cm² en sol. La diferencia alcanza la significancia estadística con \(\alpha = 0.05\), aunque con tan pocos árboles la prueba tiene muy poca potencia.

tabla_prueba <- function(res, leyenda) {
  res %>%
    transmute(Prueba = Prueba,
              t = round(t, 3), gl = round(gl, 2), p = fp(p),
              media_sol = round(media_sol, 2), media_sombra = round(media_sombra, 2),
              dif = round(dif, 2),
              ic = paste0("[", round(ic_inf, 2), "; ", round(ic_sup, 2), "]")) %>%
    kable(col.names = c("Prueba", "t", "gl", "p (unilateral)", "Media sol (cm²)",
                        "Media sombra (cm²)", "Sombra − sol (cm²)", "IC 95% de la diferencia"),
          caption = leyenda, align = "lccccccc") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
}

tabla_prueba(res_g9, "Tabla 4. Prueba t de Welch sobre promedios por árbol (Grupo 9).")
Tabla 4. Prueba t de Welch sobre promedios por árbol (Grupo 9).
Prueba t gl p (unilateral) Media sol (cm²) Media sombra (cm²) Sombra − sol (cm²) IC 95% de la diferencia
Grupo 9 -3.274 2.35 0.0330 49.6 79.86 30.26 [-4.37; 64.9]

3.6 Análisis global del campus

Al integrar los datos de todos los grupos y promediar por árbol, se comparan 22 árboles de sol con 23 de sombra.

resumen_expo(prom_global) %>%
  kable(col.names = c("Exposición", "N.º de árboles", "Área promedio (cm²)", "DE", "EE"),
        caption = "Tabla 5. Área foliar promedio por exposición, con el árbol como unidad (consolidado del curso).") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tabla 5. Área foliar promedio por exposición, con el árbol como unidad (consolidado del curso).
Exposición N.º de árboles Área promedio (cm²) DE EE
sol 22 53.07 16.73 3.57
sombra 23 73.83 24.03 5.01
ggplot(prom_global, aes(x = exposicion, y = area_cm2, fill = exposicion)) +
  geom_boxplot(outlier.shape = NA, alpha = 0.8) +
  geom_jitter(width = 0.1, alpha = 0.6, size = 2) +
  scale_fill_manual(values = colores, guide = "none") +
  labs(x = "Exposición", y = "Área foliar promedio por árbol (cm²)") +
  theme_minimal(base_size = 12)
Figura 2. Área foliar promedio por árbol según exposición (consolidado del curso). Cada punto es un árbol.

Figura 2. Área foliar promedio por árbol según exposición (consolidado del curso). Cada punto es un árbol.

La prueba \(t\) de Welch unilateral dio \(t\) = -3.376, gl = 39.36, p = < 0.001. El área foliar promedio fue 73.8 cm² en sombra y 53.1 cm² en sol, una diferencia de 20.8 cm² (39.1 % respecto al sol; IC 95%: 8.3 a 33.2 cm²).

tabla_prueba(res_gl, "Tabla 6. Prueba t de Welch sobre promedios por árbol (consolidado del curso).")
Tabla 6. Prueba t de Welch sobre promedios por árbol (consolidado del curso).
Prueba t gl p (unilateral) Media sol (cm²) Media sombra (cm²) Sombra − sol (cm²) IC 95% de la diferencia
Consolidado del curso -3.376 39.36 < 0.001 53.07 73.83 20.76 [8.32; 33.19]

3.7 Sensibilidad a los valores atípicos

sin_atip <- function(df) marcar_atipicos(df) %>% filter(!atipico)

sens <- bind_rows(
  res_g9 %>% mutate(Prueba = "Grupo 9, todas las hojas"),
  prueba_welch(promedio_arbol(sin_atip(df_g9)), "Grupo 9, sin atípicas"),
  res_gl %>% mutate(Prueba = "Consolidado, todas las hojas"),
  prueba_welch(promedio_arbol(sin_atip(df_todos)), "Consolidado, sin atípicas")
)

sens %>%
  transmute(Prueba, t = round(t, 3), gl = round(gl, 2), p = fp(p),
            media_sol = round(media_sol, 2), media_sombra = round(media_sombra, 2)) %>%
  kable(col.names = c("Análisis", "t", "gl", "p (unilateral)", "Media sol (cm²)", "Media sombra (cm²)"),
        caption = "Tabla 7. Resultados con y sin las hojas marcadas como atípicas.") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tabla 7. Resultados con y sin las hojas marcadas como atípicas.
Análisis t gl p (unilateral) Media sol (cm²) Media sombra (cm²)
Grupo 9, todas las hojas -3.274 2.35 0.0330 49.60 79.86
Grupo 9, sin atípicas -3.150 2.30 0.0366 48.46 79.86
Consolidado, todas las hojas -3.376 39.36 < 0.001 53.07 73.83
Consolidado, sin atípicas -3.390 38.58 < 0.001 52.07 72.56

4. Discusión e interpretación ecológica

Diferencias entre sol y sombra y relación con la hipótesis. En la base consolidada, el área foliar promedio por árbol fue 73.8 cm² en sombra y 53.1 cm² en sol (p = < 0.001). Este resultado es coherente con la hipótesis inicial: los árboles de sombra tienen hojas más grandes. En el Grupo 9 solo (5 árboles), p = 0.0330; con una muestra tan pequeña, un p-valor alto no demuestra que no haya diferencia, solo que no hay datos suficientes para detectarla.

Factores ambientales que podrían explicarlo.

  • Luz: en sombra, una lámina más grande captura más radiación cuando esta es escasa.
  • Temperatura y agua: a pleno sol, hojas más pequeñas pierden menos agua y se calientan menos.
  • Suelo pavimentado: los árboles cerca de superficies asfaltadas reciben más calor reflejado y pueden tener menos agua disponible en el suelo, lo que también favorece hojas pequeñas.

Qué pudo influir además del ambiente.

  • Especie o morfotipo: en nuestros datos cada árbol suele ser de una especie distinta, y las especies difieren de forma natural en el tamaño de hoja. Esto se confunde con el efecto de la exposición.
  • Edad y tamaño del árbol.
  • Forma de elegir las hojas: aunque se pidió repartirlas por toda la planta, es posible un sesgo hacia hojas accesibles o más vistosas. Además, la clasificación sol/sombra se hizo a criterio visual.
  • Variabilidad entre hojas: el CV promedio por árbol fue de 19.6 %, lo que indica cuánto varían las hojas dentro de un mismo árbol.

Resultados frente a hipótesis. Lo que los datos muestran es una diferencia observada entre árboles de sol y de sombra en el campus (resultado). Que esa diferencia se deba a la plasticidad foliar frente a la luz es una hipótesis que este diseño no puede probar. Con solo 5 árboles en el Grupo 9, sus conclusiones locales son exploratorias.

5. Conclusiones y limitaciones

Conclusiones

  • Tratar las hojas como independientes da un p-valor artificialmente pequeño (p < 0.001 en el Grupo 9). Al usar el árbol como unidad (\(n\) = 5), el p-valor del Grupo 9 es 0.0330.
  • Con la base consolidada (45 árboles), el p-valor es < 0.001. Hay evidencia de que los árboles de sombra del campus tienen, en promedio, hojas más grandes que los de sol.
  • Es una asociación observada, no una prueba de que el sol reduzca el área foliar.

Limitaciones

  • Estudio observacional: no se controlaron especie, edad ni tamaño de los árboles, que se confunden con la exposición.
  • Muestra pequeña en el Grupo 9 (3 árboles en sol y 2 en sombra), con poca potencia estadística.
  • La categoría sol/sombra es cualitativa y se asignó a criterio visual; no se midió la radiación (PAR).
  • Posible sesgo en la elección de las hojas y errores en el trazo o en la medición del marco.
  • En la base consolidada, los grupos pudieron aplicar los criterios de forma algo distinta.
  • No se midieron suelo, humedad ni temperatura, por lo que los mecanismos propuestos son hipótesis.