library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(car) 
## Loading required package: carData
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
library(agricolae) 
#Situación 1: Alimentación de bovinos 
# A. Exploración de Datos
## 1)
NOVILLOS <- read.csv("novillos.csv", stringsAsFactors = FALSE)
str(NOVILLOS)
## 'data.frame':    45 obs. of  6 variables:
##  $ TRATAMIENTO : chr  "P15" "P15" "P15" "P15" ...
##  $ CORRAL      : int  1 1 1 1 1 2 2 2 2 2 ...
##  $ ANIMAL_NUM  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PESO_INICIAL: int  121 210 200 222 209 315 312 311 309 300 ...
##  $ PESO_FINAL  : int  447 446 445 446 444 432 435 436 432 431 ...
##  $ GANANCIA    : int  326 236 245 224 235 117 123 125 123 131 ...
head(NOVILLOS)
##   TRATAMIENTO CORRAL ANIMAL_NUM PESO_INICIAL PESO_FINAL GANANCIA
## 1         P15      1          1          121        447      326
## 2         P15      1          2          210        446      236
## 3         P15      1          3          200        445      245
## 4         P15      1          4          222        446      224
## 5         P15      1          5          209        444      235
## 6         P15      2          6          315        432      117
## 2) Transformación y agregación por corral
NOVILLOS_DIETA <- NOVILLOS %>%
group_by(TRATAMIENTO, CORRAL) %>%
summarise(GANANCIA_PROMEDIO = mean(GANANCIA)) %>%
ungroup()
## `summarise()` has grouped output by 'TRATAMIENTO'. You can override using the
## `.groups` argument.
#Transformar TRATAMIENTO a factor
NOVILLOS_DIETA <- NOVILLOS_DIETA %>%
mutate(TRATAMIENTO = factor(TRATAMIENTO))
#Mostrar la tabla resultante
NOVILLOS_DIETA
## # A tibble: 9 × 3
##   TRATAMIENTO CORRAL GANANCIA_PROMEDIO
##   <fct>        <int>             <dbl>
## 1 P15              1              253.
## 2 P15              2              124.
## 3 P15              3              256.
## 4 P25              1              291.
## 5 P25              2              124.
## 6 P25              3              234.
## 7 P35              1              212.
## 8 P35              2              125.
## 9 P35              3              176.
## 3,4) Estadísticas descriptivas por tratamiento (a nivel corral)
desc <- NOVILLOS_DIETA %>%
group_by(TRATAMIENTO) %>%
summarise(n = n(),
media = mean(GANANCIA_PROMEDIO),
sd = sd(GANANCIA_PROMEDIO),
se = sd/sqrt(n),
minimo = min(GANANCIA_PROMEDIO),
maximo = max(GANANCIA_PROMEDIO))


desc
## # A tibble: 3 × 7
##   TRATAMIENTO     n media    sd    se minimo maximo
##   <fct>       <int> <dbl> <dbl> <dbl>  <dbl>  <dbl>
## 1 P15             3  211.  75.6  43.7   124.   256.
## 2 P25             3  216.  84.6  48.8   124.   291.
## 3 P35             3  171.  43.9  25.4   125.   212.
#El orden de ganacia promedio de peso de mayor a menor fue: P25-P15-P35
# Cabe destacar que las desviaciones estándar son grandes.
# Por lo expuesto, no se observa un patrón claro de efecto consistente del nivel de inclusión del subproducto sobre la ganancia de peso de los novillos.
# B. ANÁLISIS DE VARIANZA (ANOVA)

## 5) Hipótesis
#- H0: Las medias de ganancia por corral son iguales entre tratamientos.
#- H1: Al menos una media es diferente.
## 6) Ajuste del modelo ANOVA
modelo_aov <- aov(GANANCIA_PROMEDIO ~ TRATAMIENTO, data = NOVILLOS_DIETA)
summary(modelo_aov)
##             Df Sum Sq Mean Sq F value Pr(>F)
## TRATAMIENTO  2   3668    1834   0.372  0.704
## Residuals    6  29614    4936
#Conclusión: p > 0.05, por lo tanto no se encontraron diferencias significativas entre tratamientos.
# C. Verificación de Supuestos
## 7) Gráficos diagnósticos
par(mfrow = c(1,2))
plot(modelo_aov, which = 1) # residuos vs ajustados
plot(modelo_aov, which = 2) # Q-Q plot

par(mfrow = c(1,1))
## 8) Normalidad de residuos (Shapiro-Wilk)
shap <- shapiro.test(residuals(modelo_aov))
shap
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_aov)
## W = 0.88492, p-value = 0.1768
## 9) Homogeneidad de varianzas (Levene)
leveneTest(GANANCIA_PROMEDIO ~ TRATAMIENTO, data = NOVILLOS_DIETA, center = median)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.1718 0.8462
##        6
# Residuos vs. Valores Ajustados: nos permite verificar la homogeneidad de varianzas, ya que los puntos se distribuyan sin un patrón claro alrededor de la línea horizontal de cero.
# Q-Q Plot de Residuos: nos permite evaluar la normalidad de los residuos. Ya que los puntos caen aproximadamente sobre la línea diagonal de referencia, los residuos pueden considerarse normales.
# Normalidad de residuos (Shapiro-Wilk): p = 0.1768 por lo tanto no se rechaza normalidad.
# Homogeneidad de varianzas (Levene): p = 0.8462 por lo tanto las varianzas son homogéneas.
# D. Comparación de medias
# Dado que la prueba ANOVA resultó no significativa, no es estadísticamente pertinente realizar una prueba de comparaciones múltiples, ya que no hay diferencias entre los tratamientos.

#Conclusión general situación 1:no existe un efecto estadísticamente significativo del nivel de inclusión del subproducto fibroso en la dieta (15%, 25% o 35%) sobre la ganancia de peso promedio de los novillos Braford. La falta de diferencias podría deberse al bajo número de réplicas (n=3 corrales por tratamiento), a la variabilidad natural entre animales o a que el efecto del nivel de inclusión del subproducto no es marcado bajo las condiciones del ensayo. Sería necesario aumentar el número de corrales y repetir el ensayo para mejorar el poder estadístico, a fin de determinar si realmente existe un efecto biológico.
#Situación 2:Efecto de variedad y tratamiento en rendimiento de poroto
library(dplyr)
library(car)
library(readxl)
library(rstatix)
## 
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
## 
##     filter
#A Exploración de datos
poroto <- read_excel("poroto.xlsx")

poroto <- poroto %>% rename(Rep = Repeticion, Dosis = Agroquimico, Rendimiento = `Rendimiento (kg/parcela)`)

poroto$Variedad <- factor(poroto$Variedad)
poroto$Dosis <- factor(poroto$Dosis)

str(poroto)
## tibble [24 × 4] (S3: tbl_df/tbl/data.frame)
##  $ Rep        : num [1:24] 1 2 3 4 5 6 1 2 3 4 ...
##  $ Variedad   : Factor w/ 2 levels "V1","V2": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Dosis      : Factor w/ 2 levels "D0","D1": 1 1 1 1 1 1 2 2 2 2 ...
##  $ Rendimiento: num [1:24] 0.89 0.94 0.85 1.12 1.35 1.05 1.78 2 1.86 2.3 ...
head(poroto)
## # A tibble: 6 × 4
##     Rep Variedad Dosis Rendimiento
##   <dbl> <fct>    <fct>       <dbl>
## 1     1 V1       D0           0.89
## 2     2 V1       D0           0.94
## 3     3 V1       D0           0.85
## 4     4 V1       D0           1.12
## 5     5 V1       D0           1.35
## 6     6 V1       D0           1.05
#Descriptivas
poroto %>%
  group_by(Variedad, Dosis) %>%
  summarise(n = n(), media = mean(Rendimiento), sd = sd(Rendimiento), se = sd/sqrt(n))
## `summarise()` has grouped output by 'Variedad'. You can override using the
## `.groups` argument.
## # A tibble: 4 × 6
## # Groups:   Variedad [2]
##   Variedad Dosis     n media    sd     se
##   <fct>    <fct> <int> <dbl> <dbl>  <dbl>
## 1 V1       D0        6  1.03 0.185 0.0755
## 2 V1       D1        6  2.04 0.249 0.102 
## 3 V2       D0        6  1.74 0.316 0.129 
## 4 V2       D1        6  2.63 0.121 0.0494
#Las medias aumentan claramente cuando se aplica el agroquímico (D1) en ambas variedades.

#V2 parte de una media más alta en D0 (1.74 vs 1.03) y en D1 (2.63 vs 2.05).

#Las desviaciones estándar son moderadas.
#El rendimiento mas alto se observa en V2:D1 (Mung tratada) y el más bajo en V1:D0 (Alubia sin tratar).
#Gráfico de interacción
interaction.plot(poroto$Dosis, poroto$Variedad, poroto$Rendimiento,
                 ylab="Rendimiento (kg/parcel)", xlab="Dosis", trace.label="Variedad", lwd=2)

#Ambas líneas tienen una pendiente positiva, lo que confirma que el tratamiento con agroquímico (D1) es beneficioso para el rendimiento en ambas variedades, en comparación con el control (D0). La línea V2 (Mung) está por encima de V1 (Alubia), reflejando el efecto principal de la variedad.
#Las dos líneas no son paralelas. La línea V1 tiene una pendiente más pronunciada que la V2. Esto indica que existe un beneficio en el incremento del agroquímico (D1 vs D0) mayor, en términos absolutos, para la variedad Alubia (V1), ya que su rendimiento base (D0) es muy bajo.
#En conclusión, la exploración de datos sugiere que tanto la variedad como el agroquímico son importantes.
#B Análisis de Varianza Factorial (ANOVA)
#Hipótesis Factor A: Variedad de Poroto (V1: Alubia, V2: Mung)
#H0:μV1=μV2
#H1:μV1 no es igual μV2μ
#Hipótesis Factor B:Dosis de Agroquímico (D0: Sin tratar, D1: Tratado)
#H0:μD0=μD1
#H1:μD0 no es igual μD1
#Hipótesis Interacción: El efecto combinado de Variedad y Agroquímico
#H0(A×B): (V1D1−V1D0)=(V2D1−V2D0 )
#H1(A×B): (V1D1−V1D0)no es igual a (V2D1−V2D0)
# Ajustar el modelo de ANOVA Factorial
modelo <- aov(Rendimiento ~ Variedad * Dosis, data = poroto)
summary(modelo)
##                Df Sum Sq Mean Sq F value   Pr(>F)    
## Variedad        1  2.529   2.529  48.018 9.95e-07 ***
## Dosis           1  5.425   5.425 103.015 2.46e-09 ***
## Variedad:Dosis  1  0.022   0.022   0.422    0.523    
## Residuals      20  1.053   0.053                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Efecto Variedad: significativo a α = 0.01. Rechazo H0

#Efecto Dosis: significativo a α = 0.01. Rechazo H0

#Interacción Variedad × Dosis: no significativo. Acepto H0

# En base a lo mencionado, ambos factores tienen efecto principal significativo sobre el rendimiento, sin embargo no hay interacción significativa. 
#C. Verificación de Supuestos
par(mfrow=c(1,2))
plot(modelo, which=1) # residuos vs ajustados
plot(modelo, which=2) # Q-Q

par(mfrow=c(1,1))
#Residuos vs ajustados:la distribución de los puntos parece ser aleatoria alrededor de cero. No hay una evidencia clara de heterocedasticidad.
#Q-Q Plot de residuos: la mayoría de los puntos se ajustan bien a la línea diagonal, especialmente en el centro. Visualmente, el supuesto de normalidad parece cumplirse.
shapiro.test(residuals(modelo)) # normalidad
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo)
## W = 0.97151, p-value = 0.7043
leveneTest(Rendimiento ~ interaction(Variedad, Dosis), data = poroto, center = median) # homogeneidad
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  3  1.2728 0.3107
##       20
#Test de normalidad: H0: los residuos provienen de una distribución normal. Como el valor p es mayor que α=0.01, no se rechaza la hipótesis nula, por lo tanto los residuos siguen una distribución normal.
#Test de homogeneidad de varianzas: H0: las varianzas de los grupos son iguales (homocedasticidad).Como el valor de p es mayor que α=0.01), no se rechaza la hipótesis nula. Se concluye que las varianzas son homogéneas, cumpliéndose el supuesto de Homogeneidad de Varianzas.
#D. Comparación de Medias: se puede realizar una prueba de comparaciones múltiples para cada efecto principal, ya que ambos resultaron significativos en el ANOVA.
##1. Comparamos el Efecto Principal de Variedad (Factor A)

comparacion_variedad <- poroto %>%
  t_test(Rendimiento ~ Variedad, p.adjust.method = "none")

print("Comparación de Medias para Variedad:")
## [1] "Comparación de Medias para Variedad:"
print(comparacion_variedad)
## # A tibble: 1 × 8
##   .y.         group1 group2    n1    n2 statistic    df       p
## * <chr>       <chr>  <chr>  <int> <int>     <dbl> <dbl>   <dbl>
## 1 Rendimiento V1     V2        12    12     -2.93  21.8 0.00788
#Como p es menor a α, la comparación de medias confirma que existe una diferencia significativa en el rendimiento promedio general entre la Variedad V1 (Alubia) y la Variedad V2 (Mung). La Variedad V2 es significativamente superior a V1.
##2. Comparamos el Efecto Principal de Agroquímico (Factor B)
comparacion_agroquimico <- poroto %>%
  t_test(Rendimiento ~ Dosis, p.adjust.method = "none")

print("Comparación de Medias para Agroquímico:")
## [1] "Comparación de Medias para Agroquímico:"
print(comparacion_agroquimico)
## # A tibble: 1 × 8
##   .y.         group1 group2    n1    n2 statistic    df         p
## * <chr>       <chr>  <chr>  <int> <int>     <dbl> <dbl>     <dbl>
## 1 Rendimiento D0     D1        12    12     -5.75  21.1 0.0000102
# Como p es menor que α, existe una diferencia significativa en el rendimiento promedio general entre las semillas no tratadas (D0) y las tratadas (D1). El tratamiento D1 es significativamente superior al control D0.
# Calcular medias y error estándar (SE) por combinación de factores
resumen <- poroto %>%
  group_by(Variedad, Dosis) %>%
  summarise(
    media = mean(Rendimiento),
    sd = sd(Rendimiento),
    n = n(),
    se = sd / sqrt(n)
  )
## `summarise()` has grouped output by 'Variedad'. You can override using the
## `.groups` argument.
# Mostrar tabla resumen
print(resumen)
## # A tibble: 4 × 6
## # Groups:   Variedad [2]
##   Variedad Dosis media    sd     n     se
##   <fct>    <fct> <dbl> <dbl> <int>  <dbl>
## 1 V1       D0     1.03 0.185     6 0.0755
## 2 V1       D1     2.04 0.249     6 0.102 
## 3 V2       D0     1.74 0.316     6 0.129 
## 4 V2       D1     2.63 0.121     6 0.0494
# Gráfico de barras con error estándar
ggplot(resumen, aes(x = Dosis, y = media, fill = Variedad)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
  geom_errorbar(
    aes(ymin = media - se, ymax = media + se),
    width = 0.2,
    position = position_dodge(width = 0.9)
  ) +
  labs(
    title = "Rendimiento del poroto (kg/parcela)",
    x = "Dosis de agroquímico",
    y = "Rendimiento medio (± SE)",
    fill = "Variedad"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    legend.position = "top"
  )

#E. Conclusiones:El análisis estadístico de ANOVA a un nivel de significancia del 1% (α=0.01) determinó que ambos efectos principales (Variedad y Dosis de Agroquímico) influyen de manera altamente significativa en el rendimiento del poroto, mientras que el efecto de la interacción (Variedad × Agroquímico) no resultó significativo. Por ello el efecto de los dos factores puede considerarse aditivo. Por lo tanto se puede recomendar a los productores priorizar la Variedad Mung (V2), ya que, en promedio, supera consistentemente a la Variedad Alubia (V1) en rendimiento, y usar el nuevo agroquímico (D1), ya que incrementa significativamente el rendimiento general, independientemente de la variedad.