library(tidyverse)
library(readxl)
library(car)
library(agricolae)
library(emmeans)
library(summarytools)
NOVILLOS <- read_excel("novillos.xlsx")
str(NOVILLOS)
## tibble [45 × 6] (S3: tbl_df/tbl/data.frame)
## $ TRATAMIENTO : chr [1:45] "P15" "P15" "P15" "P15" ...
## $ CORRAL : num [1:45] 1 1 1 1 1 2 2 2 2 2 ...
## $ ANIMAL_NUM : num [1:45] 1 2 3 4 5 6 7 8 9 10 ...
## $ PESO_INICIAL: num [1:45] 121 210 200 222 209 315 312 311 309 300 ...
## $ PESO_FINAL : num [1:45] 447 446 445 446 444 432 435 436 432 431 ...
## $ GANANCIA : num [1:45] 326 236 245 224 235 117 123 125 123 131 ...
#Transformación de variables y agregación por corral
# Agrupar los datos por 'CORRAL' y 'TRATAMIENTO' y calcular la ganancia de peso
#promedio.
NOVILLOS_DIETA <- NOVILLOS %>%
group_by(TRATAMIENTO, CORRAL) %>%
summarise(GANANCIA_PROMEDIO = mean(GANANCIA)) %>%
ungroup()
# Transformar TRATAMIENTO a factor
NOVILLOS_DIETA <- NOVILLOS_DIETA %>%
mutate(TRATAMIENTO = factor(TRATAMIENTO))
str(NOVILLOS_DIETA)
## tibble [9 × 3] (S3: tbl_df/tbl/data.frame)
## $ TRATAMIENTO : Factor w/ 3 levels "P15","P25","P35": 1 1 1 2 2 2 3 3 3
## $ CORRAL : num [1:9] 1 2 3 1 2 3 1 2 3
## $ GANANCIA_PROMEDIO: num [1:9] 253 124 256 291 124 ...
glimpse(NOVILLOS_DIETA)
## Rows: 9
## Columns: 3
## $ TRATAMIENTO <fct> P15, P15, P15, P25, P25, P25, P35, P35, P35
## $ CORRAL <dbl> 1, 2, 3, 1, 2, 3, 1, 2, 3
## $ GANANCIA_PROMEDIO <dbl> 253.2, 123.8, 256.4, 290.6, 124.2, 233.8, 212.2, 124…
tratamiento y sacar conclusiones.
# Opción 2: usando summarytools
NOVILLOS_DIETA %>%
group_by((CORRAL)) %>%
descr(GANANCIA_PROMEDIO)
## Descriptive Statistics
## GANANCIA_PROMEDIO by (CORRAL)
## Data Frame: NOVILLOS_DIETA
## N: 9
##
## 1 2 3
## ----------------- -------- -------- --------
## Mean 252.00 124.27 222.13
## Std.Dev 39.21 0.50 41.35
## Min 212.20 123.80 176.20
## Q1 212.20 123.80 176.20
## Median 253.20 124.20 233.80
## Q3 290.60 124.80 256.40
## Max 290.60 124.80 256.40
## MAD 55.45 0.59 33.51
## IQR 39.20 0.50 40.10
## CV 0.16 0.00 0.19
## Skewness -0.03 0.13 -0.26
## SE.Skewness 1.22 1.22 1.22
## Kurtosis -2.33 -2.33 -2.33
## N.Valid 3.00 3.00 3.00
## N 3.00 3.00 3.00
## Pct.Valid 100.00 100.00 100.00
ggplot(NOVILLOS_DIETA, aes(x = TRATAMIENTO, y = GANANCIA_PROMEDIO, fill = TRATAMIENTO)) +
geom_boxplot() +
labs(title = "Ganancia promedio según tratamiento",
x = "TRATAMIENTO", y = "GANANCIA_PROMEDIO (g)") +
theme_minimal()
# B. Análisis de Varianza (ANOVA) ## 5. Plantear las hipótesis
adecuadas.
modelo_dca <- aov(GANANCIA_PROMEDIO ~ TRATAMIENTO, data = NOVILLOS_DIETA)
summary(modelo_dca)
## Df Sum Sq Mean Sq F value Pr(>F)
## TRATAMIENTO 2 3668 1834 0.372 0.704
## Residuals 6 29614 4936
##Trabajamos con los residuos y predichos del modelo para realizar las pruebas de los errores.
residuos_dca <- modelo_dca$residuals # residuos = observado - predicho
predichos_dca <- modelo_dca$fitted.values # predichos
tabla <- data.frame(
Observado = NOVILLOS_DIETA$GANANCIA_PROMEDIO,
Predichos = predichos_dca,
Residual = residuos_dca,
Tratamiento = NOVILLOS_DIETA$TRATAMIENTO)
print(tabla)
## Observado Predichos Residual Tratamiento
## 1 253.2 211.1333 42.066667 P15
## 2 123.8 211.1333 -87.333333 P15
## 3 256.4 211.1333 45.266667 P15
## 4 290.6 216.2000 74.400000 P25
## 5 124.2 216.2000 -92.000000 P25
## 6 233.8 216.2000 17.600000 P25
## 7 212.2 171.0667 41.133333 P35
## 8 124.8 171.0667 -46.266667 P35
## 9 176.2 171.0667 5.133333 P35
hist(residuos_dca, main = "Histograma de residuos")
boxplot(residuos_dca, main = "Boxplot de residuos")
plot(modelo_dca, which = 2)
H0: SI se cumple el supuesto de Normalidad.
H1: NO se cumple el supuesto de Normalidad.
shapiro.test(modelo_dca$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo_dca$residuals
## W = 0.88492, p-value = 0.1768
plot(modelo_dca, which = 1) # Residos vs predichos
H0: SI cumple el supuesto de Homocedasticidad.
H1: NO se cumple el supuesto de Homocedasticidad
library(tidyverse)
library(readxl)
library(car)
library(agricolae)
library(emmeans)
library(summarytools)
# Para esta prueba usamos una función de la librería "car"
leveneTest(GANANCIA_PROMEDIO ~ TRATAMIENTO, data = NOVILLOS_DIETA)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.1718 0.8462
## 6
# Usaremos una función del paquete agricolae
TUKEY <- HSD.test(modelo_dca, "TRATAMIENTO")
TUKEY
## $statistics
## MSerror Df Mean CV MSD
## 4935.636 6 199.4667 35.22096 176.003
##
## $parameters
## test name.t ntr StudentizedRange alpha
## Tukey TRATAMIENTO 3 4.339195 0.05
##
## $means
## GANANCIA_PROMEDIO std r se Min Max Q25 Q50 Q75
## P15 211.1333 75.64981 3 40.56121 123.8 256.4 188.5 253.2 254.8
## P25 216.2000 84.58463 3 40.56121 124.2 290.6 179.0 233.8 262.2
## P35 171.0667 43.92554 3 40.56121 124.8 212.2 150.5 176.2 194.2
##
## $comparison
## NULL
##
## $groups
## GANANCIA_PROMEDIO groups
## P25 216.2000 a
## P15 211.1333 a
## P35 171.0667 a
##
## attr(,"class")
## [1] "group"
plot(TUKEY)
# Usamos librería agricolae
FISHER <- LSD.test(modelo_dca, "TRATAMIENTO")
FISHER
## $statistics
## MSerror Df Mean CV t.value LSD
## 4935.636 6 199.4667 35.22096 2.446912 140.3603
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none TRATAMIENTO 3 0.05
##
## $means
## GANANCIA_PROMEDIO std r se LCL UCL Min Max Q25
## P15 211.1333 75.64981 3 40.56121 111.88363 310.3830 123.8 256.4 188.5
## P25 216.2000 84.58463 3 40.56121 116.95029 315.4497 124.2 290.6 179.0
## P35 171.0667 43.92554 3 40.56121 71.81696 270.3164 124.8 212.2 150.5
## Q50 Q75
## P15 253.2 254.8
## P25 233.8 262.2
## P35 176.2 194.2
##
## $comparison
## NULL
##
## $groups
## GANANCIA_PROMEDIO groups
## P25 216.2000 a
## P15 211.1333 a
## P35 171.0667 a
##
## attr(,"class")
## [1] "group"
plot(FISHER)
# CONCLUSIONES ## En el análisis de la ganancia de peso no se detectaron
diferencias significativas entre los tres tratamientos. Si bien el
tratamiento con un 25% de inclusión del subproducto fibroso mostró una
mayor ganancia promedio, esta diferencia no resultó estadísticamente
distinta respecto a los otros tratamientos. La ausencia de significancia
puede deberse a la falta de homogeneidad en las unidades experimentales,
en este caso los corrales, lo que incrementa la variabilidad dentro de
los tratamientos. Cuando existe gran variación interna, se genera
“ruido” en el análisis de varianza y disminuye la capacidad de detectar
diferencias reales. La homogeneidad es fundamental, ya que asegura que
el efecto observado se atribuya a los tratamientos y no a factores
externos no controlados. En caso de no poder garantizarla, podría ser
más adecuado emplear diseños experimentales más complejos (como bloques
completos al azar o diseños en cuadrado latino), que permiten controlar
la variabilidad y aumentar la precisión del análisis. Para dar solución
y mejorar la uniformidad de las unidades experimentales, se podría
aumentar las repeticiones por tratamiento y, de ser necesario, utilizar
diseños más robustos que reduzcan la variabilidad y fortalezcan la
validez de las conclusiones.