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.
¿Cómo cambia el área de las hojas de los árboles del campus según su exposición (pleno sol o sombra)?
Se hizo un muestreo observacional comparativo en el campus universitario. Los árboles se eligieron con estos criterios:
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).
A continuación se muestran ejemplos de papeles con hojas trazadas y su marco de referencia.
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))
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))
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))
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))
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):
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))
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))
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))
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))
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))
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)
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)
| Á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 |
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).
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)
}
| 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).
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)
| 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 |
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).")
| 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] |
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)
| 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.
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).")
| 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] |
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)
| 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 |
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.
Qué pudo influir además del ambiente.
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.