La estadística descriptiva en R aplicada a la ingeniería agrícola es el conjunto de métodos usados para resumir, organizar, visualizar e interpretar datos agrícolas mediante el software R. Su objetivo no es predecir ni probar hipótesis todavía, sino describir el comportamiento de los datos de campo, riego, suelos, clima, maquinaria o producción.
En ingeniería agrícola se usa para responder preguntas como:
La estadística descriptiva generalmente se divide en varias partes:
En R, los datos agrícolas suelen organizarse en una
tabla o data.frame, donde cada fila es una
observación y cada columna es una variable.
Ejemplo:
| parcela | cultivo | rendimiento_ton_ha | humedad_suelo | pH |
|---|---|---|---|---|
| 1 | maíz | 9.8 | 21.5 | 6.2 |
| 2 | maíz | 8.9 | 19.8 | 5.9 |
| 3 | maíz | 10.3 | 23.4 | 6.5 |
En R:
datos <- data.frame(
parcela = 1:3,
cultivo = c("maíz", "maíz", "maíz"),
rendimiento_ton_ha = c(9.8, 8.9, 10.3),
humedad_suelo = c(21.5, 19.8, 23.4),
pH = c(6.2, 5.9, 6.5)
)
Describen el valor típico o central de los datos.
Las principales son:
En agricultura sirven para estimar valores representativos, como rendimiento promedio, pH medio, humedad media o caudal medio.
Indican qué tan separados están los datos entre sí.
Las principales son:
En ingeniería agrícola son muy importantes porque los sistemas naturales son variables. Por ejemplo, no basta con saber que un lote rinde 8 t/ha en promedio; también importa si todas las parcelas rinden parecido o si hay zonas de alto y bajo rendimiento.
Indican el valor por debajo del cual se encuentra un porcentaje de los datos.
Las principales son:
Se usan mucho para analizar humedad del suelo, precipitación, niveles de nutrientes, temperaturas extremas o caudales de diseño.
Describen la forma de la distribución de los datos.
Las principales son:
Sirven para saber si los datos son simétricos, si están sesgados hacia valores bajos o altos, o si hay eventos extremos, como lluvias muy intensas.
En R, la estadística descriptiva se complementa con gráficos.
Los más usados en ingeniería agrícola son:
Paquetes importantes:
library(ggplot2)
library(dplyr)
A continuación se presentan las ecuaciones más importantes, su interpretación agrícola y su función equivalente en R.
\[ \mu = \frac{1}{N} \sum_{i=1}^{N} x_i \]
Donde:
Representa el valor promedio de toda una población de datos. Por ejemplo, el rendimiento promedio de todas las parcelas de una región.
Si se tiene toda la población:
mu <- mean(x)
\[ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i \]
Donde:
Es el promedio calculado a partir de una muestra de campo. Por ejemplo, si se midió rendimiento en 30 puntos de un lote de 100 hectáreas, la media muestral estima el rendimiento promedio del lote.
media <- mean(rendimiento)
\[ \bar{x}_w = \frac{\sum_{i=1}^{n} w_i x_i}{\sum_{i=1}^{n} w_i} \]
Donde:
Se usa cuando las observaciones no tienen la misma importancia. Por ejemplo:
media_ponderada <- weighted.mean(x, w)
Ejemplo:
rendimiento <- c(8, 10, 12)
area <- c(2, 5, 3)
rendimiento_promedio_ponderado <- weighted.mean(rendimiento, area)
rendimiento_promedio_ponderado
La mediana es el valor central de los datos ordenados.
Si \(n\) es impar:
\[ Me = x_{\left(\frac{n+1}{2}\right)} \]
Si \(n\) es par:
\[ Me = \frac{x_{\left(\frac{n}{2}\right)} + x_{\left(\frac{n}{2}+1\right)}}{2} \]
La mediana es útil cuando hay valores extremos o atípicos. Por ejemplo, si una parcela tiene rendimiento muy alto por un error de sensor o una condición especial, la mediana puede representar mejor el comportamiento típico del lote.
mediana <- median(rendimiento)
La moda es el valor que más se repite.
\[ Mo = \text{valor con mayor frecuencia} \]
Es más útil en variables categóricas o discretas, por ejemplo:
Para variables categóricas:
tabla <- table(tipo_suelo)
moda <- names(tabla)[which.max(tabla)]
\[ R = x_{máx} - x_{mín} \]
Donde:
Indica la amplitud total de los datos. Por ejemplo:
rango <- max(x) - min(x)
O también:
range(x)
diff(range(x))
\[ \sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2 \]
Donde:
Mide qué tan dispersos están los datos respecto al promedio. En suelos, por ejemplo, una varianza alta en conductividad eléctrica puede indicar fuerte variabilidad espacial de sales.
\[ s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2 \]
Donde:
Se usa cuando los datos provienen de una muestra, como ocurre casi siempre en trabajos de campo. Permite cuantificar la variabilidad de una variable agrícola.
varianza <- var(rendimiento)
\[ \sigma = \sqrt{\sigma^2} \]
Expresa la dispersión en las mismas unidades de los datos. Por ejemplo, si el rendimiento se mide en toneladas por hectárea, la desviación estándar también se expresa en toneladas por hectárea.
\[ s = \sqrt{s^2} \]
Indica cuánto se alejan, en promedio, los datos respecto a la media. Por ejemplo, si el rendimiento promedio es 9 t/ha y la desviación estándar es 1.5 t/ha, hay una variabilidad moderada en el lote.
desviacion <- sd(rendimiento)
\[ CV = \frac{s}{\bar{x}} \times 100 \]
Donde:
Es una medida relativa de variabilidad. Permite comparar variables con distintas unidades o escalas.
Ejemplos:
cv <- sd(rendimiento) / mean(rendimiento) * 100
Los cuartiles dividen los datos ordenados en cuatro partes iguales.
\[ Q_1 = \text{percentil 25} \]
\[ Q_2 = \text{percentil 50} = \text{mediana} \]
\[ Q_3 = \text{percentil 75} \]
Por ejemplo, en humedad del suelo:
quantile(humedad, probs = c(0.25, 0.50, 0.75))
O con dplyr:
library(dplyr)
resumen <- datos %>%
summarise(
Q1 = quantile(humedad_suelo, 0.25),
Q2 = quantile(humedad_suelo, 0.50),
Q3 = quantile(humedad_suelo, 0.75)
)
\[ P_k = \text{valor por debajo del cual se encuentra el } k\% \text{ de los datos} \]
Se usan para diseño hidráulico, climatología y manejo de riego.
Ejemplos:
quantile(precipitacion, probs = c(0.90, 0.95, 0.99))
\[ IQR = Q_3 - Q_1 \]
Donde:
Mide la dispersión del 50% central de los datos. Es más robusto que el rango porque no depende de valores extremos.
Se usa para detectar valores atípicos en sensores, estaciones meteorológicas, análisis de suelo o mapas de rendimiento.
IQR(humedad_suelo)
\[ SE_{\bar{x}} = \frac{s}{\sqrt{n}} \]
Donde:
Indica qué tan precisa es la estimación de la media muestral. Por ejemplo, si se quiere estimar el rendimiento promedio de un lote, un error estándar pequeño indica mayor confianza en ese promedio.
se <- sd(rendimiento) / sqrt(length(rendimiento))
Una forma común de calcularla es:
\[ g_1 = \frac{\frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^3}{s^3} \]
Donde:
Por ejemplo, si la precipitación tiene asimetría positiva, significa que hay pocos días con lluvias muy altas y muchos días con lluvias bajas o moderadas.
Esto es importante para:
# install.packages("moments")
library(moments)
asimetria <- skewness(precipitacion)
Una forma común es:
\[ g_2 = \frac{\frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^4}{s^4} - 3 \]
Donde:
Si la temperatura máxima tiene curtosis alta, puede haber días con picos de calor extremos, importantes para estrés térmico en cultivos.
library(moments)
curtosis <- kurtosis(temperatura_maxima)
\[ s_{xy} = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y}) \]
Donde:
Indica si dos variables tienden a moverse juntas.
Ejemplo:
cov(humedad_suelo, rendimiento)
\[ r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})} {\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2}} \]
También puede expresarse como:
\[ r = \frac{s_{xy}}{s_x s_y} \]
Donde:
Permite explorar relaciones entre variables:
Importante: correlación no implica causalidad.
cor(humedad_suelo, rendimiento)
| Medida | Ecuación | Significado agrícola | Función en R |
|---|---|---|---|
| Media muestral | \(\bar{x} = \frac{1}{n}\sum x_i\) | Valor promedio de una variable | mean() |
| Media ponderada | \(\bar{x}_w = \frac{\sum w_i x_i}{\sum w_i}\) | Promedio considerando pesos, como área | weighted.mean() |
| Mediana | Valor central ordenado | Valor representativo robusto | median() |
| Rango | \(R = x_{máx} - x_{mín}\) | Amplitud total de los datos | max() - min() |
| Varianza muestral | \(s^2 = \frac{\sum (x_i-\bar{x})^2}{n-1}\) | Variabilidad promedio al cuadrado | var() |
| Desviación estándar | \(s = \sqrt{s^2}\) | Dispersión en unidades originales | sd() |
| Coeficiente de variación | \(CV = \frac{s}{\bar{x}} \times 100\) | Variabilidad relativa | sd(x)/mean(x)*100 |
| Cuartiles | \(Q_1, Q_2, Q_3\) | Dividen los datos en cuatro partes | quantile() |
| Rango intercuartílico | \(IQR = Q_3 - Q_1\) | Dispersión del 50% central | IQR() |
| Error estándar | \(SE = s/\sqrt{n}\) | Precisión de la media | sd(x)/sqrt(length(x)) |
| Asimetría | \(g_1\) | Indica sesgo de la distribución | moments::skewness() |
| Curtosis | \(g_2\) | Indica presencia de eventos extremos | moments::kurtosis() |
| Covarianza | \(s_{xy}\) | Dirección de relación entre variables | cov() |
| Correlación | \(r\) | Fuerza y dirección lineal | cor() |
Supongamos que se tienen datos de rendimiento, humedad del suelo y pH en varias parcelas.
# Cargar librerías
library(dplyr)
library(ggplot2)
# Datos de ejemplo
set.seed(123)
datos_agricolas <- data.frame(
parcela = 1:60,
rendimiento = rnorm(60, mean = 8.5, sd = 1.4),
humedad_suelo = rnorm(60, mean = 23, sd = 5),
pH = rnorm(60, mean = 6.2, sd = 0.5)
)
# Ver primeras filas
head(datos_agricolas)
summary(datos_agricolas)
Esto entrega:
resumen <- datos_agricolas %>%
summarise(
rendimiento_media = mean(rendimiento),
rendimiento_mediana = median(rendimiento),
rendimiento_sd = sd(rendimiento),
rendimiento_varianza = var(rendimiento),
rendimiento_cv = sd(rendimiento) / mean(rendimiento) * 100,
humedad_media = mean(humedad_suelo),
humedad_sd = sd(humedad_suelo),
humedad_Q1 = quantile(humedad_suelo, 0.25),
humedad_Q3 = quantile(humedad_suelo, 0.75),
humedad_IQR = IQR(humedad_suelo),
pH_media = mean(pH),
pH_sd = sd(pH)
)
resumen
ggplot(datos_agricolas, aes(x = rendimiento)) +
geom_histogram(binwidth = 0.5, fill = "darkgreen", color = "black") +
geom_vline(aes(xintercept = mean(rendimiento)),
color = "red", linetype = "dashed", linewidth = 1) +
labs(
title = "Distribución del rendimiento",
x = "Rendimiento (t/ha)",
y = "Frecuencia"
) +
theme_minimal()
La línea roja representa la media. El histograma permite observar si los rendimientos se concentran alrededor del promedio o si hay mucha variabilidad.
ggplot(datos_agricolas, aes(y = humedad_suelo)) +
geom_boxplot(fill = "steelblue") +
labs(
title = "Distribución de humedad del suelo",
y = "Humedad del suelo (%)"
) +
theme_minimal()
El boxplot muestra:
ggplot(datos_agricolas, aes(x = humedad_suelo, y = rendimiento)) +
geom_point(color = "darkgreen") +
geom_smooth(method = "lm", color = "blue", se = TRUE) +
labs(
title = "Humedad del suelo vs rendimiento",
x = "Humedad del suelo (%)",
y = "Rendimiento (t/ha)"
) +
theme_minimal()
Y la correlación:
cor(datos_agricolas$humedad_suelo, datos_agricolas$rendimiento)
Cuando se aplica estadística descriptiva en R, el ingeniero agrícola no solo debe obtener números, sino interpretarlos.
Por ejemplo:
Significa que hay zonas de muy buen rendimiento y zonas de bajo rendimiento. Esto puede indicar:
Indica que los datos son relativamente homogéneos.
Por ejemplo:
Indica alta variabilidad. Puede ser útil para:
Pueden deberse a:
En ingeniería agrícola, antes de eliminar un dato atípico, debe verificarse si es un error o una condición real del sistema.
Supongamos que se mide la lámina aplicada por un sistema de riego en varios puntos.
lamina_riego <- c(18.2, 19.1, 20.5, 17.8, 18.9, 19.4, 21.0, 18.5)
media_lamina <- mean(lamina_riego)
sd_lamina <- sd(lamina_riego)
cv_lamina <- sd_lamina / media_lamina * 100
media_lamina
sd_lamina
cv_lamina
Si la media es 19.2 mm y el CV es bajo, el sistema puede tener buena uniformidad. Si el CV es alto, puede haber problemas en emisores, presión, diseño o mantenimiento.
Para precipitación histórica:
precipitacion <- c(0, 2, 5, 0, 12, 30, 45, 3, 1, 0, 8, 20)
media <- mean(precipitacion)
mediana <- median(precipitacion)
desviacion <- sd(precipitacion)
rango <- max(precipitacion) - min(precipitacion)
media
mediana
desviacion
rango
Si la media es mucho mayor que la mediana, puede haber pocos días con lluvias muy altas. Eso genera asimetría positiva.
En R:
library(moments)
skewness(precipitacion)
| Función | Utilidad |
|---|---|
mean() |
Media |
median() |
Mediana |
var() |
Varianza |
sd() |
Desviación estándar |
quantile() |
Cuartiles o percentiles |
IQR() |
Rango intercuartílico |
summary() |
Resumen general |
range() |
Mínimo y máximo |
cor() |
Correlación |
cov() |
Covarianza |
table() |
Frecuencias |
hist() |
Histograma básico |
boxplot() |
Diagrama de caja básico |
ggplot() |
Gráficos avanzados |
| Paquete | Uso |
|---|---|
dplyr |
Manipulación de datos |
ggplot2 |
Gráficos |
tidyr |
Ordenar datos |
skimr |
Resúmenes descriptivos rápidos |
moments |
Asimetría y curtosis |
psych |
Estadísticos descriptivos amplios |
lubridate |
Manejo de fechas y horas |
sf |
Datos espaciales |
raster o terra |
Datos ráster, por ejemplo imágenes satelitales |
Ejemplo con skimr:
# install.packages("skimr")
library(skimr)
skim(datos_agricolas)
La estadística descriptiva en R aplicada a la ingeniería agrícola permite transformar datos de campo en información técnica útil. Sus partes principales son:
Las ecuaciones más importantes son:
\[ \bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i \]
\[ s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2 \]
\[ s = \sqrt{s^2} \]
\[ CV = \frac{s}{\bar{x}} \times 100 \]
\[ IQR = Q_3 - Q_1 \]
\[ r = \frac{s_{xy}}{s_x s_y} \]
Estas ecuaciones ayudan al ingeniero agrícola a comprender el comportamiento de variables como rendimiento, humedad, pH, salinidad, precipitación, temperatura, caudal, uniformidad de riego y eficiencia de maquinaria.