Análisis bivariado y estandarización min-max en tomate de árbol

Peso del fruto vs. diámetro ecuatorial · Solanum betaceum Cav.

1. Cultivo y variables seleccionadas

El cultivo escogido es el tomate de árbol (Solanum betaceum Cav., sin. Cyphomandra betacea), una solanácea de gran importancia económica en la zona andina de Colombia. Se seleccionaron dos variables cuantitativas de caracterización de fruto:

  • Peso del fruto (g) : variable de tamaño y rendimiento comercial.
  • Diámetro ecuatorial del fruto (mm): variable morfométrica asociada al tamaño y a la clasificación por calibre, medida con calibrador en el punto más ancho del fruto.

Ambas son variables cuantitativas continuas, medidas por fruto individual, y biológicamente relacionadas: a mayor volumen del fruto corresponde mayor peso y mayor diámetro, por lo que se espera una correlación positiva y fuerte entre ellas.

Referencia bibliográfica que sustenta la elección

Lagos, L. K., Vallejo Cabrera, F. A., Lagos Burbano, T. C., & Duarte Alvarado, D. E. (2013). Correlaciones genotípicas, fenotípicas y ambientales, y análisis de sendero en tomate de árbol (Cyphomandra betacea Cav. Sendt.). Acta Agronómica, 62(3), 215–222. Universidad Nacional de Colombia, Sede Palmira. https://revistas.unal.edu.co/index.php/acta_agronomica/article/view/33855

Este estudio, publicado en Acta Agronómica (revista de la Facultad de Ciencias Agropecuarias de la Universidad Nacional de Colombia), evaluó nueve variables de tamaño y calidad del fruto en 81 híbridos de tomate de árbol en Nariño, y reportó correlaciones fenotípicas altas y positivas entre variables de tamaño del fruto (p. ej., peso del fruto con peso de pulpa + semilla, r = 0.71). Con base en ese antecedente, aquí se simula una correlación de r = 0.80 entre peso y diámetro del fruto, un valor consistente con el orden de magnitud reportado en la literatura para este cultivo.

2. Generación del conjunto de datos simulado

Se genera un conjunto de datos de n = 90 frutos, con correlación de Pearson exacta de 0.80, mediante ortogonalización de Gram-Schmidt sobre variables estandarizadas y posterior transformación lineal a las unidades reales (una transformación lineal no altera el coeficiente de correlación de Pearson).

set.seed(2026)
n <- 90                 # numero de frutos muestreados
r_objetivo <- 0.80       # correlacion de Pearson objetivo

# --- 1) dos variables estandar con correlacion EXACTA r = 0.80 ---
z1 <- rnorm(n)
z2 <- rnorm(n)

z1 <- (z1 - mean(z1)) / sqrt(mean((z1 - mean(z1))^2))                 # estandarizar z1

z2_orth <- z2 - (sum(z1 * z2) / sum(z1 * z1)) * z1                    # ortogonalizar z2 vs z1
z2_orth <- (z2_orth - mean(z2_orth)) / sqrt(mean((z2_orth - mean(z2_orth))^2))

z_pf   <- z1
z_diam <- r_objetivo * z1 + sqrt(1 - r_objetivo^2) * z2_orth          # combinar -> r exacto

# --- 2) transformacion lineal a unidades reales ---
# rangos basados en literatura agronomica del cultivo (Lagos et al. 2013):
# peso del fruto ~ 55-125 g ; diametro ecuatorial ~ 36-60 mm
media_pf   <- 88.0; sd_pf   <- 14.0   # peso del fruto (g)
media_diam <- 47.5; sd_diam <- 5.5    # diametro ecuatorial (mm)

peso_fruto <- media_pf   + sd_pf   * z_pf
diametro   <- media_diam + sd_diam * z_diam

datos <- data.frame(
  fruto_id               = 1:n,
  peso_fruto_g           = round(peso_fruto, 2),
  diametro_ecuatorial_mm = round(diametro, 2)
)

head(datos, 12)
##    fruto_id peso_fruto_g diametro_ecuatorial_mm
## 1         1        96.29                  43.45
## 2         2        73.52                  47.68
## 3         3        90.86                  46.71
## 4         4        87.68                  50.60
## 5         5        79.40                  38.43
## 6         6        53.09                  35.20
## 7         7        78.42                  41.04
## 8         8        74.37                  41.31
## 9         9        90.50                  44.55
## 10       10        82.14                  46.74
## 11       11        83.08                  49.91
## 12       12        78.49                  42.64
summary(datos[, c("peso_fruto_g", "diametro_ecuatorial_mm")])
##   peso_fruto_g    diametro_ecuatorial_mm
##  Min.   : 52.65   Min.   :35.20         
##  1st Qu.: 77.22   1st Qu.:43.20         
##  Median : 87.28   Median :47.27         
##  Mean   : 88.00   Mean   :47.50         
##  3rd Qu.: 97.27   3rd Qu.:50.93         
##  Max.   :123.23   Max.   :60.19

3. Correlación de Pearson — datos originales

r_original <- cor(datos$peso_fruto_g, datos$diametro_ecuatorial_mm,
                   method = "pearson")
r_original
## [1] 0.799979

La correlación de Pearson entre el peso del fruto y el diámetro ecuatorial en los datos originales es r = 0.8.

4. Dispersión bivariada — datos originales

plot(datos$peso_fruto_g, datos$diametro_ecuatorial_mm, pch = 21,
     bg = adjustcolor(COL_PF, alpha.f = 0.75), col = "white", cex = 1.4,
     xlab = "Peso del fruto (g)", ylab = "Diametro ecuatorial (mm)",
     main = "Dispersion bivariada - datos originales\nTomate de arbol, n=90",
     panel.first = grid(col = "#e1e0d9", lty = 1))
abline(lm(diametro_ecuatorial_mm ~ peso_fruto_g, data = datos),
       col = INK, lwd = 1.6, lty = 2)
legend("topleft", legend = sprintf("r = %.3f", r_original), bty = "o",
       bg = "white", box.col = "#e1e0d9", text.font = 2, cex = 1.1)

La nube de puntos muestra una asociación lineal positiva y clara entre el peso del fruto y su diámetro ecuatorial, coherente con la relación alométrica esperada entre masa y tamaño en frutos carnosos.

5. Estandarización min-max [0, 1]

Cada variable se estandariza con la fórmula min-max:

\[x'_i = \frac{x_i - x_{min}}{x_{max} - x_{min}}\]

min_max <- function(v) (v - min(v)) / (max(v) - min(v))

datos$peso_fruto_norm <- min_max(datos$peso_fruto_g)
datos$diametro_norm   <- min_max(datos$diametro_ecuatorial_mm)

head(datos, 6)
##   fruto_id peso_fruto_g diametro_ecuatorial_mm peso_fruto_norm diametro_norm
## 1        1        96.29                  43.45     0.618305469     0.3301321
## 2        2        73.52                  47.68     0.295692831     0.4993998
## 3        3        90.86                  46.71     0.541371493     0.4605842
## 4        4        87.68                  50.60     0.496316237     0.6162465
## 5        5        79.40                  38.43     0.379002550     0.1292517
## 6        6        53.09                  35.20     0.006234061     0.0000000

6. Comparación de correlaciones: original vs. normalizado

r_normalizado <- cor(datos$peso_fruto_norm, datos$diametro_norm,
                      method = "pearson")

comparacion <- data.frame(
  conjunto_de_datos = c("Original (g, mm)", "Normalizado min-max [0,1]"),
  r_pearson = round(c(r_original, r_normalizado), 4)
)
comparacion
##           conjunto_de_datos r_pearson
## 1          Original (g, mm)       0.8
## 2 Normalizado min-max [0,1]       0.8
diferencia <- abs(r_original - r_normalizado)
diferencia
## [1] 1.110223e-16

Hallazgo clave: la correlación de Pearson no cambia al aplicar la estandarización min-max (diferencia = 0.0000000000000001110223). Min-max es una transformación lineal (\(x' = a\cdot x + b\), con \(a = 1/(x_{max}-x_{min}) > 0\)), y el coeficiente de correlación de Pearson es invariante ante transformaciones lineales positivas de las variables. La estandarización cambia la escala y la unidad de medida, pero no la fuerza ni el signo de la relación lineal entre las variables.

par(mfrow = c(1, 2), mar = c(4.2, 4.5, 3.2, 1.2), oma = c(0, 0, 2.5, 0))

plot(datos$peso_fruto_g, datos$diametro_ecuatorial_mm, pch = 21,
     bg = adjustcolor(COL_PF, alpha.f = 0.75), col = "white", cex = 1.3,
     xlab = "Peso del fruto (g)", ylab = "Diametro ecuatorial (mm)",
     main = "Original", panel.first = grid(col = "#e1e0d9", lty = 1))
abline(lm(diametro_ecuatorial_mm ~ peso_fruto_g, data = datos),
       col = INK, lwd = 1.5, lty = 2)
legend("topleft", legend = sprintf("r = %.3f", r_original), bty = "o",
       bg = "white", box.col = "#e1e0d9", text.font = 2)

plot(datos$peso_fruto_norm, datos$diametro_norm, pch = 21,
     bg = adjustcolor(COL_DIAM, alpha.f = 0.75), col = "white", cex = 1.3,
     xlab = "Peso del fruto (norm. 0-1)", ylab = "Diametro ecuatorial (norm. 0-1)",
     main = "Normalizado (min-max)", panel.first = grid(col = "#e1e0d9", lty = 1))
abline(lm(diametro_norm ~ peso_fruto_norm, data = datos),
       col = INK, lwd = 1.5, lty = 2)
legend("topleft", legend = sprintf("r = %.3f", r_normalizado), bty = "o",
       bg = "white", box.col = "#e1e0d9", text.font = 2)

mtext("Comparacion: dispersion antes y despues de la estandarizacion min-max",
      outer = TRUE, cex = 1.1, font = 2, col = INK)

Como se observa, la forma de la nube de puntos es idéntica en ambos gráficos; lo único que cambia son las escalas de los ejes (de gramos/ milímetros a valores entre 0 y 1).

7. Histogramas de frecuencia (originales y normalizados)

par(mfrow = c(2, 2), mar = c(4.2, 4.5, 3, 1.2), oma = c(0, 0, 2.5, 0))

hist_panel <- function(data, xlab, color, main) {
  hist(data, breaks = 12, col = color, border = "white",
       xlab = xlab, ylab = "Frecuencia (n de frutos)", main = main)
  abline(v = mean(data), col = INK, lwd = 1.6, lty = 2)
}

hist_panel(datos$peso_fruto_g, "Peso del fruto (g)", COL_PF,
           "Peso del fruto - original")
hist_panel(datos$diametro_ecuatorial_mm, "Diametro ecuatorial (mm)", COL_DIAM,
           "Diametro ecuatorial - original")
hist_panel(datos$peso_fruto_norm, "Peso del fruto (normalizado 0-1)", COL_PF,
           "Peso del fruto - normalizado (min-max)")
hist_panel(datos$diametro_norm, "Diametro ecuatorial (normalizado 0-1)", COL_DIAM,
           "Diametro ecuatorial - normalizado (min-max)")

mtext("Histogramas de frecuencia - Tomate de arbol (n=90)",
      outer = TRUE, cex = 1.1, font = 2, col = INK)

Al igual que con la correlación, la forma de la distribución (asimetría, modas, dispersión relativa) es la misma antes y después de normalizar La estandarización min-max solo re-escala el eje horizontal a [0, 1], sin alterar la frecuencia relativa de los datos.

8. Guardar el dataset

write.csv(datos, "dataset_tomate_arbol.csv", row.names = FALSE)

9. Conclusiones

  • Se simuló un conjunto de datos de 90 frutos de tomate de árbol con una correlación de Pearson exacta de 0.80 entre el peso del fruto y su diámetro ecuatorial, en rangos realistas para la especie y respaldados por literatura de Acta Agronómica (Universidad Nacional de Colombia).
  • El diagrama de dispersión confirma visualmente una relación lineal positiva fuerte entre ambas variables.
  • La estandarización min-max [0,1] no modifica el coeficiente de correlación de Pearson (r = 0.800 en ambos casos): esta técnica solo homogeniza la escala de las variables (útil, por ejemplo, para algoritmos sensibles a la magnitud de los datos, como k-means o redes neuronales), pero preserva íntegramente la estructura de asociación lineal entre ellas.
  • Los histogramas, tanto crudos como normalizados, conservan exactamente la misma forma distribucional, lo que confirma que min-max es una transformación de escala y no de forma.

10. Referencia

Lagos, L. K., Vallejo Cabrera, F. A., Lagos Burbano, T. C., & Duarte Alvarado, D. E. (2013). Correlaciones genotípicas, fenotípicas y ambientales, y análisis de sendero en tomate de árbol (Cyphomandra betacea Cav. Sendt.). Acta Agronómica, 62(3), 215–222. Universidad Nacional de Colombia. https://revistas.unal.edu.co/index.php/acta_agronomica/article/view/33855