1 Introducción

En los sistemas agrícolas, las condiciones de riego pueden estar relacionadas con el estado hídrico y el comportamiento del cultivo. Por esta razón, las tablas de contingencia y las probabilidades condicionales permiten analizar si existe una relación entre diferentes categorías de manejo agrícola.

En este trabajo se analiza una base de datos agrícola para estudiar la posible relación entre el sistema de riego y el estado del cultivo.

Primero se realiza un cálculo manual de una probabilidad condicional. Posteriormente, este resultado se reproduce utilizando R mediante las funciones estadísticas trabajadas en clase. Finalmente, se aplica una prueba de chi-cuadrado para analizar la independencia entre las dos variables.

2 Descripción del conjunto de datos

2.1 Base de datos utilizada

El archivo utilizado para el análisis es:

riego_estres_hidrico_agricola (1).csv

La base contiene información relacionada con lotes agrícolas, sectores, sistemas de riego, textura del suelo, horas de riego, precipitación, humedad del suelo, fallas de bomba, estado del cultivo y rendimiento.

2.2 Variables seleccionadas

Para este análisis se seleccionaron dos variables categóricas:

2.2.1 Sistema de riego

La variable sistema_riego identifica el sistema de riego utilizado en cada lote.

2.2.2 Estado del cultivo

La variable estado_cultivo identifica el estado en el que se encuentra el cultivo.

Las categorías utilizadas en el análisis son:

  • Estres
  • Normal

2.3 Justificación de las variables

La relación entre el sistema de riego y el estado del cultivo es de interés para la Ingeniería Agrícola porque permite analizar si la distribución de cultivos en condición de estrés cambia según el sistema de riego utilizado.

3 Pregunta de investigación

La pregunta que orienta este análisis es:

¿Existe una relación estadística entre el sistema de riego utilizado y el estado del cultivo?

4 Carga de los datos

4.1 Verificación de archivos

list.files()
## [1] "Actividad_Final_Primer_50%.Rmd"       
## [2] "calculo_manual_riego.jpeg"            
## [3] "project.Rproj"                        
## [4] "riego_estres_hidrico_agricola (1).csv"

4.2 Lectura de la base de datos

archivo <- "riego_estres_hidrico_agricola (1).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

5 Verificación de la base

5.1 Nombres de las variables

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"

5.2 Categorías del sistema de riego

unique(riego$sistema_riego)
## [1] "Aspersion" "Goteo"     "Gravedad"

5.3 Categorías del estado del cultivo

unique(riego$estado_cultivo)
## [1] "Estres" "Normal"

6 Preparación de los datos

Para construir la tabla de contingencia se utilizan solamente los registros que tienen información disponible tanto para el sistema de riego como para el estado del cultivo.

datos <- riego[
  !is.na(riego$sistema_riego) &
  !is.na(riego$estado_cultivo),
]

cat(
  "Registros utilizados en el análisis:",
  nrow(datos),
  "\n"
)
## Registros utilizados en el análisis: 180

7 Tabla de contingencia

7.1 Construcción de la tabla

La función table() permite contar las observaciones correspondientes a cada combinación de sistema de riego y estado del cultivo.

tabla <- table(
  datos$sistema_riego,
  datos$estado_cultivo
)

tabla
##            
##             Estres Normal
##   Aspersion     21     35
##   Goteo          6     70
##   Gravedad      27     21

7.2 Presentación de la tabla

knitr::kable(
  tabla,
  caption = "Tabla 1. Sistema de riego y estado del cultivo"
)
Tabla 1. Sistema de riego y estado del cultivo
Estres Normal
Aspersion 21 35
Goteo 6 70
Gravedad 27 21

La tabla permite observar cuántos registros presentan estrés y cuántos presentan un estado normal dentro de cada sistema de riego.

8 Totales marginales

8.1 Totales por sistema de riego

La función margin.table() permite obtener el total de observaciones correspondiente a cada sistema de riego.

totales_riego <- margin.table(
  tabla,
  1
)

knitr::kable(
  data.frame(
    Sistema_Riego = names(totales_riego),
    Total = as.numeric(totales_riego)
  ),
  caption = "Tabla 2. Total de observaciones por sistema de riego"
)
Tabla 2. Total de observaciones por sistema de riego
Sistema_Riego Total
Aspersion 56
Goteo 76
Gravedad 48

8.2 Totales por estado del cultivo

totales_estado <- margin.table(
  tabla,
  2
)

knitr::kable(
  data.frame(
    Estado_Cultivo = names(totales_estado),
    Total = as.numeric(totales_estado)
  ),
  caption = "Tabla 3. Total de observaciones por estado del cultivo"
)
Tabla 3. Total de observaciones por estado del cultivo
Estado_Cultivo Total
Estres 54
Normal 126

9 Tabla con totales generales

La función addmargins() permite agregar los totales de las filas y columnas de la tabla de contingencia.

tabla_completa <- addmargins(tabla)

knitr::kable(
  tabla_completa,
  caption = "Tabla 4. Tabla de contingencia con totales marginales"
)
Tabla 4. Tabla de contingencia con totales marginales
Estres Normal Sum
Aspersion 21 35 56
Goteo 6 70 76
Gravedad 27 21 48
Sum 54 126 180

10 Cálculo manual de probabilidad condicional

10.1 Probabilidad de estrés dado el sistema de riego por goteo

Para cumplir con la actividad, primero se realiza el cálculo manualmente.

La probabilidad que se analizará es:

\[ P(Estres|Goteo) \]

La fórmula de probabilidad condicional es:

\[ P(A|B)=\frac{P(A\cap B)}{P(B)} \]

De la tabla de contingencia:

  • Casos con Goteo y Estres = 6.
  • Total de casos con Goteo = 75.

Por lo tanto:

\[ P(Estres|Goteo) = \frac{6}{75} \]

Realizando la división:

\[ P(Estres|Goteo)=0.08 \]

Convertimos a porcentaje:

\[ 0.08\times100=8\% \]

Por lo tanto:

\[ \boxed{P(Estres|Goteo)=8\%} \]

11 Evidencia del cálculo manual

El cálculo anterior debe realizarse primero a mano en el cuaderno.

El procedimiento que debe aparecer es:

\[ P(Estres|Goteo) = \frac{6}{75} \]

\[ P(Estres|Goteo) = 0.08 \]

\[ P(Estres|Goteo) = 8\% \]

La fotografía del procedimiento manual se encuentra en el archivo:

calculo_manual_riego.jpeg

Cálculo manual de probabilidad condicional
Cálculo manual de probabilidad condicional

12 Probabilidades condicionales utilizando R

La función prop.table() permite calcular las probabilidades condicionales.

probabilidades_condicionales <- prop.table(
  tabla,
  margin = 1
)

knitr::kable(
  probabilidades_condicionales,
  digits = 4,
  caption = "Tabla 5. Probabilidades condicionales del estado del cultivo según el sistema de riego"
)
Tabla 5. Probabilidades condicionales del estado del cultivo según el sistema de riego
Estres Normal
Aspersion 0.3750 0.6250
Goteo 0.0789 0.9211
Gravedad 0.5625 0.4375

13 Comprobación del cálculo manual

Se obtiene específicamente la probabilidad de estrés dentro del grupo que utiliza riego por goteo.

p_estres_goteo <- prop.table(
  tabla,
  margin = 1
)["Goteo", "Estres"]

p_estres_goteo
## [1] 0.07894737

El resultado obtenido mediante R es:

\[ 0.08 \]

Para expresarlo como porcentaje:

p_estres_goteo * 100
## [1] 7.894737

El resultado es:

\[ 8\% \]

14 Comparación entre cálculo manual y R

comparacion <- data.frame(
  Metodo = c(
    "Cálculo manual",
    "R"
  ),
  Probabilidad = c(
    6 / 75,
    p_estres_goteo
  ),
  Porcentaje = c(
    (6 / 75) * 100,
    p_estres_goteo * 100
  )
)

knitr::kable(
  comparacion,
  digits = 4,
  caption = "Tabla 6. Comparación del cálculo manual con el cálculo realizado en R"
)
Tabla 6. Comparación del cálculo manual con el cálculo realizado en R
Metodo Probabilidad Porcentaje
Cálculo manual 0.0800 8.0000
R 0.0789 7.8947

15 Probabilidades conjuntas

La función prop.table() sin especificar un margen permite obtener las probabilidades conjuntas de las combinaciones de las variables.

probabilidades_conjuntas <- prop.table(tabla)

knitr::kable(
  probabilidades_conjuntas,
  digits = 4,
  caption = "Tabla 7. Probabilidades conjuntas"
)
Tabla 7. Probabilidades conjuntas
Estres Normal
Aspersion 0.1167 0.1944
Goteo 0.0333 0.3889
Gravedad 0.1500 0.1167

16 Probabilidad conjunta de Goteo y Estrés

p_conjunta <- prop.table(tabla)[
  "Goteo",
  "Estres"
]

p_conjunta
## [1] 0.03333333

La probabilidad conjunta de Goteo y Estrés es:

\[ P(Goteo\cap Estres) = \frac{6}{179} \]

\[ P(Goteo\cap Estres) \approx0.0335 \]

En porcentaje:

\[ 3.35\% \]

17 Prueba de independencia Chi-cuadrado

17.1 Hipótesis

Para evaluar estadísticamente la relación entre las variables 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 \]

18 Aplicación de la prueba

La función chisq.test() permite realizar la prueba de independencia chi-cuadrado.

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

19 Resultados de la prueba

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 = 8,
  caption = "Tabla 8. Resultado de la prueba de chi-cuadrado"
)
Tabla 8. Resultado de la prueba de chi-cuadrado
Chi_cuadrado Grados_libertad Valor_p
34.93421 2 3e-08

20 Frecuencias esperadas

frecuencias_esperadas <- prueba_chi$expected

knitr::kable(
  round(frecuencias_esperadas, 4),
  caption = "Tabla 9. Frecuencias esperadas bajo la hipótesis de independencia"
)
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

21 Decisión estadística

La regla de decisión utilizada es:

  • Si \(p < 0.05\), se rechaza H₀.
  • Si \(p \geq 0.05\), no se rechaza H₀.
alpha <- 0.05

if (prueba_chi$p.value < alpha) {
  decision <- "Se rechaza H0"
} else {
  decision <- "No se rechaza H0"
}

decision_final <- data.frame(
  Nivel_significancia = alpha,
  Valor_p = prueba_chi$p.value,
  Decision = decision
)

knitr::kable(
  decision_final,
  digits = 8,
  caption = "Tabla 10. Decisión de la prueba de independencia"
)
Tabla 10. Decisión de la prueba de independencia
Nivel_significancia Valor_p Decision
0.05 3e-08 Se rechaza H0

22 Interpretación de la prueba

El valor p obtenido mediante la prueba de chi-cuadrado se compara con el nivel de significancia de 0.05.

De acuerdo con el resultado obtenido:

  • Si el valor p es menor que 0.05, existe evidencia estadística para rechazar la hipótesis de independencia.
  • Si el valor p es igual o mayor que 0.05, no existe evidencia estadística suficiente para rechazar la hipótesis de independencia.

En este conjunto de datos, el resultado obtenido permite evaluar estadísticamente la relación entre el sistema de riego y el estado del cultivo.

23 Comparación de los sistemas de riego

comparacion_sistemas <- data.frame(
  Sistema_Riego = rownames(
    probabilidades_condicionales
  ),
  Estres = probabilidades_condicionales[, "Estres"],
  Normal = probabilidades_condicionales[, "Normal"]
)

knitr::kable(
  comparacion_sistemas,
  digits = 4,
  caption = "Tabla 11. Distribución del estado del cultivo dentro de cada sistema de riego"
)
Tabla 11. Distribución del estado del cultivo dentro de cada sistema de riego
Sistema_Riego Estres Normal
Aspersion Aspersion 0.3750 0.6250
Goteo Goteo 0.0789 0.9211
Gravedad Gravedad 0.5625 0.4375

24 Interpretación desde la Ingeniería Agrícola

Desde el punto de vista de la Ingeniería Agrícola, este análisis permite comparar la distribución del estado del cultivo dentro de los diferentes sistemas de riego.

La información puede servir como punto de partida para revisar las condiciones de manejo del agua, la humedad del suelo, las horas de riego y otras variables agrícolas presentes en la base de datos.

Es importante señalar que una asociación estadística entre dos variables no demuestra por sí sola una relación causal. Para determinar las causas del estrés del cultivo sería necesario analizar otras variables y realizar estudios adicionales.

25 Conclusiones

  1. Se analizaron las variables categóricas sistema de riego y estado del cultivo.

  2. La función table() permitió construir la tabla de contingencia entre las dos variables.

  3. Las funciones margin.table() y addmargins() permitieron obtener y presentar los totales marginales.

  4. La probabilidad condicional calculada manualmente fue:

\[ P(Estres|Goteo) = \frac{6}{75} = 0.08 = 8\% \]

  1. El resultado obtenido manualmente fue comprobado mediante prop.table() en R.

  2. La prueba chisq.test() permitió evaluar formalmente la independencia entre el sistema de riego y el estado del cultivo.

  3. Los resultados permiten analizar si existe evidencia estadística de asociación entre las variables seleccionadas.

  4. Desde la Ingeniería Agrícola, este análisis puede servir como punto de partida para estudiar el manejo del riego y su relación con el estado de los cultivos.

26 Uso de inteligencia artificial

26.1 Herramienta utilizada

Se utilizó ChatGPT como herramienta de apoyo para organizar la estructura del documento RMarkdown, revisar la utilización de las funciones estadísticas y facilitar la presentación de las tablas.

26.2 Prompt utilizado

“Ayúdame a realizar un análisis en RMarkdown utilizando una base de datos agrícola sobre sistemas de riego y estrés hídrico. Necesito seleccionar dos variables categóricas, construir una tabla de contingencia, calcular una probabilidad condicional manualmente y comprobarla en R utilizando table(), margin.table(), prop.table(), addmargins() y chisq.test(). También necesito interpretación estadística, aplicación a Ingeniería Agrícola, conclusiones y referencias.”

26.3 Verificación humana

El cálculo de la probabilidad condicional fue realizado manualmente antes de utilizar R. Posteriormente se comparó el resultado manual con el resultado obtenido mediante prop.table().

27 Referencias

Illowsky, B., & Dean, S. (2023). Introductory Statistics 2e. OpenStax.

National Institute of Standards and Technology. Engineering Statistics Handbook. U.S. Department of Commerce.

OpenStax. Introducción a la estadística.