Este informe responde las preguntas planteadas en el práctico uno, utilizando la base de datos “TRIGO.xlsx”. Se analiza el rendimiento del trigo según localidad y tratamientos. Se analiza la localidad 5, Marcos Juárez pero el codigo permite cambiar la localidad facilmente para hacerlo más reutilizable. Las recomendaciones solicitadas se hieron en base a los gráfcios y medidas de resumen obtenidas y vistas en clase. No se hicieron comparaciones de medias ni test estadisticos de significancia.
Los primeros pasos son la instalación de los paquetes y su carga. El código que elegí evalua si la libreria esta instalada y sólo si no es así, la instala.
# Instalación de las librerías necesarias
if (!requireNamespace("readxl", quietly = TRUE)) install.packages("readxl")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")
if (!requireNamespace("ggthemes", quietly = TRUE)) install.packages("ggthemes")
if (!requireNamespace("leaflet", quietly = TRUE)) install.packages("leaflet")
if (!requireNamespace("ggmap", quietly = TRUE)) install.packages("ggmap")
if (!requireNamespace("tidyr", quietly = TRUE)) install.packages("tidyr")
if (!requireNamespace("summarytools", quietly = TRUE)) install.packages("summarytools")
# Carga de las librerías
library(readxl)
library(ggplot2)
library(dplyr)
library(ggthemes)
library(leaflet)
library(ggmap)
library(tidyr)
library(summarytools)
La base de datos TRIGO.xlsx, se descargó del aula virtual y se guardó en el mismo directorio que este archivo Rmarkdown. Luego, se cargo a Rstudio usando el paquete “readxl”.
Para asegurarnos de solo tener dos tipos de tratamiento, sin importar errores en la carga de datos, mutate y la notación de tuberias se incluyen con el paquete tidyverse o como parde de dplyr. El código toma los valores en tratamiento, ignora si trata de mayusculas o minúsculas y si hay o no espacios, y convierte todos los datos que empiecen con “Sin” o “sin” en SinFung. Loz que comienzan con “Con” o “con”, los convierte en ConFung. Para los genotipos, todos se pasan a minusculas sin espacios. las localidades están bien en la base de datos y solo se listaron los valores, que coincidieron con los 11 listados en el práctico.
# Limpieza y unificación de datos en 'trigo'
trigo <- trigo %>%
mutate(
Tratamiento = case_when(
grepl("sin", Tratamiento, ignore.case = TRUE) ~ "SinFung",
grepl("con", Tratamiento, ignore.case = TRUE) ~ "ConFung",
TRUE ~ Tratamiento # Conserva valores no procesados (si los hubiera)
),
Genotipo = trimws(tolower(Genotipo)) # Minúsculas y sin espacios extras
)
# Verificación de la limpieza
unique(trigo$Tratamiento) # Verifica valores únicos en 'Tratamiento'
## [1] "ConFung" "SinFung"
unique(trigo$Genotipo) # Verifica valores únicos en 'Genotipo'
## [1] "kleintauro" "kleincastor" "buckpuelche" "onix"
## [5] "aca801" "kleinzorro" "b75aniversario" "biointa1001"
## [9] "aca901" "biointa1002" "aca601" "le2330"
## [13] "kleintigre" "kleinleon" "biointa1006" "biointa1005"
## [17] "le2331" "atlax" "kleinnutria" "aca906"
## [21] "cronox" "le2357" "sy300" "aca907"
## [25] "agpfast" "arex" "aca903" "baguette9"
## [29] "kleinrayo" "le2333" "aca905" "kleinchaja"
## [33] "biointa1007" "buckpleno" "floripan100" "baguette501"
## [37] "kleinproteo"
unique(trigo$Localidad) # Verifica valores únicos en 'Localidad'
## [1] "CHA" "LAD" "BAL" "BAR" "REC" "TAN" "RAF" "MAN" "MAJ" "PER" "ALT"
Para que el codigo pueda reutilizarse, armé un diccionario con las localidades y sus siglas. de esta forma, puedo ejecutar el resto del código solo epsecificando cual es la localidad que deseo analizar.
El siguiente código permite elegir la localidad por su sigla, toma el nombre completo del diccionarioy luego filtra los datos de trigo por localidad y los guarda en un objeto llamado “trigo_por_localidad”
# Selección de la localidad (este codigo se usa para una única localidad, como anexo se pone un codigo en bucle que procesa todas las localidades)
localidad_seleccionada <- "MAJ" # Se puede cambiar!!!!!
localidad_nombre <- localidades[localidad_seleccionada]
trigo_por_localidad <- trigo %>% filter(Localidad == localidad_seleccionada)
Para esto, solo usamos nrow(trigo), ya que es el nombre de la base de datos que teneoms cargada en RStudio.
n_total <- nrow(trigo)
cat("El numero total de casos en la base de datos es:", n_total)
## El numero total de casos en la base de datos es: 4170
Uso la función nrow() para contar filas, combinada con la función filter que permite combinar dos requisitos para el conteo. esto permite contar las filas de datos “Con fungicida” y “Sin fungicida” por separado, dentro de cada localidad, lo que es útil porque hay localidades con un único tratamiento.
#Contar casos por localidad
n_localidad <- nrow(trigo_por_localidad)
cat("El numero de casos en la localidad seleccionada (",localidad_nombre,") es:", n_localidad, "\n")
## El numero de casos en la localidad seleccionada ( Marcos Juarez ) es: 230
# Contar casos con tratamiento "SinFung" en una localidad
n_sin_fungicida <- nrow(filter(trigo_por_localidad, Tratamiento == "SinFung"))
# Contar casos con tratamiento "ConFung" en una localidad
n_con_fungicida <- nrow(filter(trigo_por_localidad, Tratamiento == "ConFung"))
# Imprimir resultados
cat("Casos con tratamiento 'Sin fungicida' en", localidad_nombre, "es :", n_sin_fungicida, "\n")
## Casos con tratamiento 'Sin fungicida' en Marcos Juarez es : 168
cat("Casos con tratamiento 'Con fungicida'en", localidad_nombre, "es :",n_con_fungicida, "\n")
## Casos con tratamiento 'Con fungicida'en Marcos Juarez es : 62
Para resolver este punto hacemos un polígono de frecuencias, con datos agrupados cada 500 kg/ha.
ggplot(trigo_por_localidad, aes(x = Rendimiento)) +
geom_histogram(binwidth = 500, fill = "skyblue", color = "black") +
labs(
title = paste("Rendimiento de trigo (en Kg/ha) en", localidad_nombre),
x = "Rendimiento (Kg/ha)",
y = "Frecuencia"
) +
theme_economist(base_size = 14)
Figura 1: Rendimiento de trigo en Kg por hectárea para la localidad de Marcos Juárez. Datos agrupados cada 500 kg.
En esta versión se incluyen los valores de la moda, mediana y media aritmética para comprararlas. La sintaxis del gráfico es compleja, así que se hizo con ayuda de chatgpt).
# Calcular media, mediana y moda
estadisticas <- trigo_por_localidad %>%
summarize(
media = mean(Rendimiento, na.rm = TRUE),
mediana = median(Rendimiento, na.rm = TRUE),
moda = as.numeric(names(sort(table(Rendimiento), decreasing = TRUE)[1]))
)
# Crear el histograma con ggplot
ggplot(trigo_por_localidad, aes(x = Rendimiento)) +
geom_histogram(binwidth = 500, fill = "skyblue", color = "black", alpha = 0.7) +
geom_vline(aes(xintercept = estadisticas$media), color = "red", linetype = "dashed", linewidth = 1, show.legend = TRUE) +
geom_vline(aes(xintercept = estadisticas$mediana), color = "blue", linetype = "dashed", linewidth = 1, show.legend = TRUE) +
geom_vline(aes(xintercept = estadisticas$moda), color = "darkgreen", linetype = "dashed", size = 1, show.legend = TRUE) +
labs(
title = paste ("Distribucion del rendimiento de trigo en", localidad_nombre),
x = "Rendimiento (Kg/ha)",
y = "Frecuencia"
) +
theme_economist() +
theme(
plot.title = element_text(size = 14, face = "bold"),
plot.subtitle = element_text(size = 12),
axis.text = element_text(size = 10),
axis.title = element_text(size = 12)
) +
annotate("text", x = estadisticas$media, y = 10.0, label = paste("Media: ", round(estadisticas$media, 2)), color = "red", angle = 90, vjust = +1.25) +
annotate("text", x = estadisticas$mediana, y = 10.0, label = paste("Mediana: ", round(estadisticas$mediana, 2)), color = "blue", angle = 90, vjust = -0.5) +
annotate("text", x = estadisticas$moda, y = 10.0, label = paste("Moda: ", round(estadisticas$moda, 2)), color = "darkgreen", angle = 90, vjust = -0.5)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Figura 3: Rendimiento de trigo en Tn por hectárea para la localidad de Marcos Juárez, message=FALSE, warning=FALSE, incluyendo media aritmética, moda y mediana. Datos agrupados cada 500 kg.
La diferencia entre la mediana y la media por un lado, y la moda más desplazada hacia valores positivos podría indicar que los datos estan muy dispersos y que hay valores muy extremos, o qpodría sugerir una distribución polimodal, o una combinación de ambas situaciones. Por el momento no es posible sacar más conclusiones.
La pregunta pide definir como varía el rendimiento en función del tratamiento aplicado. Para facilitar la interpretación, hice cuatro gráficos, con rendimientos agrupados cada 100, 500, 1000 y 2000 kg/ha.
#Agrupados por defecto, cada 100 Tn
ggplot(trigo_por_localidad, aes(x = Rendimiento, color = Tratamiento)) +
geom_freqpoly(binwidth = 100, size = 1) +
labs(
title = paste("Rendimiento por tratamiento en", localidad_nombre),
x = "Rendimiento (Kg/ha)",
y = "Frecuencia absoluta",
color = "Tratamiento"
) +
scale_color_manual(values = c("SinFung" = "lightseagreen", "ConFung" = "tomato"),
labels = c("Sin fungicida", "Con fungicida")) + # Cambiar las leyendas
theme_economist(base_size = 14) +
theme(
plot.title = element_text(size = 16, face = "bold"), # Título del gráfico
plot.subtitle = element_text(size = 14), # Subtítulo del gráfico
axis.title = element_text(size = 14), # Títulos de los ejes
axis.text = element_text(size = 12), # Texto de los ejes
legend.title = element_text(size = 14), # Título de la leyenda
legend.text = element_text(size = 12) # Texto de la leyenda
)
Figura 4: Rendimiento de trigo en Kg por hectárea por tratamiento en Marcos Juárez. Datos agrupados cada 100 Kg.
Este gráfico permite observar que los datos “Con Fungicida” tienen una distribución aproximadamente bimodal con una moda cerca de los 4500 kg/ha y otra cerca de los 5500 kg/ha, lo que podría explicar los resultados obtenidos al graficar el polígono de frecuencias.
#Agrupados cada 500 kg
ggplot(trigo_por_localidad, aes(x = Rendimiento, color = Tratamiento)) +
geom_freqpoly(binwidth = 500, size = 1) +
labs(
title = paste("Rendimiento por tratamiento en", localidad_nombre),
x = "Rendimiento (Kg/ha)",
y = "Frecuencia absoluta",
color = "Tratamiento"
) +
scale_color_manual(values = c("SinFung" = "lightseagreen", "ConFung" = "tomato"),
labels = c("Sin fungicida", "Con fungicida")) + # Cambiar las leyendas
theme_economist(base_size = 14) +
theme(
plot.title = element_text(size = 16, face = "bold"), # Título del gráfico
plot.subtitle = element_text(size = 14), # Subtítulo del gráfico
axis.title = element_text(size = 14), # Títulos de los ejes
axis.text = element_text(size = 12), # Texto de los ejes
legend.title = element_text(size = 14), # Título de la leyenda
legend.text = element_text(size = 12) # Texto de la leyenda
)
Figura 5: Rendimiento de trigo en Kg por hectárea para la localidad de Marcos Juárez. Datos agrupados cada 500 Kg.
#Agrupados por defecto, cada 100 Tn
ggplot(trigo_por_localidad, aes(x = Rendimiento, color = Tratamiento)) +
geom_freqpoly(binwidth = 1000, size = 1) +
labs(
title = paste("Rendimiento por tratamiento en", localidad_nombre),
x = "Rendimiento (Kg/ha)",
y = "Frecuencia absoluta",
color = "Tratamiento"
) +
scale_color_manual(values = c("SinFung" = "lightseagreen", "ConFung" = "tomato"),
labels = c("Sin fungicida", "Con fungicida")) + # Cambiar las leyendas
theme_economist(base_size = 14) +
theme(
plot.title = element_text(size = 16, face = "bold"), # Título del gráfico
plot.subtitle = element_text(size = 14), # Subtítulo del gráfico
axis.title = element_text(size = 14), # Títulos de los ejes
axis.text = element_text(size = 12), # Texto de los ejes
legend.title = element_text(size = 14), # Título de la leyenda
legend.text = element_text(size = 12) # Texto de la leyenda
)
Figura 6: Rendimiento de trigo en Kg por hectárea para la localidad de Marcos Juárez. Datos agrupados cada 1000 Kg.
ggplot(trigo_por_localidad, aes(x = Rendimiento, color = Tratamiento)) +
geom_freqpoly(binwidth = 2000, size = 1) +
labs(
title = paste("Rendimiento por tratamiento en", localidad_nombre),
x = "Rendimiento (Kg/ha)",
y = "Frecuencia absoluta",
color = "Tratamiento"
) +
scale_color_manual(values = c("SinFung" = "lightseagreen", "ConFung" = "tomato"),
labels = c("Sin fungicida", "Con fungicida")) + # Cambiar las leyendas
theme_economist(base_size = 14) +
theme(
plot.title = element_text(size = 16, face = "bold"), # Título del gráfico
plot.subtitle = element_text(size = 14), # Subtítulo del gráfico
axis.title = element_text(size = 14), # Títulos de los ejes
axis.text = element_text(size = 12), # Texto de los ejes
legend.title = element_text(size = 14), # Título de la leyenda
legend.text = element_text(size = 12) # Texto de la leyenda
)
Figura 7: Rendimiento de trigo en Kg por hectárea para la localidad de Marcos Juárez. Datos agrupados cada 2000 Kg.
Los gráficos muestran diferencias importantes entre los tratamiento, con mayores frecuencias para el tratamiento “Con fungicida”. Sin embargo, las distribuciones son similares, por lo que puede que las diferencias sean más sencillas de interpretar en otros tipos de gráfico. A continuación se iuncluye un Boxplot de los datos y un “Violin plot” recomendado pro la literatura:
ggplot(trigo_por_localidad, aes(x = Tratamiento, y = Rendimiento, fill = Tratamiento)) +
geom_violin(trim = FALSE) +
labs(
title = paste("Distribución del rendimiento\npor tratamiento y localidad"),
x = "Tratamiento",
y = "Rendimiento (Kg/ha)"
) +
scale_fill_manual(values = c("ConFung" = "lightseagreen", "SinFung" = "tomato")) +
theme_economist(base_size = 14) +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5), # Centrado y en dos líneas
axis.title = element_text(size = 14), # Tamaño del título del eje
axis.text = element_text(size = 12), # Tamaño del texto del eje
legend.title = element_text(size = 14), # Tamaño del título de la leyenda
legend.text = element_text(size = 12) # Tamaño del texto de la leyenda
)
Figura 8: Violin plot de Rendimiento de trigo en Kg por hectárea para la localidad de Marcos Juárez.
El gráfico demuestra que el tratamiento “Con Fungicida” produce un rendimiento más parejo, mientras que la probabilidad de obtener rendimientos más extremos con el tratamiento “sin fungicida” es ligeramente mayor.
ggplot(trigo_por_localidad, aes(x = Tratamiento, y = Rendimiento, fill = Tratamiento)) +
geom_boxplot() +
labs(
title = paste("Comparación del rendimiento\nentre tratamientos en localidad"),
x = "Tratamiento",
y = "Rendimiento (Kg/ha)"
) +
scale_fill_manual(values = c("ConFung" = "lightseagreen", "SinFung" = "tomato")) +
theme_economist(base_size = 14) +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5), # Centrado y en dos líneas
axis.title = element_text(size = 14), # Tamaño del título del eje
axis.text = element_text(size = 12), # Tamaño del texto del eje
legend.title = element_text(size = 14), # Tamaño del título de la leyenda
legend.text = element_text(size = 12) # Tamaño del texto de la leyenda
)
Figura 9: Boxplot de Rendimiento de trigo en Kg por hectárea para la localidad de Marcos Juárez.
El boxplot muestra lo mismo que el violin plot. Con estos datos, recomendaría usar el tratamiento “Sin fungicida” porque, a pesar de que la mediana es muy similar en ambos tratamientos, no usar fungicidas implica un costo mucho menor. Además, existe la posibilidad de obtener rendimientos mayores que con el uso de fungicidas.
Para esto se cargaron dos librerias: leaflet y ggmap. El código se agrego al inicio para mantener el orden de los pasos. Se selccionó un campo al azr cerca de marcos Juarez usando Google maps
# Coordenadas de Marcos Juárez (latitud y longitud)
latitud <- -32.679665
longitud <- -62.058473
# Crear el mapa con imagen satelital
mapa <- leaflet() %>%
addProviderTiles(providers$Esri.WorldImagery) %>% # Imagen satelital de ESRI
setView(lng = longitud, lat = latitud, zoom = 12) %>% # Ajustar la vista inicial
addMarkers(lng = longitud, lat = latitud, popup = "Campo en Marcos Juárez") # Agregar un marcador
# Mostrar el mapa
mapa
Figura 10: Mapa satelital de la una de las zonas muestreadas en Marcos Juárez, provincia de Córdoba.
La tabla de frecuencia, por localidad, considerando todos los datos, sin considerar el tratamiento serìa:
# Crear tabla de frecuencias en toneladas (Tn)
tabla_frecuencias <- trigo_por_localidad %>%
# Convertir 'Rendimiento' a toneladas (Tn)
mutate(Rendimiento_Tn = Rendimiento / 1000) %>%
# Crear los intervalos de rendimiento en Tn
mutate(rango_rendimiento = cut(Rendimiento_Tn,
breaks = seq(min(Rendimiento_Tn), max(Rendimiento_Tn), by = 0.75),
include.lowest = TRUE, right = FALSE)) %>%
# Contar la frecuencia de cada intervalo
group_by(rango_rendimiento) %>%
summarise(frecuencia = n()) %>%
# Agregar la columna con porcentaje de cada frecuencia
mutate(porcentaje = frecuencia / sum(frecuencia) * 100) %>%
# Ordenar la tabla por el rango de rendimiento
arrange(rango_rendimiento)
# Mostrar la tabla de frecuencias
tabla_frecuencias
## # A tibble: 8 × 3
## rango_rendimiento frecuencia porcentaje
## <fct> <int> <dbl>
## 1 [1.7,2.45) 11 4.78
## 2 [2.45,3.2) 26 11.3
## 3 [3.2,3.95) 34 14.8
## 4 [3.95,4.7) 65 28.3
## 5 [4.7,5.45) 44 19.1
## 6 [5.45,6.2) 33 14.3
## 7 [6.2,6.95] 16 6.96
## 8 <NA> 1 0.435
Pero la tabla puede hacerse por tratamientos:
# Crear tabla de frecuencias discriminada por tratamiento en toneladas (Tn)
tabla_frecuencias_tratamiento <- trigo_por_localidad %>%
# Convertir 'Rendimiento' a toneladas (Tn)
mutate(Rendimiento_Tn = Rendimiento / 1000) %>%
# Crear los intervalos de rendimiento en Tn (bins de 1 Tn)
mutate(rango_rendimiento = cut(Rendimiento_Tn,
breaks = seq(min(Rendimiento_Tn), max(Rendimiento_Tn), by = 0.5),
include.lowest = TRUE, right = FALSE)) %>%
# Agrupar por tratamiento y rango de rendimiento
group_by(Tratamiento, rango_rendimiento) %>%
# Contar la frecuencia de cada intervalo por tratamiento
summarise(frecuencia = n()) %>%
# Agregar la columna con porcentaje de cada frecuencia
mutate(porcentaje = frecuencia / sum(frecuencia) * 100) %>%
# Ordenar la tabla por tratamiento y rango de rendimiento
arrange(Tratamiento, rango_rendimiento)
## `summarise()` has grouped output by 'Tratamiento'. You can override using the
## `.groups` argument.
# Mostrar la tabla de frecuencias discriminada por tratamiento
tabla_frecuencias_tratamiento
## # A tibble: 20 × 4
## # Groups: Tratamiento [2]
## Tratamiento rango_rendimiento frecuencia porcentaje
## <chr> <fct> <int> <dbl>
## 1 ConFung [2.2,2.7) 1 1.61
## 2 ConFung [2.7,3.2) 4 6.45
## 3 ConFung [3.2,3.7) 10 16.1
## 4 ConFung [3.7,4.2) 10 16.1
## 5 ConFung [4.2,4.7) 12 19.4
## 6 ConFung [4.7,5.2) 12 19.4
## 7 ConFung [5.2,5.7) 8 12.9
## 8 ConFung [5.7,6.2) 5 8.06
## 9 SinFung [1.7,2.2) 8 4.76
## 10 SinFung [2.2,2.7) 10 5.95
## 11 SinFung [2.7,3.2) 14 8.33
## 12 SinFung [3.2,3.7) 11 6.55
## 13 SinFung [3.7,4.2) 25 14.9
## 14 SinFung [4.2,4.7) 31 18.5
## 15 SinFung [4.7,5.2) 17 10.1
## 16 SinFung [5.2,5.7) 18 10.7
## 17 SinFung [5.7,6.2) 17 10.1
## 18 SinFung [6.2,6.7) 10 5.95
## 19 SinFung [6.7,7.2] 6 3.57
## 20 SinFung <NA> 1 0.595
Sin embargo, la tabla anterior toma el total de datos como 100% para calcular las frecuencias relativas. Una alternativa podrìa ser considerar el totakl de cada tratamiento como un 100%:
# Crear tabla de frecuencias relativas por tratamiento en toneladas (Tn)
tabla_frecuencias_tratamiento <- trigo_por_localidad %>%
# Convertir 'Rendimiento' a toneladas (Tn)
mutate(Rendimiento_Tn = Rendimiento / 1000) %>%
# Crear los intervalos de rendimiento en Tn (bins de 0.5 Tn)
mutate(rango_rendimiento = cut(Rendimiento_Tn,
breaks = seq(min(Rendimiento_Tn), max(Rendimiento_Tn), by = 0.5),
include.lowest = TRUE, right = FALSE)) %>%
# Agrupar por tratamiento y rango de rendimiento
group_by(Tratamiento, rango_rendimiento) %>%
# Contar la frecuencia de cada intervalo por tratamiento
summarise(frecuencia = n(), .groups = "drop") %>%
# Calcular el porcentaje relativo por tratamiento
group_by(Tratamiento) %>% # Agrupar nuevamente por tratamiento
mutate(porcentaje = frecuencia / sum(frecuencia) * 100) %>%
# Ordenar la tabla por tratamiento y rango de rendimiento
arrange(Tratamiento, rango_rendimiento)
# Mostrar la tabla de frecuencias relativas por tratamiento
tabla_frecuencias_tratamiento
## # A tibble: 20 × 4
## # Groups: Tratamiento [2]
## Tratamiento rango_rendimiento frecuencia porcentaje
## <chr> <fct> <int> <dbl>
## 1 ConFung [2.2,2.7) 1 1.61
## 2 ConFung [2.7,3.2) 4 6.45
## 3 ConFung [3.2,3.7) 10 16.1
## 4 ConFung [3.7,4.2) 10 16.1
## 5 ConFung [4.2,4.7) 12 19.4
## 6 ConFung [4.7,5.2) 12 19.4
## 7 ConFung [5.2,5.7) 8 12.9
## 8 ConFung [5.7,6.2) 5 8.06
## 9 SinFung [1.7,2.2) 8 4.76
## 10 SinFung [2.2,2.7) 10 5.95
## 11 SinFung [2.7,3.2) 14 8.33
## 12 SinFung [3.2,3.7) 11 6.55
## 13 SinFung [3.7,4.2) 25 14.9
## 14 SinFung [4.2,4.7) 31 18.5
## 15 SinFung [4.7,5.2) 17 10.1
## 16 SinFung [5.2,5.7) 18 10.7
## 17 SinFung [5.7,6.2) 17 10.1
## 18 SinFung [6.2,6.7) 10 5.95
## 19 SinFung [6.7,7.2] 6 3.57
## 20 SinFung <NA> 1 0.595
Esto nos permite un gráficar el rendimeinto por tratamiento considerando frecuencias relativas:
# Crear el polígono de frecuencias con colores personalizados
ggplot(tabla_frecuencias_tratamiento, aes(x = rango_rendimiento, y = porcentaje, color = Tratamiento, group = Tratamiento)) +
geom_line(size = 1) + # Añadir líneas para los polígonos
geom_point(size = 2) + # Añadir puntos para marcar las frecuencias
labs(
title = "Polígonos de Frecuencia por Tratamiento",
x = "Rango de Rendimiento (Tn)",
y = "Frecuencia Relativa (%)",
color = "Tratamiento"
) +
scale_color_manual(values = c("ConFung" = "lightseagreen", "SinFung" = "tomato")) + # Colores personalizados
theme_economist() + # Tema minimalista
theme(
# Ajustes del título
plot.title = element_text(size = 16, face = "bold", hjust = 0.5), # Centrado y en negrita
# Ajustes de las etiquetas del eje X
axis.text.x = element_text(size = 8, face = "bold", angle = 30, hjust = 1, vjust = 1), # Más pequeñas, inclinadas 30° y alineadas
# Ajustes de las etiquetas del eje Y
axis.text.y = element_text(size = 10), # Texto del eje Y más legible
# Ajustes del título de la leyenda
legend.title = element_text(size = 12, face = "bold"), # Título de la leyenda más grande y en negrita
legend.text = element_text(size = 10) # Texto de los elementos de la leyenda ajustado
)
Figura 11: Poligono de frecuencias relativas de rendimiento de trigo por tonelada, para los tratamientos Con fungicida y Sin fungicida, obtenidos en Marcos Juárez.
Este gráfico demuestra que los mayores rendimientos, por sobre los 6.2 tn/ha, solo se han obtenido en cultivos sin fungicidas. Esto puede deberse a un sesgo en el uso de los tratamientos, pero apoya la recomendación que hicimos anteriormenete: No se recomienda el uso de fungicidas porque no se observan grandes diferencias en los rendimientos promedio, el costo del tratamiento sin fungicida es menor y los mayores rendimientos solo se alcanzan en cultivos que no han sido tratados con fungicidas.
Usando las funciones específicas, según lo visto en calse y dividiendo por tratamiento, para la localidad de Marcos Juarez:
# Cálculo de estadísticas descriptivas para Rendimiento según Tratamiento y Localidad
resumen_rendimiento <- trigo_por_localidad %>%
group_by(Tratamiento) %>%
summarise(
Minimo = min(Rendimiento, na.rm = TRUE), # Mínimo
Q1 = quantile(Rendimiento, probs = 0.25, na.rm = TRUE), # Primer cuartil (Q1)
Media = mean(Rendimiento, na.rm = TRUE), # Media
Mediana = median(Rendimiento, na.rm = TRUE), # Mediana
Q3 = quantile(Rendimiento, probs = 0.75, na.rm = TRUE), # Tercer cuartil (Q3)
Maximo = max(Rendimiento, na.rm = TRUE), # Máximo
Rango = diff(range(Rendimiento, na.rm = TRUE)), # Rango (Max - Min)
Desviacion = sd(Rendimiento, na.rm = TRUE), # Desviación estándar
CV = (Desviacion / Media) * 100 # Coeficiente de variación (%)
)
# Imprimir el resumen
print(resumen_rendimiento)
## # A tibble: 2 × 10
## Tratamiento Minimo Q1 Media Mediana Q3 Maximo Rango Desviacion CV
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ConFung 2646 3729. 4410. 4376. 5155 6140 3494 900. 20.4
## 2 SinFung 1703 3634 4489. 4435 5422. 7240 5537 1291. 28.7
Usando Summarytools y tidyverse: descripción del rendimiento en quilos, por localidad, para Marcos Juarez, usando “summarytools”
descr(trigo_por_localidad$Rendimiento,
na.rm = TRUE,
headings = FALSE)
##
## Rendimiento
## ----------------- -------------
## Mean 4468.04
## Std.Dev 1196.54
## Min 1703.00
## Q1 3650.00
## Median 4424.50
## Q3 5400.00
## Max 7240.00
## MAD 1253.54
## IQR 1722.25
## CV 0.27
## Skewness -0.03
## SE.Skewness 0.16
## Kurtosis -0.57
## N.Valid 230.00
## Pct.Valid 100.00
Y tambien podemos combinar los datos para obtener una decriminación del rendimiento, segun el tratamiento aplicado.
# Usar group_by y luego aplicar descr a cada grupo
trigo_por_localidad %>%
group_by(Tratamiento) %>%
descr(Rendimiento, na.rm = TRUE, headings = FALSE)
##
## ConFung SinFung
## ----------------- --------- ---------
## Mean 4410.23 4489.38
## Std.Dev 899.69 1290.69
## Min 2646.00 1703.00
## Q1 3721.00 3623.00
## Median 4376.50 4435.00
## Q3 5170.00 5425.00
## Max 6140.00 7240.00
## MAD 1082.30 1401.06
## IQR 1426.25 1788.50
## CV 0.20 0.29
## Skewness -0.02 -0.05
## SE.Skewness 0.30 0.19
## Kurtosis -0.96 -0.72
## N.Valid 62.00 168.00
## Pct.Valid 100.00 100.00
Los datos de resumen apoyan las recomendaciones anteriores. Sin embargo, si lo que se busca es cierta previsibilidad en los rindes, se puede optar por un cultivo con fungicidas, como queda demostrado por el menor rango obtenido en estas condiciones de aproximadamente 3500 kg/ha, contra los casi 5500 obtenidos cuando no se usan fungicidas.
Haremos la forma más sencilla, que incluye un boxplot de los datos de rendimiento de Marcos Juarez por genotipo y tratamiento:
mejores_medianas <- trigo_por_localidad %>%
group_by(Tratamiento, Genotipo) %>%
summarise(mediana = median(Rendimiento, na.rm = TRUE)) %>%
slice_max(mediana, n = 1)
print (mejores_medianas)
## # A tibble: 2 × 3
## # Groups: Tratamiento [2]
## Tratamiento Genotipo mediana
## <chr> <chr> <dbl>
## 1 ConFung kleintauro 5480
## 2 SinFung aca905 5990
# Generar el gráfico con ajustes mínimos
ggplot(trigo_por_localidad, aes(x = Rendimiento, y = Genotipo, fill = Tratamiento)) +
geom_boxplot(outlier.colour = "red", outlier.size = 3) + # Outliers en rojo y de tamaño grande
labs(title = "Rendimiento por Genotipo y Tratamiento",
x = "Rendimiento",
y = "Genotipo") +
theme_economist() +
scale_fill_manual(values = c("SinFung" = "tomato", "ConFung" = "lightseagreen")) + # Colores personalizados
theme(
axis.text.y = element_text(size = 10, face = "bold", angle = 0), # Opciones de texto en eje Y
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), # Centrar el título
plot.margin = margin(20, 10, 20, 10), # Ajustar márgenes si es necesario
legend.title = element_text(size = 14, face = "bold"), # Aumentar tamaño del título de la leyenda
legend.text = element_text(size = 12) # Aumentar tamaño del texto en la leyenda
) +
geom_text(data = mejores_medianas,
aes(x = mediana, y = Genotipo, label = Genotipo),
color = "black", size = 6, hjust = -1.5) # Mover etiquetas al lado derecho
En base a estos datos, aconsejaría plantar la variedad Kleintauro si se van a usar fungicidas y la variedad Aca905 si no se van a usar fungicidas. La recomendación se basa principalmente en la mediana obtenida de los rendimientos.
El gráfico de boxplot de rendimientos por genotipo y tratamiento demuestra que el tratamiento preferido en Marcos Juarez es “Sin Fungicida”. En la mayoria los casos en que se evaluó el rendimiento de un genotipo en ambos tratamientos (con y SIn fungicida), se da una de dos situaciones: O se evaluaron pocos campos “con fungicidas, en cuyo caso los rendimientos suelen ser menores a los obtenidos en los campos no tratados (Aca906, Biointa 1005, Biointa 1006, Kleinnutria, Kleinrayo), o se evaluaron cantidades más similares de campos en cada tratamiento, en cuyos casos el rendimiento suele ser mejor cuando se usan fungicidas (Aca901, B75aniversario, Buckpuelche, Floripan100,Kleinzoprro y Kleintauro). Esto indica que es probable que los resultados se modifiquen si se hacen más cultivos on fungicidas.