library(tidyverse)
library(agricolae)   # HSD.test
library(knitr)
library(kableExtra)

1 Datos del experimento

Datos extraídos directamente de los archivos Excel y embebidos en el script. Valores corruptos (seriales de fecha de Excel, errores de tipeo) fueron convertidos a NA. Estomas excluidos por diseño. Pérdida de Electrolitos analizada únicamente para el Muestreo 3.

1.1 Variables de Crecimiento

# Columnas: muestreo, tratamiento, n_hojas, long_pa_cm,
#           diam_r_mm, pf_hojas_g, ps_hojas_g, pf_raiz_g, ps_raiz_g, af_cm2
# NA = valor ausente o corrupto (serial de fecha de Excel, error tipográfico)

df_crec <- tribble(
  ~muestreo,   ~trat, ~n_hojas, ~long_pa, ~diam_r, ~pf_hoj, ~ps_hoj, ~pf_raiz, ~ps_raiz, ~af,
  # ── MUESTREO 1 ──────────────────────────────────────────────────────────────
  "Muestreo 1","T1",  7,  12.9, 36.0,  7.60, 0.69, 22.60, 0.9558, 180.84,

  "Muestreo 1","T1",  8,  13.8, 23.2,  8.80, 0.86, 12.56, 0.8187, 202.49,

  "Muestreo 1","T1",  7,  13.9, 31.7,  8.84, 0.73, 22.27, 1.0649, 210.55,

  "Muestreo 1","T1",  8,  12.3, 31.9,  8.66, 0.76, 18.90, 1.0431, 198.06,

  "Muestreo 1","T2",  7,  15.1, 40.4,  8.81, 0.83, 26.75, 1.5481, 211.99,

  "Muestreo 1","T2",  9,  14.0, 37.9,  9.31, 0.80, 27.76, 1.3736, 217.85,

  "Muestreo 1","T2",  8,  14.4, 39.9,  9.31, 0.84, 24.20, 1.1542, 217.62,

  "Muestreo 1","T2",  9,  14.2, 39.1,  9.07, 0.82, 26.70, 1.1029, 212.58,  # Long_PA corrupta

  "Muestreo 1","T3",  8,  15.8, 33.5,  9.47, 0.82, 20.10, 0.8739, 220.32,

  "Muestreo 1","T3",  8,  14.6, 32.1,  9.43, 0.85, 17.20, 0.8547, 218.27,

  "Muestreo 1","T3",  8,  14.1, 31.8,  8.91, 0.80, 18.68, 0.9138, 207.93,

  "Muestreo 1","T3",  7,  15.0, 32.4,  8.89, 0.76, 19.08, 1.0306, 216.44,

  "Muestreo 1","T4",  9,  14.2, 31.0,  8.77, 0.77, 18.27, 0.8722, 208.381,  # AF corrupta

  "Muestreo 1","T4",  8,  13.5, 24.8,  8.55, 0.86, 10.31, 0.6843, 96.740,  # AF corrupta

  "Muestreo 1","T4",  7,  14.0, 32.4,  8.18, 0.74, 19.12, 0.8551, 194.67,

  "Muestreo 1","T4",  8,  13.7, 30.4,  8.81, 0.79, 16.39, 0.9195, 203.61,

  # ── MUESTREO 2 ──────────────────────────────────────────────────────────────
  "Muestreo 2","T1",  8,  14.8, 42.8,  9.86, 0.86, 37.33, 1.7414, 226.37,

  "Muestreo 2","T1",  8,  15.7, 48.4, 11.68, 1.05, 53.00, 1.4191, 273.47,

  "Muestreo 2","T1",  8,  15.4, 48.7, 11.04, 1.03, 42.19, 1.5903, 269.42,

  "Muestreo 2","T1",  9,  16.8, 47.1, 12.84, 1.16, 44.24, 2.2917, 308.39,

  "Muestreo 2","T2",  9,  14.3, 40.0, 11.26, 1.06, 28.08, 1.9556, 265.60,

  "Muestreo 2","T2",  7,  14.7, 41.1, 10.70, 1.00, 29.83, 1.7333, 248.11,

  "Muestreo 2","T2",  8,  15.1, 39.6, 10.93, 1.02, 23.48, 1.7129, 232.08,

  "Muestreo 2","T2",  8,  16.1, 37.0, 11.01, 1.04, 26.86, 2.0629, 255.44,

  "Muestreo 2","T3",  9,  15.2, 37.9, 11.29, 1.00, 28.10, 1.6266, 250.07,

  "Muestreo 2","T3",  8,  14.7, 40.3, 11.21, 1.08, 25.86, 1.7912, 268.00,

  "Muestreo 2","T3",  9,  15.8, 45.6, 10.44, 0.92, 36.35, 1.7539, 246.35,

  "Muestreo 2","T3",  7,  15.7, 31.7, 11.86, 1.16, 16.63, 1.3826, 273.90,

  "Muestreo 2","T4",  9,  16.4, 42.1,  9.50, 0.85, 33.37, 1.4067, 228.40,

  "Muestreo 2","T4",  7,  15.1, 31.7, 10.53, 0.97, 22.00, 1.3220, 257.31,

  "Muestreo 2","T4",  9,  14.5, 37.9, 10.32, 0.96, 24.91, 1.5388, 236.04,

  "Muestreo 2","T4",  9,  14.1, 31.6, 11.99, 1.08, 21.68, 1.1615, 283.50,

  # ── MUESTREO 3 ──────────────────────────────────────────────────────────────
  "Muestreo 3","T1",  9,  16.4, 42.5, 13.31, 1.23, 41.27, 2.6166, 282.98,

  "Muestreo 3","T1", 10,  16.0, 47.5, 14.98, 1.51, 53.69, 3.1114, 341.10,

  "Muestreo 3","T1",  9,  16.2, 54.2, 13.93, 1.42, 65.81, 3.5401, 327.29,

  "Muestreo 3","T1",  8,  15.7, 47.4, 11.00, 1.12, 40.55, 2.8235, 253.60,

  "Muestreo 3","T2",  7,  14.5, 42.1, 10.15, 1.02, 30.54, 2.1462, 236.66,

  "Muestreo 3","T2",  6,  15.2, 43.0,  9.35, 1.15, 31.53, 1.9389, 214.73,

  "Muestreo 3","T2",  8,  15.3, 41.6, 10.65, 0.85, 27.80, 2.1330, 243.60,

  "Muestreo 3","T2",  7,  16.0, 47.1,  9.65, 0.99, 37.22, 2.3685, 226.74,

  "Muestreo 3","T3",  8,  16.5, 37.9, 10.91, 1.09, 23.84, 2.0379, 256.02,

  "Muestreo 3","T3",  8,  15.3, 47.1, 11.34, 1.22, 36.25, 2.6099, 258.82,

  "Muestreo 3","T3",  7,  16.3, 45.3, 10.98, 1.11, 32.26, 2.2936, 258.89,

  "Muestreo 3","T3",  7,  14.5, 45.7,  9.27, 0.99, 33.57, 2.5239, 219.39,

  "Muestreo 3","T4",  8,  15.5, 36.4, 10.97, 1.30, 32.59, 1.7842, 264.44,

  "Muestreo 3","T4",  8,  14.9, 41.2, 10.80, 1.07, 29.61, 2.2965, 237.67,

  "Muestreo 3","T4",  7,  15.8, 40.1,  9.85, 0.83, 30.80, 2.2289, 229.33,

  "Muestreo 3","T4",  6,  15.9, 39.6, 12.21, 1.18, 26.71, 2.0960, 277.65,

  # ── MUESTREO 4 ──────────────────────────────────────────────────────────────
  # Long_PA: seriales de fecha en la mayoría → NA; solo T1P3, T1P4, T3P4 son válidos
  # AF: T1P1 corrupta (serial de fecha); T1P2 en adelante normales
  "Muestreo 4","T1",  9,  16.8, 59.9, 17.11, 1.81, 64.56, 4.8800, 364.54,  # Long_PA corrupta

  "Muestreo 4","T1",  9,  16.3, 45.1, 17.51, 2.07, 56.65, 4.7300, 381.49,

  "Muestreo 4","T1",  9,  16.0, 59.4, 14.00, 1.49, 54.71, 5.0000, 309.44,

  "Muestreo 4","T1",  9,  16.0, 57.0, 15.39, 1.82, 67.31, 4.1700, 325.67,

  "Muestreo 4","T2",  7,  16.8, 44.7, 13.27, 1.61, 30.88, 3.0100, 286.31,

  "Muestreo 4","T2",  7,  14.2, 51.6,  9.90, 1.24, 35.82, 3.0100, 227.12,

  "Muestreo 4","T2",  7,  14.9, 43.5,  8.81, 1.23, 34.08, 2.7100, 242.11,

  "Muestreo 4","T2",  7,  15.8, 41.8, 10.14, 1.28, 30.41, 2.8100, 241.22,

  "Muestreo 4","T3",  6,  16.2, 47.4, 10.37, 1.36, 29.71, 3.0500, 250.14,

  "Muestreo 4","T3",  6,  16.2, 34.0, 11.40, 1.40, 21.16, 2.1800, 266.19,

  "Muestreo 4","T3",  6,  16.5, 36.4, 11.96, 1.49, 28.46, 2.7000, 267.98,

  "Muestreo 4","T3",  7,  15.0, 49.0, 10.92, 1.30, 38.50, 3.1300, 250.73,

  "Muestreo 4","T4",  7,  14.7, 37.7, 11.14, 1.29, 29.54, 2.7300, 238.98,

  "Muestreo 4","T4",  7,  14.9, 33.8, 11.31, 1.35, 24.63, 2.3600, 256.99,

  "Muestreo 4","T4",  6,  15.1, 28.0, 10.77, 1.19, 16.66, 1.6900, 210.49,  # PS_Hojas corrupta

  "Muestreo 4","T4",  7,  14.9, 34.2, 11.22, 1.33, 22.96, 2.3700, 253.16

) %>%
  mutate(
    muestreo = factor(muestreo, levels = paste("Muestreo", 1:4)),
    trat     = factor(trat, levels = c("T1","T2","T3","T4"))
  )

1.2 CRC-SPAD, CRA, Temperatura de Hoja

df_spad <- tribble(
  ~muestreo,   ~trat, ~spad,
  # Muestreo 1
  "Muestreo 1","T1", 43.92,
  "Muestreo 1","T1", 42.40,
  "Muestreo 1","T1", 42.52,
  "Muestreo 1","T1", 42.43,
  "Muestreo 1","T2", 39.93,
  "Muestreo 1","T2", 43.02,
  "Muestreo 1","T2", 44.45,
  "Muestreo 1","T2", 43.07,
  "Muestreo 1","T3", 40.41,
  "Muestreo 1","T3", 40.30,
  "Muestreo 1","T3", 42.22,
  "Muestreo 1","T3", 43.49,
  "Muestreo 1","T4", 38.32,
  "Muestreo 1","T4", 44.38,
  "Muestreo 1","T4", 44.17,
  "Muestreo 1","T4", 41.08,
  # Muestreo 2
  "Muestreo 2","T1", 43.19,
  "Muestreo 2","T1", 45.44,
  "Muestreo 2","T1", 41.95,
  "Muestreo 2","T1", 42.85,
  "Muestreo 2","T2", 42.64,
  "Muestreo 2","T2", 44.48,
  "Muestreo 2","T2", 44.39,
  "Muestreo 2","T2", 41.48,
  "Muestreo 2","T3", 43.06,
  "Muestreo 2","T3", 45.57,
  "Muestreo 2","T3", 46.88,
  "Muestreo 2","T3", 40.12,
  "Muestreo 2","T4", 43.17,
  "Muestreo 2","T4", 44.64,
  "Muestreo 2","T4", 39.17,
  "Muestreo 2","T4", 41.00,
  # Muestreo 3
  "Muestreo 3","T1", 42.48,
  "Muestreo 3","T1", 47.59,
  "Muestreo 3","T1", 46.87,
  "Muestreo 3","T1", 42.57,
  "Muestreo 3","T2", 41.95,
  "Muestreo 3","T2", 41.33,
  "Muestreo 3","T2", 39.24,
  "Muestreo 3","T2", 46.55,
  "Muestreo 3","T3", 37.90,
  "Muestreo 3","T3", 42.87,
  "Muestreo 3","T3", 45.30,
  "Muestreo 3","T3", 47.03,
  "Muestreo 3","T4", 45.35,
  "Muestreo 3","T4", 46.95,
  "Muestreo 3","T4", 38.69,
  "Muestreo 3","T4", 42.02,
  # Muestreo 4
  "Muestreo 4","T1", 44.32,
  "Muestreo 4","T1", 47.02,
  "Muestreo 4","T1", 38.25,
  "Muestreo 4","T1", 44.70,
  "Muestreo 4","T2", 42.15,
  "Muestreo 4","T2", 48.26,
  "Muestreo 4","T2", 36.09,
  "Muestreo 4","T2", 38.39,
  "Muestreo 4","T3", 43.66,
  "Muestreo 4","T3", 37.45,
  "Muestreo 4","T3", 44.86,
  "Muestreo 4","T3", 39.44,
  "Muestreo 4","T4", 50.47,
  "Muestreo 4","T4", 39.14,
  "Muestreo 4","T4", 38.43,
  "Muestreo 4","T4", 43.66
) %>%
  mutate(muestreo = factor(muestreo, levels = paste("Muestreo", 1:4)),
         trat     = factor(trat, levels = c("T1","T2","T3","T4")))

# ──────────────────────────────────────────────────────────────────────────────
df_cra <- tribble(
  ~muestreo,   ~trat, ~cra,
  # Muestreo 1
  "Muestreo 1","T1", 24.97,
  "Muestreo 1","T1", 41.67,
  "Muestreo 1","T1", 21.51,
  "Muestreo 1","T1", 24.53,
  "Muestreo 1","T2", 41.46,
  "Muestreo 1","T2", 59.77,
  "Muestreo 1","T2", 54.28,
  "Muestreo 1","T2", 59.24,
  "Muestreo 1","T3", 43.97,
  "Muestreo 1","T3", 31.04,
  "Muestreo 1","T3", 24.92,
  "Muestreo 1","T3", 38.90,
  "Muestreo 1","T4", 52.73,
  "Muestreo 1","T4", 54.80,
  "Muestreo 1","T4", 63.18,
  "Muestreo 1","T4", 41.64,
  # Muestreo 2
  "Muestreo 2","T1", 27.78,
  "Muestreo 2","T1", 29.15,
  "Muestreo 2","T1", 23.82,
  "Muestreo 2","T1", 61.18,
  "Muestreo 2","T2", 31.70,
  "Muestreo 2","T2", 26.87,
  "Muestreo 2","T2", 26.36,
  "Muestreo 2","T2", 34.82,
  "Muestreo 2","T3", 45.38,
  "Muestreo 2","T3", 33.05,
  "Muestreo 2","T3", 28.96,
  "Muestreo 2","T3", 33.79,
  "Muestreo 2","T4", 37.58,
  "Muestreo 2","T4", 31.32,
  "Muestreo 2","T4", 39.25,
  "Muestreo 2","T4", 34.08,
  # Muestreo 3
  "Muestreo 3","T1", 43.68,
  "Muestreo 3","T1", 48.02,
  "Muestreo 3","T1", 64.85,
  "Muestreo 3","T1", 43.01,
  "Muestreo 3","T2", 61.36,
  "Muestreo 3","T2", 60.77,
  "Muestreo 3","T2", 62.33,
  "Muestreo 3","T2", 54.21,
  "Muestreo 3","T3", 66.67,
  "Muestreo 3","T3", 62.43,
  "Muestreo 3","T3", 62.67,
  "Muestreo 3","T3", 69.45,
  "Muestreo 3","T4", 64.41,
  "Muestreo 3","T4", 62.28,
  "Muestreo 3","T4", 54.70,
  "Muestreo 3","T4", 59.02,
  # Muestreo 4
  "Muestreo 4","T1", 71.89,
  "Muestreo 4","T1", 74.44,
  "Muestreo 4","T1", 79.51,
  "Muestreo 4","T1", 82.82,
  "Muestreo 4","T2", 69.71,
  "Muestreo 4","T2", 63.79,
  "Muestreo 4","T2", 70.45,
  "Muestreo 4","T2", 57.27,
  "Muestreo 4","T3", 59.58,
  "Muestreo 4","T3", 75.00,
  "Muestreo 4","T3", 70.53,
  "Muestreo 4","T3", 66.28,
  "Muestreo 4","T4", 74.93,
  "Muestreo 4","T4", 71.02,
  "Muestreo 4","T4", 76.92,
  "Muestreo 4","T4", 76.43
) %>%
  mutate(muestreo = factor(muestreo, levels = paste("Muestreo", 1:4)),
         trat     = factor(trat, levels = c("T1","T2","T3","T4")))

# ──────────────────────────────────────────────────────────────────────────────
# Temperatura de Hoja (NA = serial de fecha de Excel o valor no registrado)
df_temp <- tribble(
  ~muestreo,   ~trat, ~temp,
  # Muestreo 1
  "Muestreo 1","T1", 13.64,
  "Muestreo 1","T1", 10.14,
  "Muestreo 1","T1", 10.92,
  "Muestreo 1","T1", 13.48,
  "Muestreo 1","T2", 13.22,
  "Muestreo 1","T2", 10.78,
  "Muestreo 1","T2", 10.00,
  "Muestreo 1","T2", 13.2,   # serial de fecha
  "Muestreo 1","T3", 11.76,
  "Muestreo 1","T3", 12.24,
  "Muestreo 1","T3", 13.98,
  "Muestreo 1","T3", 12.46,
  "Muestreo 1","T4", 11.52,
  "Muestreo 1","T4", 11.04,   # serial de fecha
  "Muestreo 1","T4", 12.62,
  "Muestreo 1","T4", 12.68,
  # Muestreo 2
  "Muestreo 2","T1", 17.78,
  "Muestreo 2","T1", 19.96,
  "Muestreo 2","T1", 19.54,
  "Muestreo 2","T1", 19.88,
  "Muestreo 2","T2", 18.62,
  "Muestreo 2","T2", 16.88,
  "Muestreo 2","T2", 18.20,
  "Muestreo 2","T2", 17.58,
  "Muestreo 2","T3", 18.14,
  "Muestreo 2","T3", 18.90,
  "Muestreo 2","T3", 15.22,
  "Muestreo 2","T3", 17.46,
  "Muestreo 2","T4", 15.60,
  "Muestreo 2","T4", 17.52,
  "Muestreo 2","T4", 15.86,
  "Muestreo 2","T4", 15.12,
  # Muestreo 3
  "Muestreo 3","T1", 13.40,
  "Muestreo 3","T1", 12.80,
  "Muestreo 3","T1", 13.50,
  "Muestreo 3","T1", 12.90,
  "Muestreo 3","T2", 13.80,
  "Muestreo 3","T2", 12.80,
  "Muestreo 3","T2", 12.90,
  "Muestreo 3","T2", 12.30,
  "Muestreo 3","T3", 13.30,
  "Muestreo 3","T3", 13.10,
  "Muestreo 3","T3", 13.10,
  "Muestreo 3","T3", 13.20,
  "Muestreo 3","T4", 13.60,
  "Muestreo 3","T4", 13.20,
  "Muestreo 3","T4", 13.50,
  "Muestreo 3","T4", 12.70,
  # Muestreo 4
  "Muestreo 4","T1", 21.00,
  "Muestreo 4","T1", 19.4,   # serial
  "Muestreo 4","T1", 17.3,   # serial
  "Muestreo 4","T1", 15.06,   # serial
  "Muestreo 4","T2", 15.3,   # serial
  "Muestreo 4","T2", 14.4,   # serial
  "Muestreo 4","T2", 14.76,
  "Muestreo 4","T2", 15.74,
  "Muestreo 4","T3", 15.56,
  "Muestreo 4","T3", 17.28,
  "Muestreo 4","T3", 13.68,
  "Muestreo 4","T3", 13.56,
  "Muestreo 4","T4", 12.32,
  "Muestreo 4","T4", 13.80,
  "Muestreo 4","T4", 12.08,
  "Muestreo 4","T4", 12.08
) %>%
  mutate(muestreo = factor(muestreo, levels = paste("Muestreo", 1:4)),
         trat     = factor(trat, levels = c("T1","T2","T3","T4")))

1.3 Pérdida de Electrolitos (solo Muestreo 3)

# PE (%) = (CE_10min / CE_80°C) × 100  — solo Muestreo 3 tiene datos válidos
df_pe <- tribble(
  ~muestreo,   ~trat, ~pe,
  "Muestreo 3","T1", 73.41,
  "Muestreo 3","T1", 73.87,
  "Muestreo 3","T1", 76.00,
  "Muestreo 3","T1", 69.46,
  "Muestreo 3","T2", 77.57,
  "Muestreo 3","T2", 79.28,
  "Muestreo 3","T2", 82.77,
  "Muestreo 3","T2", 78.04,
  "Muestreo 3","T3", 76.38,
  "Muestreo 3","T3", 75.53,
  "Muestreo 3","T3", 75.43,
  "Muestreo 3","T3", 74.58,
  "Muestreo 3","T4", 81.07,
  "Muestreo 3","T4", 76.20,
  "Muestreo 3","T4", 82.28,
  "Muestreo 3","T4", 77.85
) %>%
  mutate(muestreo = factor(muestreo, levels = paste("Muestreo", 1:4)),
         trat     = factor(trat, levels = c("T1","T2","T3","T4")))

2 Motor de análisis estadístico

PAL <- c(T1 = "#2E86AB", T2 = "#E84855", T3 = "#3BB273", T4 = "#F18F01")

# ─────────────────────────────────────────────────────────────────────────────
# Función principal: tabla descriptiva + ANOVA + Tukey + boxplot
# ─────────────────────────────────────────────────────────────────────────────
analizar <- function(df, var, etiqueta, unidad = "") {

  eje_y <- if (nchar(unidad) > 0) paste0(etiqueta, " (", unidad, ")") else etiqueta

  # ── 1. Estadística descriptiva ──────────────────────────────────────────────
  desc <- df %>%
    filter(!is.na(.data[[var]])) %>%
    group_by(muestreo, trat) %>%
    summarise(n    = n(),
              Media = round(mean(.data[[var]]), 3),
              DE    = round(sd(.data[[var]]),   3),
              .groups = "drop")

  print(
    kable(desc, caption = paste("Estadística descriptiva —", etiqueta),
          col.names = c("Muestreo","Tratamiento","n","Media","DE"),
          align = "llccc") %>%
      kable_styling(bootstrap_options = c("striped","hover","condensed"),
                    full_width = FALSE, position = "left", font_size = 13) %>%
      row_spec(0, bold = TRUE, background = "#2C3E50", color = "white")
  )

  # ── 2. ANOVA + Tukey por muestreo ───────────────────────────────────────────
  muestreos <- levels(droplevels(df$muestreo))
  letras_all <- tibble()

  for (m in muestreos) {
    sub <- df %>%
      filter(muestreo == m, !is.na(.data[[var]])) %>%
      mutate(trat = factor(trat))

    if (nlevels(sub$trat) < 2 || nrow(sub) < 4) next

    mod   <- aov(as.formula(paste0("`", var, "` ~ trat")), data = sub)
    res   <- summary(mod)[[1]]
    p_val <- res[["Pr(>F)"]][1]
    f_val <- res[["F value"]][1]
    gl_t  <- res[["Df"]][1]
    gl_r  <- res[["Df"]][2]
    sig   <- !is.na(p_val) && p_val < 0.05

    cat(sprintf("\n**%s** — F(%d,%d) = %.3f, *p* = %.4f %s\n\n",
                m, gl_t, gl_r, f_val, p_val,
                ifelse(sig, "→ **Significativo ✓**", "→ ns")))

    tbl_aov <- as.data.frame(res) %>%
      rownames_to_column("Fuente") %>%
      mutate(Fuente = c("Tratamiento","Residuos"))
    print(
      kable(tbl_aov, digits = 4,
            col.names = c("Fuente","GL","SC","CM","F","p-valor"),
            caption = paste("ANOVA —", m), align = "lccccc") %>%
        kable_styling(bootstrap_options = c("striped","condensed"),
                      full_width = FALSE, position = "left", font_size = 12)
    )

    if (sig) {
      tk <- HSD.test(mod, "trat", group = TRUE, console = FALSE)
      lt <- tk$groups %>%
        rownames_to_column("trat") %>%
        rename(letra = groups) %>%
        mutate(muestreo = factor(m, levels = paste("Muestreo", 1:4)))

      print(
        kable(lt %>% select(trat, .data[[var]], letra),
              digits = 3,
              col.names = c("Tratamiento","Media","Grupo Tukey"),
              caption = paste("Tukey HSD —", m), align = "lcc") %>%
          kable_styling(bootstrap_options = c("striped","hover","condensed"),
                        full_width = FALSE, position = "left", font_size = 12) %>%
          column_spec(3, bold = TRUE, color = "#2980B9")
      )
      letras_all <- bind_rows(letras_all, lt)
    } else {
      # Sin significancia → "ns" para todos los tratamientos
      lt_ns <- sub %>%
        distinct(trat) %>%
        mutate(letra   = "ns",
               muestreo = factor(m, levels = paste("Muestreo", 1:4)))
      lt_ns[[var]] <- mean(sub[[var]], na.rm = TRUE)
      letras_all <- bind_rows(letras_all, lt_ns)
    }
  }

  # ── 3. Boxplot con letras ───────────────────────────────────────────────────
  dat_plot <- df %>% filter(!is.na(.data[[var]]))

  ypos <- dat_plot %>%
    group_by(muestreo) %>%
    summarise(y_max   = max(.data[[var]], na.rm = TRUE),
              y_rango = diff(range(.data[[var]], na.rm = TRUE)),
              .groups = "drop")

  if (nrow(letras_all) > 0) {
    letras_plot <- letras_all %>%
      left_join(ypos, by = "muestreo") %>%
      mutate(y_letra = y_max + y_rango * 0.10,
             trat    = factor(trat, levels = c("T1","T2","T3","T4")))
  }

  p <- ggplot(dat_plot, aes(x = trat, y = .data[[var]], fill = trat)) +
    geom_boxplot(alpha = 0.72, outlier.shape = 21, outlier.size = 2,
                 color = "grey30", linewidth = 0.5) +
    geom_jitter(aes(color = trat), width = 0.15, size = 2.2,
                alpha = 0.75, show.legend = FALSE) +
    facet_wrap(~ muestreo, nrow = 1, scales = "free_y") +
    scale_fill_manual(values  = PAL, name = "Tratamiento") +
    scale_color_manual(values = PAL) +
    labs(title    = etiqueta,
         subtitle = "Letras distintas = diferencias significativas (Tukey HSD, α = 0.05); 'ns' = no significativo",
         x = "Tratamiento", y = eje_y) +
    theme_bw(base_size = 12) +
    theme(plot.title       = element_text(face = "bold", size = 14),
          plot.subtitle    = element_text(size = 9, color = "grey50"),
          strip.background = element_rect(fill = "#2C3E50", color = NA),
          strip.text       = element_text(color = "white", face = "bold"),
          legend.position  = "bottom",
          panel.grid.minor = element_blank())

  if (nrow(letras_all) > 0 && exists("letras_plot")) {
    p <- p + geom_text(data = letras_plot,
                       aes(x = trat, y = y_letra, label = letra),
                       inherit.aes = FALSE,
                       size = 4.5, fontface = "bold", color = "#1A1A2E")
  }

  print(p)
  cat("\n\n---\n\n")
  invisible(NULL)
}

3 Variables de Crecimiento y Desarrollo

3.1 Número de Hojas

analizar(df_crec, "n_hojas", "Número de Hojas", "hojas/planta")
Estadística descriptiva — Número de Hojas
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 7.50 0.577
Muestreo 1 T2 4 8.25 0.957
Muestreo 1 T3 4 7.75 0.500
Muestreo 1 T4 4 8.00 0.816
Muestreo 2 T1 4 8.25 0.500
Muestreo 2 T2 4 8.00 0.816
Muestreo 2 T3 4 8.25 0.957
Muestreo 2 T4 4 8.50 1.000
Muestreo 3 T1 4 9.00 0.816
Muestreo 3 T2 4 7.00 0.816
Muestreo 3 T3 4 7.50 0.577
Muestreo 3 T4 4 7.25 0.957
Muestreo 4 T1 4 9.00 0.000
Muestreo 4 T2 4 7.00 0.000
Muestreo 4 T3 4 6.25 0.500
Muestreo 4 T4 4 6.75 0.500

Muestreo 1 — F(3,12) = 0.769, p = 0.5330 → ns

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 1.25 0.4167 0.7692 0.533
Residuos 12 6.50 0.5417 NA NA

Muestreo 2 — F(3,12) = 0.235, p = 0.8700 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 0.5 0.1667 0.2353 0.87
Residuos 12 8.5 0.7083 NA NA

Muestreo 3 — F(3,12) = 5.000, p = 0.0178 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 9.6875 3.2292 5 0.0178
Residuos 12 7.7500 0.6458 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T1 9.00 a
T3 7.50 ab
T4 7.25 b
T2 7.00 b

Muestreo 4 — F(3,12) = 46.667, p = 0.0000 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 17.5 5.8333 46.6667 0
Residuos 12 1.5 0.1250 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 9.00 a
T2 7.00 b
T4 6.75 bc
T3 6.25 c


3.2 Longitud Parte Aérea

analizar(df_crec, "long_pa", "Longitud Parte Aérea", "cm")
Estadística descriptiva — Longitud Parte Aérea
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 13.225 0.763
Muestreo 1 T2 4 14.425 0.479
Muestreo 1 T3 4 14.875 0.718
Muestreo 1 T4 4 13.850 0.311
Muestreo 2 T1 4 15.675 0.838
Muestreo 2 T2 4 15.050 0.772
Muestreo 2 T3 4 15.350 0.507
Muestreo 2 T4 4 15.025 1.005
Muestreo 3 T1 4 16.075 0.299
Muestreo 3 T2 4 15.250 0.614
Muestreo 3 T3 4 15.650 0.929
Muestreo 3 T4 4 15.525 0.450
Muestreo 4 T1 4 16.275 0.377
Muestreo 4 T2 4 15.425 1.127
Muestreo 4 T3 4 15.975 0.665
Muestreo 4 T4 4 14.900 0.163

Muestreo 1 — F(3,12) = 5.745, p = 0.0113 → Significativo ✓

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 6.1369 2.0456 5.7455 0.0113
Residuos 12 4.2725 0.3560 NA NA
Tukey HSD — Muestreo 1
Tratamiento Media Grupo Tukey
T3 14.875 a
T2 14.425 ab
T4 13.850 ab
T1 13.225 b

Muestreo 2 — F(3,12) = 0.580, p = 0.6395 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 1.115 0.3717 0.5796 0.6395
Residuos 12 7.695 0.6412 NA NA

Muestreo 3 — F(3,12) = 1.232, p = 0.3410 → ns

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 1.415 0.4717 1.2318 0.341
Residuos 12 4.595 0.3829 NA NA

Muestreo 4 — F(3,12) = 3.145, p = 0.0650 → ns

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 4.4369 1.4790 3.1453 0.065
Residuos 12 5.6425 0.4702 NA NA


3.3 Diámetro de Raíz

analizar(df_crec, "diam_r", "Diámetro de Raíz", "mm")
Estadística descriptiva — Diámetro de Raíz
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 30.700 5.378
Muestreo 1 T2 4 39.325 1.090
Muestreo 1 T3 4 32.450 0.742
Muestreo 1 T4 4 29.650 3.340
Muestreo 2 T1 4 46.750 2.723
Muestreo 2 T2 4 39.425 1.737
Muestreo 2 T3 4 38.875 5.764
Muestreo 2 T4 4 35.825 5.117
Muestreo 3 T1 4 47.900 4.805
Muestreo 3 T2 4 43.450 2.501
Muestreo 3 T3 4 44.000 4.139
Muestreo 3 T4 4 39.325 2.061
Muestreo 4 T1 4 55.350 6.950
Muestreo 4 T2 4 45.400 4.301
Muestreo 4 T3 4 41.700 7.597
Muestreo 4 T4 4 33.425 4.019

Muestreo 1 — F(3,12) = 7.245, p = 0.0049 → Significativo ✓

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 227.2669 75.7556 7.2454 0.0049
Residuos 12 125.4675 10.4556 NA NA
Tukey HSD — Muestreo 1
Tratamiento Media Grupo Tukey
T2 39.325 a
T3 32.450 b
T1 30.700 b
T4 29.650 b

Muestreo 2 — F(3,12) = 4.917, p = 0.0187 → Significativo ✓

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 257.5919 85.864 4.9175 0.0187
Residuos 12 209.5325 17.461 NA NA
Tukey HSD — Muestreo 2
Tratamiento Media Grupo Tukey
T1 46.750 a
T2 39.425 ab
T3 38.875 ab
T4 35.825 b

Muestreo 3 — F(3,12) = 3.883, p = 0.0376 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 147.7169 49.2390 3.8828 0.0376
Residuos 12 152.1775 12.6815 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T1 47.900 a
T3 44.000 ab
T2 43.450 ab
T4 39.325 b

Muestreo 4 — F(3,12) = 9.399, p = 0.0018 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 991.5969 330.5323 9.3991 0.0018
Residuos 12 421.9975 35.1665 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 55.350 a
T2 45.400 ab
T3 41.700 b
T4 33.425 b


3.4 Peso Fresco Hojas

analizar(df_crec, "pf_hoj", "Peso Fresco de Hojas", "g")
Estadística descriptiva — Peso Fresco de Hojas
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 8.475 0.588
Muestreo 1 T2 4 9.125 0.239
Muestreo 1 T3 4 9.175 0.318
Muestreo 1 T4 4 8.578 0.289
Muestreo 2 T1 4 11.355 1.244
Muestreo 2 T2 4 10.975 0.231
Muestreo 2 T3 4 11.200 0.583
Muestreo 2 T4 4 10.585 1.037
Muestreo 3 T1 4 13.305 1.684
Muestreo 3 T2 4 9.950 0.572
Muestreo 3 T3 4 10.625 0.923
Muestreo 3 T4 4 10.957 0.970
Muestreo 4 T1 4 16.003 1.621
Muestreo 4 T2 4 10.530 1.916
Muestreo 4 T3 4 11.162 0.678
Muestreo 4 T4 4 11.110 0.237

Muestreo 1 — F(3,12) = 3.590, p = 0.0464 → Significativo ✓

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 1.5823 0.5274 3.5904 0.0464
Residuos 12 1.7628 0.1469 NA NA
Tukey HSD — Muestreo 1
Tratamiento Media Grupo Tukey
T3 9.175 a
T2 9.125 a
T4 8.578 a
T1 8.475 a

Muestreo 2 — F(3,12) = 0.593, p = 0.6313 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 1.3423 0.4474 0.5932 0.6313
Residuos 12 9.0511 0.7543 NA NA

Muestreo 3 — F(3,12) = 6.870, p = 0.0060 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 25.5304 8.5101 6.8704 0.006
Residuos 12 14.8641 1.2387 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T1 13.305 a
T4 10.957 b
T3 10.625 b
T2 9.950 b

Muestreo 4 — F(3,12) = 15.269, p = 0.0002 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 78.0496 26.0165 15.2686 2e-04
Residuos 12 20.4472 1.7039 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 16.003 a
T3 11.162 b
T4 11.110 b
T2 10.530 b


3.5 Peso Seco Hojas

analizar(df_crec, "ps_hoj", "Peso Seco de Hojas", "g")
Estadística descriptiva — Peso Seco de Hojas
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 0.760 0.073
Muestreo 1 T2 4 0.823 0.017
Muestreo 1 T3 4 0.807 0.038
Muestreo 1 T4 4 0.790 0.051
Muestreo 2 T1 4 1.025 0.124
Muestreo 2 T2 4 1.030 0.026
Muestreo 2 T3 4 1.040 0.103
Muestreo 2 T4 4 0.965 0.094
Muestreo 3 T1 4 1.320 0.177
Muestreo 3 T2 4 1.002 0.123
Muestreo 3 T3 4 1.102 0.094
Muestreo 3 T4 4 1.095 0.200
Muestreo 4 T1 4 1.797 0.238
Muestreo 4 T2 4 1.340 0.181
Muestreo 4 T3 4 1.388 0.080
Muestreo 4 T4 4 1.290 0.071

Muestreo 1 — F(3,12) = 1.203, p = 0.3503 → ns

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 0.0086 0.0029 1.2035 0.3503
Residuos 12 0.0287 0.0024 NA NA

Muestreo 2 — F(3,12) = 0.518, p = 0.6779 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 0.0138 0.0046 0.5178 0.6779
Residuos 12 0.1066 0.0089 NA NA

Muestreo 3 — F(3,12) = 3.035, p = 0.0708 → ns

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 0.2173 0.0724 3.0351 0.0708
Residuos 12 0.2864 0.0239 NA NA

Muestreo 4 — F(3,12) = 8.589, p = 0.0026 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 0.6492 0.2164 8.5891 0.0026
Residuos 12 0.3023 0.0252 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 1.797 a
T3 1.388 b
T2 1.340 b
T4 1.290 b


3.6 Peso Fresco Raíz

analizar(df_crec, "pf_raiz", "Peso Fresco de Raíz", "g")
Estadística descriptiva — Peso Fresco de Raíz
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 19.082 4.659
Muestreo 1 T2 4 26.352 1.516
Muestreo 1 T3 4 18.765 1.202
Muestreo 1 T4 4 16.023 3.975
Muestreo 2 T1 4 44.190 6.549
Muestreo 2 T2 4 27.062 2.681
Muestreo 2 T3 4 26.735 8.107
Muestreo 2 T4 4 25.490 5.451
Muestreo 3 T1 4 50.330 11.953
Muestreo 3 T2 4 31.773 3.960
Muestreo 3 T3 4 31.480 5.357
Muestreo 3 T4 4 29.928 2.470
Muestreo 4 T1 4 60.808 6.078
Muestreo 4 T2 4 32.798 2.592
Muestreo 4 T3 4 29.458 7.110
Muestreo 4 T4 4 23.447 5.317

Muestreo 1 — F(3,12) = 7.567, p = 0.0042 → Significativo ✓

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 234.1177 78.0392 7.5672 0.0042
Residuos 12 123.7537 10.3128 NA NA
Tukey HSD — Muestreo 1
Tratamiento Media Grupo Tukey
T2 26.352 a
T1 19.082 b
T3 18.765 b
T4 16.023 b

Muestreo 2 — F(3,12) = 8.721, p = 0.0024 → Significativo ✓

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 951.8483 317.2828 8.7213 0.0024
Residuos 12 436.5630 36.3802 NA NA
Tukey HSD — Muestreo 2
Tratamiento Media Grupo Tukey
T1 44.190 a
T2 27.062 b
T3 26.735 b
T4 25.490 b

Muestreo 3 — F(3,12) = 7.736, p = 0.0039 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 1121.8652 373.9551 7.7358 0.0039
Residuos 12 580.0882 48.3407 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T1 50.330 a
T2 31.773 b
T3 31.480 b
T4 29.928 b

Muestreo 4 — F(3,12) = 35.897, p = 0.0000 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 3297.8504 1099.2835 35.8965 0
Residuos 12 367.4841 30.6237 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 60.808 a
T2 32.798 b
T3 29.458 b
T4 23.447 b


3.7 Peso Seco Raíz

analizar(df_crec, "ps_raiz", "Peso Seco de Raíz", "g")
Estadística descriptiva — Peso Seco de Raíz
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 0.971 0.112
Muestreo 1 T2 4 1.295 0.206
Muestreo 1 T3 4 0.918 0.079
Muestreo 1 T4 4 0.833 0.103
Muestreo 2 T1 4 1.761 0.378
Muestreo 2 T2 4 1.866 0.171
Muestreo 2 T3 4 1.639 0.185
Muestreo 2 T4 4 1.357 0.158
Muestreo 3 T1 4 3.023 0.400
Muestreo 3 T2 4 2.147 0.176
Muestreo 3 T3 4 2.366 0.256
Muestreo 3 T4 4 2.101 0.227
Muestreo 4 T1 4 4.695 0.367
Muestreo 4 T2 4 2.885 0.150
Muestreo 4 T3 4 2.765 0.432
Muestreo 4 T4 4 2.288 0.434

Muestreo 1 — F(3,12) = 9.115, p = 0.0020 → Significativo ✓

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 0.4892 0.1631 9.1146 0.002
Residuos 12 0.2147 0.0179 NA NA
Tukey HSD — Muestreo 1
Tratamiento Media Grupo Tukey
T2 1.295 a
T1 0.971 b
T3 0.918 b
T4 0.833 b

Muestreo 2 — F(3,12) = 3.340, p = 0.0560 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 0.5787 0.1929 3.3396 0.056
Residuos 12 0.6931 0.0578 NA NA

Muestreo 3 — F(3,12) = 9.377, p = 0.0018 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 2.1686 0.7229 9.3775 0.0018
Residuos 12 0.9250 0.0771 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T1 3.023 a
T3 2.366 b
T2 2.147 b
T4 2.101 b

Muestreo 4 — F(3,12) = 33.546, p = 0.0000 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 13.3965 4.4655 33.5462 0
Residuos 12 1.5974 0.1331 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 4.695 a
T2 2.885 b
T3 2.765 b
T4 2.288 b


3.8 Área Foliar

analizar(df_crec, "af", "Área Foliar", "cm²")
Estadística descriptiva — Área Foliar
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 197.985 12.545
Muestreo 1 T2 4 215.010 3.157
Muestreo 1 T3 4 215.740 5.443
Muestreo 1 T4 4 175.850 53.045
Muestreo 2 T1 4 269.413 33.607
Muestreo 2 T2 4 250.308 14.110
Muestreo 2 T3 4 259.580 13.434
Muestreo 2 T4 4 251.312 24.700
Muestreo 3 T1 4 301.242 40.292
Muestreo 3 T2 4 230.433 12.548
Muestreo 3 T3 4 248.280 19.306
Muestreo 3 T4 4 252.272 22.595
Muestreo 4 T1 4 345.285 33.422
Muestreo 4 T2 4 249.190 25.682
Muestreo 4 T3 4 258.760 9.644
Muestreo 4 T4 4 239.905 21.085

Muestreo 1 — F(3,12) = 1.869, p = 0.1887 → ns

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 4220.249 1406.7496 1.8689 0.1887
Residuos 12 9032.365 752.6971 NA NA

Muestreo 2 — F(3,12) = 0.594, p = 0.6306 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 944.6299 314.8766 0.5944 0.6306
Residuos 12 6357.3084 529.7757 NA NA

Muestreo 3 — F(3,12) = 5.519, p = 0.0129 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 11028.602 3676.201 5.5194 0.0129
Residuos 12 7992.647 666.054 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T1 301.242 a
T4 252.272 ab
T3 248.280 ab
T2 230.433 b

Muestreo 4 — F(3,12) = 16.339, p = 0.0002 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 28359.076 9453.0254 16.3394 2e-04
Residuos 12 6942.485 578.5404 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 345.285 a
T3 258.760 b
T2 249.190 b
T4 239.905 b



4 Contenido Relativo de Clorofilas (CRC-SPAD)

analizar(df_spad, "spad", "CRC — Unidades SPAD", "SPAD")
Estadística descriptiva — CRC — Unidades SPAD
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 42.818 0.737
Muestreo 1 T2 4 42.618 1.910
Muestreo 1 T3 4 41.605 1.534
Muestreo 1 T4 4 41.987 2.873
Muestreo 2 T1 4 43.358 1.484
Muestreo 2 T2 4 43.248 1.451
Muestreo 2 T3 4 43.908 2.981
Muestreo 2 T4 4 41.995 2.405
Muestreo 3 T1 4 44.877 2.733
Muestreo 3 T2 4 42.267 3.081
Muestreo 3 T3 4 43.275 3.969
Muestreo 3 T4 4 43.252 3.670
Muestreo 4 T1 4 43.573 3.744
Muestreo 4 T2 4 41.222 5.315
Muestreo 4 T3 4 41.352 3.489
Muestreo 4 T4 4 42.925 5.538

Muestreo 1 — F(3,12) = 0.339, p = 0.7973 → ns

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 3.7674 1.2558 0.3394 0.7973
Residuos 12 44.3999 3.7000 NA NA

Muestreo 2 — F(3,12) = 0.550, p = 0.6575 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 7.8330 2.6110 0.5503 0.6575
Residuos 12 56.9313 4.7443 NA NA

Muestreo 3 — F(3,12) = 0.404, p = 0.7526 → ns

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 14.0065 4.6688 0.4044 0.7526
Residuos 12 138.5473 11.5456 NA NA

Muestreo 4 — F(3,12) = 0.255, p = 0.8565 → ns

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 16.2583 5.4194 0.2547 0.8565
Residuos 12 255.3093 21.2758 NA NA



5 Contenido Relativo de Agua (CRA)

analizar(df_cra, "cra", "Contenido Relativo de Agua (CRA)", "%")
Estadística descriptiva — Contenido Relativo de Agua (CRA)
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 28.170 9.130
Muestreo 1 T2 4 53.688 8.518
Muestreo 1 T3 4 34.707 8.419
Muestreo 1 T4 4 53.087 8.869
Muestreo 2 T1 4 35.483 17.280
Muestreo 2 T2 4 29.938 4.048
Muestreo 2 T3 4 35.295 7.051
Muestreo 2 T4 4 35.557 3.553
Muestreo 3 T1 4 49.890 10.218
Muestreo 3 T2 4 59.668 3.695
Muestreo 3 T3 4 65.305 3.379
Muestreo 3 T4 4 60.102 4.229
Muestreo 4 T1 4 77.165 4.924
Muestreo 4 T2 4 65.305 6.130
Muestreo 4 T3 4 67.848 6.562
Muestreo 4 T4 4 74.825 2.674

Muestreo 1 — F(3,12) = 8.788, p = 0.0023 → Significativo ✓

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 2013.188 671.0628 8.7877 0.0023
Residuos 12 916.366 76.3638 NA NA
Tukey HSD — Muestreo 1
Tratamiento Media Grupo Tukey
T2 53.688 a
T4 53.087 a
T3 34.707 b
T1 28.170 b

Muestreo 2 — F(3,12) = 0.322, p = 0.8094 → ns

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 91.1439 30.3813 0.3221 0.8094
Residuos 12 1131.9667 94.3306 NA NA

Muestreo 3 — F(3,12) = 4.493, p = 0.0247 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 496.5535 165.5178 4.4931 0.0247
Residuos 12 442.0582 36.8382 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T3 65.305 a
T4 60.102 ab
T2 59.668 ab
T1 49.890 b

Muestreo 4 — F(3,12) = 4.508, p = 0.0244 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 378.7312 126.2437 4.5077 0.0244
Residuos 12 336.0776 28.0065 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 77.165 a
T4 74.825 ab
T3 67.848 ab
T2 65.305 b



6 Temperatura de Hoja

Estomas excluidos de todo el análisis por indicación del docente.

analizar(df_temp, "temp", "Temperatura de Hoja", "°C")
Estadística descriptiva — Temperatura de Hoja
Muestreo Tratamiento n Media DE
Muestreo 1 T1 4 12.045 1.779
Muestreo 1 T2 4 11.800 1.659
Muestreo 1 T3 4 12.610 0.959
Muestreo 1 T4 4 11.965 0.815
Muestreo 2 T1 4 19.290 1.023
Muestreo 2 T2 4 17.820 0.758
Muestreo 2 T3 4 17.430 1.586
Muestreo 2 T4 4 16.025 1.043
Muestreo 3 T1 4 13.150 0.351
Muestreo 3 T2 4 12.950 0.624
Muestreo 3 T3 4 13.175 0.096
Muestreo 3 T4 4 13.250 0.404
Muestreo 4 T1 4 18.190 2.579
Muestreo 4 T2 4 15.050 0.590
Muestreo 4 T3 4 15.020 1.763
Muestreo 4 T4 4 12.570 0.828

Muestreo 1 — F(3,12) = 0.264, p = 0.8501 → ns

ANOVA — Muestreo 1
Fuente GL SC CM F p-valor
Tratamiento 3 1.4850 0.4950 0.2639 0.8501
Residuos 12 22.5074 1.8756 NA NA

Muestreo 2 — F(3,12) = 5.519, p = 0.0129 → Significativo ✓

ANOVA — Muestreo 2
Fuente GL SC CM F p-valor
Tratamiento 3 21.6289 7.2096 5.5186 0.0129
Residuos 12 15.6771 1.3064 NA NA
Tukey HSD — Muestreo 2
Tratamiento Media Grupo Tukey
T1 19.290 a
T2 17.820 ab
T3 17.430 ab
T4 16.025 b

Muestreo 3 — F(3,12) = 0.383, p = 0.7673 → ns

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 0.1969 0.0656 0.3827 0.7673
Residuos 12 2.0575 0.1715 NA NA

Muestreo 4 — F(3,12) = 7.863, p = 0.0036 → Significativo ✓

ANOVA — Muestreo 4
Fuente GL SC CM F p-valor
Tratamiento 3 63.6467 21.2156 7.8633 0.0036
Residuos 12 32.3764 2.6980 NA NA
Tukey HSD — Muestreo 4
Tratamiento Media Grupo Tukey
T1 18.19 a
T2 15.05 ab
T3 15.02 ab
T4 12.57 b



7 Pérdida de Electrolitos (solo Muestreo 3)

Muestreos 1, 2 y 4 no tienen datos válidos para esta variable.

analizar(df_pe, "pe", "Pérdida de Electrolitos (PE 30 min)", "%")
Estadística descriptiva — Pérdida de Electrolitos (PE 30 min)
Muestreo Tratamiento n Media DE
Muestreo 3 T1 4 73.185 2.728
Muestreo 3 T2 4 79.415 2.350
Muestreo 3 T3 4 75.480 0.736
Muestreo 3 T4 4 79.350 2.812

Muestreo 3 — F(3,12) = 7.009, p = 0.0056 → Significativo ✓

ANOVA — Muestreo 3
Fuente GL SC CM F p-valor
Tratamiento 3 112.5525 37.5175 7.0094 0.0056
Residuos 12 64.2294 5.3524 NA NA
Tukey HSD — Muestreo 3
Tratamiento Media Grupo Tukey
T2 79.415 a
T4 79.350 a
T3 75.480 ab
T1 73.185 b



8 Tabla resumen de resultados ANOVA

Resumen ANOVA de una vía — todas las variables y muestreos
Variable Muestreo p-valor Significancia
N° Hojas Muestreo 1 0.5330 ns
N° Hojas Muestreo 2 0.8700 ns
N° Hojas Muestreo 3 0.0178
N° Hojas Muestreo 4 0.0000 ***
Long. Parte Aérea (cm) Muestreo 1 0.0113
Long. Parte Aérea (cm) Muestreo 2 0.6395 ns
Long. Parte Aérea (cm) Muestreo 3 0.3410 ns
Long. Parte Aérea (cm) Muestreo 4 0.0650 ns
Diámetro Raíz (mm) Muestreo 1 0.0049 **
Diámetro Raíz (mm) Muestreo 2 0.0187
Diámetro Raíz (mm) Muestreo 3 0.0376
Diámetro Raíz (mm) Muestreo 4 0.0018 **
Peso Fresco Hojas (g) Muestreo 1 0.0464
Peso Fresco Hojas (g) Muestreo 2 0.6313 ns
Peso Fresco Hojas (g) Muestreo 3 0.0060 **
Peso Fresco Hojas (g) Muestreo 4 0.0002 ***
Peso Seco Hojas (g) Muestreo 1 0.3503 ns
Peso Seco Hojas (g) Muestreo 2 0.6779 ns
Peso Seco Hojas (g) Muestreo 3 0.0708 ns
Peso Seco Hojas (g) Muestreo 4 0.0026 **
Peso Fresco Raíz (g) Muestreo 1 0.0042 **
Peso Fresco Raíz (g) Muestreo 2 0.0024 **
Peso Fresco Raíz (g) Muestreo 3 0.0039 **
Peso Fresco Raíz (g) Muestreo 4 0.0000 ***
Peso Seco Raíz (g) Muestreo 1 0.0020 **
Peso Seco Raíz (g) Muestreo 2 0.0560 ns
Peso Seco Raíz (g) Muestreo 3 0.0018 **
Peso Seco Raíz (g) Muestreo 4 0.0000 ***
Área Foliar (cm²) Muestreo 1 0.1887 ns
Área Foliar (cm²) Muestreo 2 0.6306 ns
Área Foliar (cm²) Muestreo 3 0.0129
Área Foliar (cm²) Muestreo 4 0.0002 ***
CRC-SPAD (SPAD) Muestreo 1 0.7973 ns
CRC-SPAD (SPAD) Muestreo 2 0.6575 ns
CRC-SPAD (SPAD) Muestreo 3 0.7526 ns
CRC-SPAD (SPAD) Muestreo 4 0.8565 ns
CRA (%) Muestreo 1 0.0023 **
CRA (%) Muestreo 2 0.8094 ns
CRA (%) Muestreo 3 0.0247
CRA (%) Muestreo 4 0.0244
Temperatura Hoja (°C) Muestreo 1 0.8501 ns
Temperatura Hoja (°C) Muestreo 2 0.0129
Temperatura Hoja (°C) Muestreo 3 0.7673 ns
Temperatura Hoja (°C) Muestreo 4 0.0036 **
PE 30 min (%) [solo M3] Muestreo 3 0.0056 **
Note:
ns = no significativo; * p<0.05; ** p<0.01; *** p<0.001

## R: R version 4.5.2 (2025-10-31 ucrt)
## Fecha: 2026-04-27 20:17
##  · tidyverse 2.0.0 
##  · agricolae 1.3.7 
##  · knitr 1.51 
##  · kableExtra 1.4.0