install.packages("tidyverse")
#install.packages("dplyr") NO ES NECESARIO INSTALAR OTRA VEZ YA QUE ES PARTE DEL TIDYVERSE
install.packages("readxl")
# install.packages("readr") NO ES NECESARIO INSTALAR OTRA VEZ YA QUE ES PARTE DEL TIDYVERSE
install.packages("car")
install.packages("agricolae")
install.packages("emmeans")
install.packages("summarytools")
install.packages("rsconnect")
library("tidyverse")
#library ("dplyr")
library("readxl")
#library("readr")
library("car")
library("agricolae")
library("emmeans")
library("summarytools")
library("rsconnect")
NOVILLOS <- read_csv("novillos.csv")
names(NOVILLOS)
## [1] "TRATAMIENTO" "CORRAL" "ANIMAL_NUM" "PESO_INICIAL" "PESO_FINAL"
## [6] "GANANCIA"
str(NOVILLOS)
## spc_tbl_ [45 × 6] (S3: spec_tbl_df/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 ...
## - attr(*, "spec")=
## .. cols(
## .. TRATAMIENTO = col_character(),
## .. CORRAL = col_double(),
## .. ANIMAL_NUM = col_double(),
## .. PESO_INICIAL = col_double(),
## .. PESO_FINAL = col_double(),
## .. GANANCIA = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
head(NOVILLOS)
## # A tibble: 6 × 6
## TRATAMIENTO CORRAL ANIMAL_NUM PESO_INICIAL PESO_FINAL GANANCIA
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 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
summary(NOVILLOS)
## TRATAMIENTO CORRAL ANIMAL_NUM PESO_INICIAL PESO_FINAL
## Length:45 Min. :1 Min. : 1 Min. :112.0 Min. :411.0
## Class :character 1st Qu.:1 1st Qu.: 4 1st Qu.:200.0 1st Qu.:417.0
## Mode :character Median :2 Median : 8 Median :221.0 Median :433.0
## Mean :2 Mean : 8 Mean :231.9 Mean :431.4
## 3rd Qu.:3 3rd Qu.:12 3rd Qu.:310.0 3rd Qu.:444.0
## Max. :3 Max. :15 Max. :321.0 Max. :449.0
## GANANCIA
## Min. : 97.0
## 1st Qu.:123.0
## Median :198.0
## Mean :199.5
## 3rd Qu.:245.0
## Max. :335.0
NOVILLOS_DIETA <- NOVILLOS %>%
group_by(TRATAMIENTO, CORRAL) %>%
summarise(GANANCIA_PROMEDIO = mean(GANANCIA, na.rm = TRUE)) %>%
ungroup() %>%
mutate(TRATAMIENTO = factor(TRATAMIENTO))
print(NOVILLOS_DIETA)
## # A tibble: 9 × 3
## TRATAMIENTO CORRAL GANANCIA_PROMEDIO
## <fct> <dbl> <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.
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 ...
head(NOVILLOS_DIETA)
## # A tibble: 6 × 3
## TRATAMIENTO CORRAL GANANCIA_PROMEDIO
## <fct> <dbl> <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.
DESCRIPTIVAS <- NOVILLOS_DIETA %>%
group_by(TRATAMIENTO) %>%
summarise(
Media = mean(GANANCIA_PROMEDIO, na.rm = TRUE),
Mediana = median(GANANCIA_PROMEDIO, na.rm = TRUE),
Desviacion = sd(GANANCIA_PROMEDIO, na.rm = TRUE),
Minimo = min(GANANCIA_PROMEDIO, na.rm = TRUE),
Maximo = max(GANANCIA_PROMEDIO, na.rm = TRUE),
N = n()
)
# Mostrar resultados en una tabla
DESCRIPTIVAS
## # A tibble: 3 × 7
## TRATAMIENTO Media Mediana Desviacion Minimo Maximo N
## <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
## 1 P15 211. 253. 75.6 124. 256. 3
## 2 P25 216. 234. 84.6 124. 291. 3
## 3 P35 171. 176. 43.9 125. 212. 3
library(ggplot2)
ggplot(NOVILLOS_DIETA, aes(x = TRATAMIENTO, y = GANANCIA_PROMEDIO, fill = TRATAMIENTO)) +
geom_boxplot(alpha = 0.6) +
stat_summary(fun = mean, geom = "point", shape = 20, size = 3, color = "black") +
labs(title = "Ganancia de peso por tratamiento (a nivel de corral)",
x = "Tratamiento", y = "Ganancia promedio de peso") +
theme_minimal()
El Tratamiento P25 logró la mayor media de aumento de peso, lo que lo convierte en el más prometedor en términos de productividad, aunque su alta variabilidad entre corrales indica diferencias en el manejo o en la respuesta de los animales. ###El Tratamiento P15 también demostró ser eficiente, con ganancias promedio comparables a las de P25, pero con menor dispersión, lo que lo hace una opción más estable y uniforme. ###El Tratamiento P35 resultó ser el menos favorable, presentando la ganancia promedio más baja en todos los corrales evaluados.
Hipótesis nula (H₀): No existen diferencias significativas en la ganancia de peso promedio entre tratamientos.
H0:μP15=μP25=μP35
Hipótesis alternativa (H₁): Al menos un tratamiento difiere en la ganancia de peso promedio.
H1:∃ i,j tal que μi ≠ μj
Como la unidad experimental es el corral, usaremos la tabla NOVILLOS_DIETA (ganancia promedio por corral)
# Creamos el objeto modelo_dca
modelo_dca <- aov(GANANCIA_PROMEDIO ~ TRATAMIENTO, data = NOVILLOS_DIETA)
# Resumen del modelo
summary(modelo_dca)
## Df Sum Sq Mean Sq F value Pr(>F)
## TRATAMIENTO 2 3668 1834 0.372 0.704
## Residuals 6 29614 4936
El análisis de varianza reveló que el impacto del tratamiento en la ganancia de peso a nivel de corral no fue significativo (F = 0,704; p = 0,05). Por consiguiente, no hay evidencia estadísticamente significativa para rechazar la hipótesis nula, lo que sugiere que no se encontraron diferencias significativas entre los tratamientos analizados.
residuos_dca <- modelo_dca$residuals # residuos = observado - predicho
predichos_dca <- modelo_dca$fitted.values # valores predichos
names(modelo_dca$model)
## [1] "GANANCIA_PROMEDIO" "TRATAMIENTO"
tabla <- data.frame(
Observado = modelo_dca$model[[1]], # primera columna usada en el modelo
Predichos = predichos_dca,
Residual = residuos_dca,
Tratamiento = modelo_dca$model[[2]] # segunda columna usada en el modelo
)
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
plot(modelo_dca, which = 2)
Interpretación: En este gráfico Q-Q de residuos se puede observar que la mayoría de los puntos se ajustan bastante bien a la línea diagonal, lo que sugiere que los residuos se asemejan a una distribución normal. En los extremos se aprecian ligeras desviaciones. No se detectan curvaturas sistemáticas ni grandes desviaciones, lo que respalda el cumplimiento del supuesto de normalidad de los errores.
Gráfico de residuos vs predichos
plot(modelo_dca, which = 1)
Interpretación: El gráfico de residuos vs los valores ajustados del modelo ANOVA indica que los residuos se distribuyen aleatoriamente alrededor de la línea horizontal en cero, sin mostrar un patrón claro. Esto sugiere que el supuesto de homogeneidad de varianzas se cumple de manera razonable. No obstante, se detectan algunas observaciones atípicas (outliers) que se apartan del resto de los datos, las cuales podrían afectar los resultados y sería recomendable revisarlas.
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
Interpretación: La hipótesis nula (H₀) de la prueba Shapiro–Wilk es: “los residuos siguen una distribución normal”. Como el p-value = 0.1768 > 0.05, no se rechaza H₀. Eso significa que los residuos cumplen con el supuesto de normalidad (p > 0.05, Shapiro–Wilk).
H0: SI cumple el supuesto de Homocedasticidad.
H1: NO se cumple el supuesto de Homocedasticidad.
levene_test <- leveneTest(GANANCIA_PROMEDIO ~ TRATAMIENTO, data = NOVILLOS_DIETA)
levene_test
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.1718 0.8462
## 6
Interpretación: La hipótesis nula (H₀) de la prueba de Levene es: “las varianzas son iguales entre los grupos”.Como p-value = 0.8462 > 0.05, no se rechaza H₀. Esto significa que se cumple el supuesto de homogeneidad de varianzas requerido para el ANOVA.
summary(modelo_dca)
## Df Sum Sq Mean Sq F value Pr(>F)
## TRATAMIENTO 2 3668 1834 0.372 0.704
## Residuals 6 29614 4936
Interpretación: El análisis de varianza mostró que no existen diferencias significativas en la ganancia promedio entre los tratamientos evaluados (p > 0.05). En consecuencia, no resulta necesario aplicar pruebas de comparaciones múltiples, dado que no se rechaza la hipótesis nula de igualdad de medias.
El estudio sobre la ganancia de peso vivo de los novillos Braford en engorde a corral no reveló diferencias significativas (p > 0,05) entre los tres niveles de inclusión del subproducto fibroso (15 %, 25 % y 35 % en base seca). Esto sugiere que, dentro del rango analizado, el incremento en la proporción del subproducto no impactó de manera estadísticamente detectable el rendimiento productivo de los animales. No obstante, al examinar los datos se puede notar que las medias de ganancia de peso entre los tratamientos mostraron variaciones que, aunque no significativas, podrían ser atribuidas a factores como:
Variabilidad individual de los animales dentro de cada corral, que puede ocultar el efecto de las dietas. Número limitado de repeticiones, lo que disminuye la potencia estadística para identificar diferencias pequeñas pero biológicamente relevantes.
Adaptación de los animales al subproducto, dado que un periodo de habituación insuficiente o diferencias en la digestibilidad pueden afectar el aprovechamiento de la dieta.
Condiciones ambientales (estrés calórico, manejo del agua o del corral) que influyen en el consumo y, por ende, en la ganancia de peso.
En términos prácticos, los resultados indican que es factible incluir hasta un 35 % del subproducto en la dieta sin comprometer el rendimiento animal, lo que representa una opción viable para disminuir los costos de alimentación en sistemas de engorde a corral.