\[\text{Juan Felipe Paz Paiba; Paula Gabriela Riveros Herrera}\] \[\text{Diseño en el cual la covarianza tiene efecto en la respuesta}\]

set.seed(1033686870)

# Fertilización (factor)
fertilizacion <- gl(4, 12, 48, labels = c('Control', 'Baja', 'Media', 'Alta'))

# Peso del tuberculo (respuesta, en gramos)
peso_tuberculo <- c(
  rnorm(12, 78.12, 7.39),   # Control 
  rnorm(12, 135.15, 7.74),  # Baja 
  rnorm(12, 184.39,7.58),  # Media 
  rnorm(12, 230.78, 7.81))   # Alta 
# Salinidad
# Generar datos de salinidad (covariable) 
salinidad <- sort(rnorm(48, 6.2,2.0 ))  # 48 observaciones para 12 repeticiones por tratamiento
datos=data.frame(fertilizacion,peso_tuberculo,salinidad)

head(datos)
##   fertilizacion peso_tuberculo salinidad
## 1       Control       93.74991 0.2828302
## 2       Control       75.90368 2.1738425
## 3       Control       76.70521 2.1748540
## 4       Control       87.53347 2.3483939
## 5       Control       87.83263 3.1299089
## 6       Control       70.54761 3.2088930

\[\text{Analisis Descriptivo}\]

# Calcular las medias de los tratamientos
medias <- tapply(datos$peso_tuberculo, datos$fertilizacion, mean)

# Calcular la media global de las respuestas
media_global <- mean(datos$peso_tuberculo)

# Crear el boxplot 
boxplot(datos$peso_tuberculo ~ datos$fertilizacion, col = c("purple", "pink", "yellow", "blue"), notch = FALSE,
        main = "Diagrama de Caja", xlab = "Tratamiento", ylab = "Peso del Tuberculo (gramos)")

# Añadir la línea horizontal en la media de todas las respuestas
abline(h = mean(datos$peso_tuberculo), col = "green")

# Añadir puntos en las medias de cada tratamiento
points(x = 1, y = medias["Control"], col = "red", pch = 19)
points(x = 2, y = medias["Baja"], col = "red", pch = 19)
points(x = 3, y = medias["Media"], col = "red", pch = 19)
points(x = 4, y = medias["Alta"], col = "red", pch = 19)

# Calcular la media del peso del Tuberculo para cada tratamiento de fertilización
medias <- tapply(datos$peso_tuberculo, datos$fertilizacion, mean)

# Calcular la varianza del peso del Tuberculo para cada tratamiento de fertilización
varianzas <- tapply(datos$peso_tuberculo, datos$fertilizacion, var)

# Calcular el coeficiente de variación del peso del Tuberculo para cada tratamiento de fertilización
cv <- tapply(datos$peso_tuberculo, datos$fertilizacion, function(x) (sd(x) / mean(x)) * 100)

# Crear un data frame con los resultados
resultados <- data.frame(
  Tratamiento = names(medias),
  Media = medias,
  Varianza = varianzas,
  Coeficiente_de_Variacion = cv
)

# Mostrar la tabla de resultados
print(resultados)
##         Tratamiento     Media Varianza Coeficiente_de_Variacion
## Control     Control  80.12683 57.31884                 9.448671
## Baja           Baja 137.90316 78.27230                 6.415490
## Media         Media 185.27351 46.30660                 3.672892
## Alta           Alta 231.52492 33.23541                 2.490020
#Grafico mentiroso
#Analisis de regresión
# Crear un gráfico de dispersión con una línea de regresión
plot(datos$salinidad, datos$peso_tuberculo, col = datos$fertilizacion, pch = 19,
     main = "Grafico Mentiroso", xlab = "Salinidad del Suelo", ylab = "Peso del tuberculo (gramos)")

# Añadir la línea de regresión
abline(lm(datos$peso_tuberculo ~ datos$salinidad), col = 'orange', lwd = 2)

#Analisis de regresión Grafico real 
#Crear el gráfico de dispersión
plot(datos$salinidad, datos$peso_tuberculo, pch = 19, col = datos$fertilizacion, cex = 2, asp = 1,
     main = "Peso del tuberculo vs. Salinidad", xlab = "Salinidad del Suelo", ylab = "Peso del tuberculo (gramos)")

# Añadir la línea de regresión
abline(lm(datos$peso_tuberculo ~ datos$salinidad), col = 'orange', lwd = 2)

# Análisis de regresión
reg <- lm(datos$peso_tuberculo ~ datos$salinidad)
summary(reg)  
## 
## Call:
## lm(formula = datos$peso_tuberculo ~ datos$salinidad)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -45.901 -19.127   0.374  17.163  86.763 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       -1.145     13.453  -0.085    0.933    
## datos$salinidad   28.752      2.311  12.443 2.51e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 27.67 on 46 degrees of freedom
## Multiple R-squared:  0.771,  Adjusted R-squared:  0.766 
## F-statistic: 154.8 on 1 and 46 DF,  p-value: 2.512e-16
# Calcular el ángulo en grados
atan(36.89) * 180 / pi
## [1] 88.44723
#Correlación entre las variables
cor(datos$peso_tuberculo, datos$salinidad)
## [1] 0.878044

\[\text{Estandarizar con el fin de realizar un gráfico estandarizado}\]

# Estandarización de las variables
peso_tuberculo_est <- scale(datos$peso_tuberculo)
salinidad_est <- scale(datos$salinidad)

# Crear un data frame con las variables estandarizadas
datos_est <- data.frame(
  fertilizacion = datos$fertilizacion,
  peso_tuberculo_est = peso_tuberculo_est,
  salinidad_est = salinidad_est)
# Crear el gráfico de dispersión
plot(datos_est$peso_tuberculo_est, datos_est$salinidad_est, pch = 19, col = as.factor(datos_est$fertilizacion), cex = 2,
     main = "Peso del Tuberculo Estandarizado vs. Salinidad Estandarizada", xlab = "Peso del Tuberculo (Estandarizado)", ylab = "Salinidad del Suelo (Estandarizada)")
# Añadir la línea de regresión
abline(lm(datos_est$peso_tuberculo_est ~ datos_est$salinidad_est), col = 'orange', lwd = 2)

\[Hipotesis\] \[H_{0_1}= \mu_{Tc} = \mu_{T1} = \mu_{T2}=\mu_{T3}\] \[H_{0_2}: \delta=0\] \[H_{0_c3}:\gamma=0\] \[\text{ANCOVA No Parametrico robusto de Wilcox} \]

# Ajustar el modelo de ANCOVA no paramétrico
# Primero, ajustamos la respuesta por la covariable
residuos <- residuals(lm(peso_tuberculo ~ salinidad, data = datos))

# Agregar los residuos al data frame
datos$residuos <- residuos

# Realizar comparaciones por pares utilizando la prueba de Wilcoxon
niveles <- levels(datos$fertilizacion)
combinaciones <- combn(niveles, 2, simplify = FALSE)

resultados <- list()

for (i in seq_along(combinaciones)) {
  grupo1 <- combinaciones[[i]][1]
  grupo2 <- combinaciones[[i]][2]
  resultado <- wilcox.test(residuos ~ fertilizacion, data = subset(datos, fertilizacion %in% c(grupo1, grupo2)))
  resultados[[paste(grupo1, grupo2, sep = "_vs_")]] <- resultado
}

# Mostrar los resultados
for (nombre in names(resultados)) {
  print(paste("Comparación:", nombre))
  print(resultados[[nombre]])
  print("")
}
## [1] "Comparación: Control_vs_Baja"
## 
##  Wilcoxon rank sum exact test
## 
## data:  residuos by fertilizacion
## W = 60, p-value = 0.5137
## alternative hypothesis: true location shift is not equal to 0
## 
## [1] ""
## [1] "Comparación: Control_vs_Media"
## 
##  Wilcoxon rank sum exact test
## 
## data:  residuos by fertilizacion
## W = 46, p-value = 0.1432
## alternative hypothesis: true location shift is not equal to 0
## 
## [1] ""
## [1] "Comparación: Control_vs_Alta"
## 
##  Wilcoxon rank sum exact test
## 
## data:  residuos by fertilizacion
## W = 31, p-value = 0.01727
## alternative hypothesis: true location shift is not equal to 0
## 
## [1] ""
## [1] "Comparación: Baja_vs_Media"
## 
##  Wilcoxon rank sum exact test
## 
## data:  residuos by fertilizacion
## W = 18, p-value = 0.001115
## alternative hypothesis: true location shift is not equal to 0
## 
## [1] ""
## [1] "Comparación: Baja_vs_Alta"
## 
##  Wilcoxon rank sum exact test
## 
## data:  residuos by fertilizacion
## W = 19, p-value = 0.001433
## alternative hypothesis: true location shift is not equal to 0
## 
## [1] ""
## [1] "Comparación: Media_vs_Alta"
## 
##  Wilcoxon rank sum exact test
## 
## data:  residuos by fertilizacion
## W = 29, p-value = 0.01209
## alternative hypothesis: true location shift is not equal to 0
## 
## [1] ""

\[\text{Se encontraron diferencias significativas en las medias de los siguientes tratamientos:} \] \[\text{Control-Alta; Baja-Media; Baja-Alta y Media-Alta } \]

#Analisis de Covarianza
mod_cov <- aov(datos$peso_tuberculo ~ datos$salinidad + datos$fertilizacion)
summary(mod_cov)
##                     Df Sum Sq Mean Sq F value Pr(>F)    
## datos$salinidad      1 118541  118541  2278.3 <2e-16 ***
## datos$fertilizacion  3  32979   10993   211.3 <2e-16 ***
## Residuals           43   2237      52                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

\[\text{Los datos proveen evidencia en contra de la hipotesis nula, por lo tanto, al menos un tratamiento se comportó diferente} \] \[\text{Los datos proveen evidencia en contra de la hipotesis nula, por lo tanto, la salinidad, tubo algún efecto en la respuesta} \] \[\text{Los datos proveen evidencia en contra de la hipotesis nula, por lo tanto, la pendiente no fue 0} \]

#Supuestos para el análisis paramétrico 

#Extraer los residuales del modelo ANOVA
residuales <- residuals(mod_cov)

# Calcular la varianza de los residuales
varianza_residuales <- var(residuales)

# Crear el histograma de los residuales
hist(residuales, main = "Histograma de Residuales", xlab = "Residuales", ylab = "Frecuencia", col = "purple2", border = "black")

# Añadir una línea vertical en la varianza de los residuales
abline(v = varianza_residuales, col = "black", lwd = 2)

# Añadir una leyenda con la varianza de los residuales
legend("topleft", legend = paste("Varianza = ", round(varianza_residuales, 4)), col = "black", lwd = 2)

#Prueba de normalidad de los residuales
# Realizar la prueba de Shapiro-Wilk en los residuales
shapiro_test_result = shapiro.test(residuales)
# Mostrar los resultados de la prueba
print(shapiro_test_result)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuales
## W = 0.95287, p-value = 0.05208
#Prueba igualdad de varianzas
# Realizar la prueba de Bartlett
  bartlett_test_result <- bartlett.test(datos$peso_tuberculo ~ datos$fertilizacion)

# Mostrar los resultados de la prueba
print(bartlett_test_result)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  datos$peso_tuberculo by datos$fertilizacion
## Bartlett's K-squared = 2.0363, df = 3, p-value = 0.5649
# Crear el diagrama de caja de los residuales (sospechas de datos atipicos)
boxplot(residuales, main = "Diagrama de Caja de Residuales", ylab = "Residuales", col = "purple", border = "black", outline = TRUE)

# Realizar la prueba de Tukey HSD
tukey_result <- TukeyHSD(mod_cov, "datos$fertilizacion")
## Warning in replications(paste("~", xx), data = mf): non-factors ignored:
## datos$salinidad
# Mostrar los resultados de la prueba de Tukey HSD
print(tukey_result)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = datos$peso_tuberculo ~ datos$salinidad + datos$fertilizacion)
## 
## $`datos$fertilizacion`
##                    diff       lwr       upr     p adj
## Baja-Control  -1.875415 -9.745043  5.994214 0.9195058
## Media-Control 16.870951  9.001323 24.740580 0.0000053
## Alta-Control  28.983890 21.114262 36.853519 0.0000000
## Media-Baja    18.746366 10.876737 26.615994 0.0000006
## Alta-Baja     30.859305 22.989676 38.728933 0.0000000
## Alta-Media    12.112939  4.243310 19.982567 0.0009602

\[\text{Hay diferencias entre los tratamientos: Media-Control, Alta-Control, Media-baja, Alta-Baja y Alta-Media} \] \[\text{Diseño donde la covariable no tiene efecto en la respuesta} \]

set.seed(1033686870)
# Generar datos aleatoreos de salinidad suelo (covariable) utilizando runif
salinidad_aleatorizada <- runif(48, 4.2, 8.2)  # 48 observaciones para 12 repeticiones por tratamiento

# Crear el data frame con los datos
datos_2 <- data.frame(
  fertilizacion = fertilizacion,
  peso_tuberculo = peso_tuberculo,
  salinidad_aleatorizada = salinidad_aleatorizada
)

# Redondear los datos a dos decimales
datos_2$peso_tuberculo <- round(datos_2$peso_tuberculo, 2)
datos_2$salinidad_aleatorizada <- round(datos_2$salinidad_aleatorizada, 2)
datos_2
##    fertilizacion peso_tuberculo salinidad_aleatorizada
## 1        Control          93.75                   8.13
## 2        Control          75.90                   6.12
## 3        Control          76.71                   5.73
## 4        Control          87.53                   5.88
## 5        Control          87.83                   5.90
## 6        Control          70.55                   4.83
## 7        Control          71.08                   7.79
## 8        Control          76.65                   8.09
## 9        Control          80.09                   7.82
## 10       Control          71.76                   5.79
## 11       Control          84.08                   4.81
## 12       Control          85.59                   5.09
## 13          Baja         137.76                   4.88
## 14          Baja         133.11                   7.38
## 15          Baja         147.76                   5.89
## 16          Baja         150.42                   4.47
## 17          Baja         134.93                   6.62
## 18          Baja         131.07                   5.88
## 19          Baja         151.76                   4.98
## 20          Baja         123.90                   6.35
## 21          Baja         135.09                   7.36
## 22          Baja         144.43                   4.95
## 23          Baja         128.60                   7.58
## 24          Baja         136.01                   7.77
## 25         Media         179.61                   6.73
## 26         Media         189.60                   5.39
## 27         Media         184.70                   5.78
## 28         Media         180.35                   7.83
## 29         Media         187.05                   7.99
## 30         Media         181.39                   6.51
## 31         Media         194.19                   8.10
## 32         Media         179.51                   7.03
## 33         Media         177.15                   6.15
## 34         Media         179.20                   6.13
## 35         Media         195.72                   5.40
## 36         Media         194.81                   4.23
## 37          Alta         228.32                   8.14
## 38          Alta         235.21                   7.73
## 39          Alta         236.01                   4.49
## 40          Alta         225.00                   5.07
## 41          Alta         231.66                   6.19
## 42          Alta         245.56                   4.70
## 43          Alta         230.74                   7.74
## 44          Alta         229.99                   6.89
## 45          Alta         229.14                   5.00
## 46          Alta         234.76                   6.60
## 47          Alta         226.61                   6.38
## 48          Alta         225.30                   6.06
#Analisis de regresión
# Crear un gráfico de dispersión con una línea de regresión
plot(datos_2$salinidad_aleatorizada, datos$peso_tuberculo, col = datos_2$fertilizacion, pch = 19,
     main = "Peso del Tuberculo vs. Salinidad", xlab = "Salinidad del Suelo", ylab = "Peso del tuberculo (gramos)")

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
# Análisis de regresión
ggplot(data = datos_2, aes(x = salinidad_aleatorizada, y = peso_tuberculo, color = fertilizacion)) +
  geom_point() +
  geom_smooth(method = 'lm') +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Análisis de regresión
reg <- lm(datos_2$peso_tuberculo ~ datos_2$salinidad_aleatorizada)
summary(reg)
## 
## Call:
## lm(formula = datos_2$peso_tuberculo ~ datos_2$salinidad_aleatorizada)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -90.686 -41.491   4.484  44.982  84.100 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     169.553     45.617   3.717 0.000546 ***
## datos_2$salinidad_aleatorizada   -1.722      7.120  -0.242 0.809990    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 57.78 on 46 degrees of freedom
## Multiple R-squared:  0.00127,    Adjusted R-squared:  -0.02044 
## F-statistic: 0.05848 on 1 and 46 DF,  p-value: 0.81
# Calcular el ángulo en grados
atan(36.89) * 180 / pi
## [1] 88.44723
# Correlación entre las variables
cor(datos_2$peso_tuberculo, datos_2$salinidad_aleatorizada)
## [1] -0.0356327

\[Hipotesis\] \[H_{0_1}= \mu_{Tc} = \mu_{T1} = \mu_{T2}=\mu_{T3}\] \[H_{0_2}: \delta=0\] \[H_{0_c3}:\gamma=0\]

#Analisis de Covarianza
mod_cov_2 <- aov(datos_2$peso_tuberculo ~ datos_2$salinidad_aleatorizada + datos$fertilizacion)
summary(mod_cov_2)
##                                Df Sum Sq Mean Sq  F value Pr(>F)    
## datos_2$salinidad_aleatorizada  1    195     195    3.876 0.0555 .  
## datos$fertilizacion             3 151396   50465 1001.857 <2e-16 ***
## Residuals                      43   2166      50                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

\[\text{Los datos proveen evidencia a favor de la hipotesis nula, por lo tanto, la salinidad no tubo algún efecto en la respuesta}\] \[\text{Los datos proveen evidencia a favor de que la pendiente de la salinidad fué nula, por lo cual, esta no afectó la respuesta}\] \[\text{Analisis Parametrico, sin tomar en cuenta la covariable puesto que esta no tuvo ningun efecto en la respuesta}\]

#Analisis de Varianza
mod_cov_3 <- aov(datos$peso_tuberculo ~ datos$fertilizacion)
summary(mod_cov_3)
##                     Df Sum Sq Mean Sq F value Pr(>F)    
## datos$fertilizacion  3 151390   50463   938.3 <2e-16 ***
## Residuals           44   2366      54                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

\[\text{Los datos proveen evidencia a en contra de la hipotesis nula, por lo cual, algun tratamiento se comportó diferente}\]

#Supuestos para el análisis paramétrico
# Extraer los residuales del modelo ANOVA
residuales_2 <- residuals(mod_cov_3)

# Calcular la varianza de los residuales
varianza_residuales_2 <- var(residuales)

# Crear el histograma de los residuales
hist(residuales_2, main = "Histograma de Residuales", xlab = "Residuales", ylab = "Frecuencia", col = "purple2", border = "black")

# Añadir una línea vertical en la varianza de los residuales
abline(v = varianza_residuales_2, col = "black", lwd = 2)

# Añadir una leyenda con la varianza de los residuales
legend("topleft", legend = paste("Varianza = ", round(varianza_residuales_2, 4)), col = "black", lwd = 2)

#Prueba de normalidad de los residuales
# Realizar la prueba de Shapiro-Wilk en los residuales
shapiro_test_result = shapiro.test(residuales)
# Mostrar los resultados de la prueba
print(shapiro_test_result)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuales
## W = 0.95287, p-value = 0.05208
#Prueba igualdad de varianzas
# Realizar la prueba de Bartlett
  bartlett_test_result <- bartlett.test(datos$peso_tuberculo ~ datos$fertilizacion)

# Mostrar los resultados de la prueba
print(bartlett_test_result)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  datos$peso_tuberculo by datos$fertilizacion
## Bartlett's K-squared = 2.0363, df = 3, p-value = 0.5649
# Crear el diagrama de caja de los residuales (sospechas de datos atipicos)
boxplot(residuales, main = "Diagrama de Caja de Residuales", ylab = "Residuales", col = "purple", border = "black", outline = TRUE)

# Realizar la prueba de Tukey HSD
tukey_result <- TukeyHSD(mod_cov, "datos$fertilizacion")
## Warning in replications(paste("~", xx), data = mf): non-factors ignored:
## datos$salinidad
# Mostrar los resultados de la prueba de Tukey HSD
print(tukey_result)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = datos$peso_tuberculo ~ datos$salinidad + datos$fertilizacion)
## 
## $`datos$fertilizacion`
##                    diff       lwr       upr     p adj
## Baja-Control  -1.875415 -9.745043  5.994214 0.9195058
## Media-Control 16.870951  9.001323 24.740580 0.0000053
## Alta-Control  28.983890 21.114262 36.853519 0.0000000
## Media-Baja    18.746366 10.876737 26.615994 0.0000006
## Alta-Baja     30.859305 22.989676 38.728933 0.0000000
## Alta-Media    12.112939  4.243310 19.982567 0.0009602

\[\text{Hay diferencias entre los tratamientos: Media-Control, Alta-Control, Media-baja, Alta-Baja y Alta-Media}\] \[\text{Analisis no Parametrico}\]

#ANALISIS NO PARAMETRICO
# Realizar la prueba de Kruskal-Wallis
kruskal_result <- kruskal.test(datos$peso_tuberculo ~ datos$fertilizacion)

# Mostrar los resultados de la prueba
print(kruskal_result)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  datos$peso_tuberculo by datos$fertilizacion
## Kruskal-Wallis chi-squared = 44.082, df = 3, p-value = 1.45e-09
#Prueba de comparaciónes multiples de Bonferroni
# Cargar el paquete dunn.test
library(dunn.test)
## Warning: package 'dunn.test' was built under R version 4.2.3
# Realizar la prueba de Dunn (COMPARACIONES MULTIPLES NO PARAMETRICO)
dunn_result <- dunn.test(datos$peso_tuberculo, datos$fertilizacion, method = "bonferroni")
##   Kruskal-Wallis rank sum test
## 
## data: x and group
## Kruskal-Wallis chi-squared = 44.0816, df = 3, p-value = 0
## 
## 
##                            Comparison of x by group                            
##                                  (Bonferroni)                                  
## Col Mean-|
## Row Mean |       Alta       Baja    Control
## ---------+---------------------------------
##     Baja |   4.199125
##          |    0.0001*
##          |
##  Control |   6.298687   2.099562
##          |    0.0000*     0.1073
##          |
##    Media |   2.099562  -2.099562  -4.199125
##          |     0.1073     0.1073    0.0001*
## 
## alpha = 0.05
## Reject Ho if p <= alpha/2

\[\text{Hay diferencias entre los tratamientos: Alta-Baja, Alta-Control y Media-Control }\]