En los sistemas agrícolas es importante analizar la relación entre las condiciones de manejo del agua y el estado de los cultivos. Una herramienta estadística que permite estudiar estas relaciones es la probabilidad condicional.
En este trabajo se utiliza un conjunto de datos relacionado con sistemas de riego agrícola para analizar la relación entre el sistema de riego y el estado del cultivo.
El análisis se concentra en los lotes que presentan estrés hídrico y busca determinar qué proporción de ellos utiliza riego por aspersión.
Determinar la probabilidad de que un lote que presenta estrés hídrico utilice riego por aspersión y analizar la posible relación estadística entre el sistema de riego y el estado del cultivo.
Para realizar el análisis se utiliza el archivo:
riego_estres_hidrico_agricola.csv
Las variables seleccionadas son:
sistema_riegoestado_cultivoLa variable sistema_riego representa el sistema
utilizado para suministrar agua al cultivo.
La variable estado_cultivo representa el estado del
cultivo, incluyendo las categorías de estrés y estado normal.
Primero se carga la base de datos en R.
archivo <- "riego_estres_hidrico_agricola.csv"
if (!file.exists(archivo)) {
stop(
paste(
"No se encontró el archivo:",
archivo,
"\nVerifique que el CSV esté en la misma carpeta que el archivo RMarkdown."
)
)
}
riego <- read.csv(
archivo,
stringsAsFactors = FALSE,
check.names = FALSE
)
cat("Archivo cargado correctamente.\n")
## Archivo cargado correctamente.
cat("Número de filas:", nrow(riego), "\n")
## Número de filas: 180
cat("Número de columnas:", ncol(riego), "\n")
## Número de columnas: 10
names(riego)
## [1] "id_lote" "sector"
## [3] "sistema_riego" "textura_suelo"
## [5] "horas_riego_semana" "precipitacion_semana_mm"
## [7] "humedad_suelo_pct" "falla_bomba"
## [9] "estado_cultivo" "rendimiento_kg_ha"
table(
riego$sistema_riego,
useNA = "ifany"
)
##
## Aspersion Goteo Gravedad
## 56 76 48
table(
riego$estado_cultivo,
useNA = "ifany"
)
##
## Estres Normal
## 54 126
Para realizar el análisis se utilizan los registros que contienen información disponible en las dos variables seleccionadas.
datos <- riego[
!is.na(riego$sistema_riego) &
!is.na(riego$estado_cultivo),
]
cat(
"Número de registros utilizados:",
nrow(datos),
"\n"
)
## Número de registros utilizados: 180
La función table() permite organizar las frecuencias de
las dos variables categóricas.
tabla <- table(
datos$sistema_riego,
datos$estado_cultivo
)
tabla
##
## Estres Normal
## Aspersion 21 35
## Goteo 6 70
## Gravedad 27 21
knitr::kable(
tabla,
caption = "Tabla 1. Sistema de riego según el estado del cultivo"
)
| Estres | Normal | |
|---|---|---|
| Aspersion | 21 | 35 |
| Goteo | 6 | 70 |
| Gravedad | 27 | 21 |
La tabla permite observar la cantidad de lotes que presentan estrés y los que presentan un estado normal para cada sistema de riego.
La función margin.table() permite obtener los totales
correspondientes a cada sistema de riego.
total_riego <- margin.table(
tabla,
1
)
knitr::kable(
data.frame(
Sistema_Riego = names(total_riego),
Total = as.numeric(total_riego)
),
caption = "Tabla 2. Total de lotes por sistema de riego"
)
| Sistema_Riego | Total |
|---|---|
| Aspersion | 56 |
| Goteo | 76 |
| Gravedad | 48 |
total_estado <- margin.table(
tabla,
2
)
knitr::kable(
data.frame(
Estado_Cultivo = names(total_estado),
Total = as.numeric(total_estado)
),
caption = "Tabla 3. Total de lotes por estado del cultivo"
)
| Estado_Cultivo | Total |
|---|---|
| Estres | 54 |
| Normal | 126 |
La función addmargins() permite agregar los totales de
filas y columnas.
tabla_margenes <- addmargins(tabla)
knitr::kable(
tabla_margenes,
caption = "Tabla 4. Tabla de contingencia con totales"
)
| Estres | Normal | Sum | |
|---|---|---|---|
| Aspersion | 21 | 35 | 56 |
| Goteo | 6 | 70 | 76 |
| Gravedad | 27 | 21 | 48 |
| Sum | 54 | 126 | 180 |
La pregunta seleccionada es:
¿Cuál es la probabilidad de que un lote que presenta estrés hídrico utilice riego por aspersión?
Se definen los eventos:
\[ A = \text{Aspersión} \]
\[ E = \text{Estrés hídrico} \]
Por lo tanto:
\[ P(A|E) \]
La fórmula de probabilidad condicional es:
\[ P(A|E)=\frac{n(A\cap E)}{n(E)} \]
De acuerdo con el cálculo realizado a mano:
Por lo tanto:
\[ P(A|E)=\frac{21}{54} \]
Realizando la división:
\[ P(A|E)=0.3889 \]
Convertimos a porcentaje:
\[ 0.3889\times100=38.89\% \]
Por lo tanto:
\[ \boxed{P(A|E)=38.89\%} \]
El resultado indica que, de los lotes que presentan estrés hídrico, aproximadamente el 38.89 % utiliza riego por aspersión.
El cálculo se realiza primero de forma manual para comprender la lógica de la probabilidad condicional antes de comprobarlo mediante R.
El procedimiento fue realizado primero a mano en el cuaderno.
El cálculo realizado es:
\[ P(A|E)=\frac{21}{54} \]
\[ P(A|E)=0.3889 \]
\[ P(A|E)=38.89\% \]
A continuación se presenta la fotografía del procedimiento manual.
Para calcular la distribución de los sistemas de riego dentro de cada
estado del cultivo se utiliza prop.table() con
margin = 2.
probabilidades <- prop.table(
tabla,
margin = 2
)
knitr::kable(
probabilidades,
digits = 4,
caption = "Tabla 5. Probabilidades condicionales del sistema de riego según el estado del cultivo"
)
| Estres | Normal | |
|---|---|---|
| Aspersion | 0.3889 | 0.2778 |
| Goteo | 0.1111 | 0.5556 |
| Gravedad | 0.5000 | 0.1667 |
Se extrae el valor correspondiente a:
\[ P(\text{Aspersión}|\text{Estrés}) \]
p_aspersión_estres <- prop.table(
tabla,
margin = 2
)["Aspersion", "Estres"]
p_aspersión_estres
## [1] 0.3888889
porcentaje_aspersión <- p_aspersión_estres * 100
porcentaje_aspersión
## [1] 38.88889
El resultado correspondiente es aproximadamente:
\[ \boxed{38.89\%} \]
comparacion <- data.frame(
Metodo = c(
"Cálculo manual",
"R"
),
Probabilidad = c(
21 / 54,
p_aspersión_estres
),
Porcentaje = c(
(21 / 54) * 100,
porcentaje_aspersión
)
)
knitr::kable(
comparacion,
digits = 4,
caption = "Tabla 6. Comparación entre el cálculo manual y R"
)
| Metodo | Probabilidad | Porcentaje |
|---|---|---|
| Cálculo manual | 0.3889 | 38.8889 |
| R | 0.3889 | 38.8889 |
La función prop.table() sin especificar un margen
permite obtener las probabilidades conjuntas.
probabilidades_conjuntas <- prop.table(tabla)
knitr::kable(
probabilidades_conjuntas,
digits = 4,
caption = "Tabla 7. Probabilidades conjuntas"
)
| Estres | Normal | |
|---|---|---|
| Aspersion | 0.1167 | 0.1944 |
| Goteo | 0.0333 | 0.3889 |
| Gravedad | 0.1500 | 0.1167 |
Para analizar si existe independencia entre el sistema de riego y el estado del cultivo se plantean las siguientes hipótesis:
H₀: El sistema de riego y el estado del cultivo son independientes.
H₁: El sistema de riego y el estado del cultivo no son independientes.
Se utiliza un nivel de significancia de:
\[ \alpha=0.05 \]
chisq.test()prueba_chi <- chisq.test(
tabla,
correct = FALSE
)
prueba_chi
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 34.934, df = 2, p-value = 2.595e-08
resultado_chi <- data.frame(
Chi_cuadrado = as.numeric(
prueba_chi$statistic
),
Grados_libertad = as.numeric(
prueba_chi$parameter
),
Valor_p = as.numeric(
prueba_chi$p.value
)
)
knitr::kable(
resultado_chi,
digits = 6,
caption = "Tabla 8. Resultado de la prueba Chi-cuadrado"
)
| Chi_cuadrado | Grados_libertad | Valor_p |
|---|---|---|
| 34.93421 | 2 | 0 |
frecuencias_esperadas <- prueba_chi$expected
knitr::kable(
round(frecuencias_esperadas, 4),
caption = "Tabla 9. Frecuencias esperadas bajo la hipótesis de independencia"
)
| Estres | Normal | |
|---|---|---|
| Aspersion | 16.8 | 39.2 |
| Goteo | 22.8 | 53.2 |
| Gravedad | 14.4 | 33.6 |
Se utiliza un nivel de significancia de:
\[ \alpha=0.05 \]
La regla de decisión es:
alpha <- 0.05
if (prueba_chi$p.value < alpha) {
decision <- "Se rechaza H0"
} else {
decision <- "No se rechaza H0"
}
decision
## [1] "Se rechaza H0"
if (prueba_chi$p.value < 0.05) {
cat(
"El valor p es menor que 0.05. ",
"Por lo tanto, se rechaza la hipótesis nula de independencia. ",
"Los datos proporcionan evidencia estadística de una asociación ",
"entre el sistema de riego y el estado del cultivo."
)
} else {
cat(
"El valor p es igual o mayor que 0.05. ",
"Por lo tanto, no se rechaza la hipótesis nula de independencia. ",
"Los datos no proporcionan evidencia estadística suficiente ",
"para afirmar una asociación entre el sistema de riego ",
"y el estado del cultivo."
)
}
## El valor p es menor que 0.05. Por lo tanto, se rechaza la hipótesis nula de independencia. Los datos proporcionan evidencia estadística de una asociación entre el sistema de riego y el estado del cultivo.
Para complementar el análisis se calcula la proporción de estrés y estado normal dentro de cada sistema de riego.
distribucion <- prop.table(
tabla,
margin = 1
)
knitr::kable(
distribucion,
digits = 4,
caption = "Tabla 10. Distribución del estado del cultivo dentro de cada sistema de riego"
)
| Estres | Normal | |
|---|---|---|
| Aspersion | 0.3750 | 0.6250 |
| Goteo | 0.0789 | 0.9211 |
| Gravedad | 0.5625 | 0.4375 |
El análisis permite observar cómo se distribuyen los estados del cultivo según el sistema de riego utilizado.
La probabilidad condicional calculada responde específicamente a la pregunta planteada:
\[ P(\text{Aspersión}|\text{Estrés})=38.89\% \]
Esto significa que, dentro del grupo de lotes que presentan estrés hídrico, aproximadamente el 38.89 % utiliza riego por aspersión.
Esta información puede ser utilizada como parte de un análisis del manejo del agua y de las condiciones relacionadas con el estrés hídrico.
Sin embargo, una asociación estadística no demuestra por sí sola una relación causal. Para estudiar las posibles causas del estrés hídrico sería necesario analizar otras variables de la base de datos.
Se analizaron las variables categóricas sistema de riego y estado del cultivo.
Se construyó una tabla de contingencia mediante
table().
Los totales marginales se obtuvieron mediante
margin.table().
Los totales generales fueron incorporados mediante
addmargins().
La probabilidad condicional analizada fue:
\[ P(\text{Aspersión}|\text{Estrés}) \]
\[ P(\text{Aspersión}|\text{Estrés}) = \frac{21}{54} = 0.3889 \]
\[ \boxed{38.89\%} \]
El resultado manual fue comprobado mediante
prop.table().
La prueba chisq.test() permitió evaluar la
independencia entre las variables seleccionadas.
El análisis proporciona información para estudiar la relación entre los sistemas de riego y el estado de los cultivos.
Se utilizó ChatGPT como herramienta de apoyo para organizar el documento RMarkdown, revisar la estructura del análisis estadístico y apoyar la utilización de las funciones de R.
“Ayúdame a realizar un análisis en RMarkdown utilizando una base de datos agrícola relacionada con sistemas de riego y estado del cultivo. Necesito seleccionar dos variables categóricas, construir una tabla de contingencia, realizar manualmente una probabilidad condicional y comprobarla en R utilizando table(), margin.table(), prop.table(), addmargins() y chisq.test(). La pregunta de análisis es: ¿Cuál es la probabilidad de que un lote que presenta estrés hídrico utilice riego por aspersión?”
El cálculo de la probabilidad condicional fue realizado manualmente antes de utilizar R. Posteriormente se comprobó el resultado mediante el código estadístico.
Illowsky, B., & Dean, S. (2023). Introductory Statistics 2e. OpenStax.
National Institute of Standards and Technology. Engineering Statistics Handbook. U.S. Department of Commerce.
R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing.