Apéndice H — Análisis de control de Maleza

H.1 Conteo previo (0 dda)

La Tabla H.1

Código
# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Mostrar una vista previa de los datos
#head(data)

# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

# Análisis descriptivo
summary_stats <- data %>% 
  group_by(Tratamiento) %>% 
  summarise(n = n(),
            media = mean(noPlantas0dda, na.rm = TRUE),
            mediana = median(noPlantas0dda, na.rm = TRUE),
            sd = sd(noPlantas0dda, na.rm = TRUE),
            varianza = var(noPlantas0dda, na.rm = TRUE),
            min = min(noPlantas0dda, na.rm = TRUE),
            max = max(noPlantas0dda, na.rm = TRUE))


#print(summary_stats)

# Crear y mostrar la tabla
kable(summary_stats, format = "html", caption = "Subtítulo de la tabla") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.1: Resumen descriptivo de…
Subtítulo de la tabla
Tratamiento n media mediana sd varianza min max
T1 12 43.25000 37.5 20.71067 428.9318 20 76
T2 12 35.58333 32.5 14.02892 196.8106 16 59
T3 12 40.08333 39.5 16.24505 263.9015 12 65
T4 12 33.75000 35.0 15.30968 234.3864 10 61
TR 12 34.75000 32.5 14.49843 210.2045 15 58
TS 12 37.50000 35.5 14.68766 215.7273 18 62

H.1.1 Datos sin transformar

La Tabla H.2

Código
# Análisis estadístico
# Análisis de Varianza (ANOVA) considerando el efecto de Tratamiento y bloque
model <- aov(noPlantas0dda ~ Tratamiento + bloque, data = data)
anova_results <- Anova(model)

# Mostrar los resultados del ANOVA
#print(anova_results)

# Crear y mostrar la tabla
kable(anova_results, format = "html", caption = "Anova Table (Type II tests) - Response: noPlantas0dda") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.2: Análisis de Varianza (ANOVA) considerando el efecto de Tratamiento y bloque…
Anova Table (Type II tests) - Response: noPlantas0dda
Sum Sq Df F value Pr(>F)
Tratamiento 780.402778 5 0.5953003 0.7035805
bloque 7.366259 1 0.0280953 0.8674053
Residuals 17042.217075 65 NA NA

La Tabla H.3

Código
# Función para convertir un objeto htest a data.frame
htest_to_df <- function(htest) {
  data.frame(
    Statistic = htest$statistic,
    P.Value = htest$p.value,
    Method = htest$method,
    Data.Name = htest$data.name
  )
}

# Uso de la función con la prueba Shapiro-Wilk
shapiro_test <- shapiro.test(residuals(model))
shapiro_test_df <- htest_to_df(shapiro_test)

# Crear y mostrar la tabla
kable(shapiro_test_df, format = "html", caption = "Shapiro-Wilk normality test") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.3: Análisis de normalidad de los residuos utilizando Shapiro-Wilk…
Shapiro-Wilk normality test
Statistic P.Value Method Data.Name
W 0.9656713 0.046544 Shapiro-Wilk normality test residuals(model)

La Tabla H.4

Código
# Función para combinar los medios y grupos en un solo data.frame
tukey_means_groups_to_df <- function(tukey_results) {
  means_df <- as.data.frame(tukey_results$means)
  groups_df <- as.data.frame(tukey_results$groups)
  
  combined_df <- groups_df %>%
    rownames_to_column("Treatment") %>%
    left_join(means_df %>%
                rownames_to_column("Treatment"), by = "Treatment")
   combined_df <- combined_df %>% arrange(desc(combined_df[[2]]))
  combined_df 
}


# Comparaciones múltiples usando el test de Tukey
tukey_results <- HSD.test(model, "Tratamiento")

# Mostrar los resultados del test de Tukey
#print(tukey_results)

# Función para convertir las estadísticas y parámetros a data.frame

stats_df <- as.data.frame(tukey_results$statistics)
params_df <- as.data.frame(tukey_results$parameters)



# Convertir los resultados a data.frames
tukey_means_groups_df <- tukey_means_groups_to_df(tukey_results)

# Crear y mostrar la tabla de estadísticas
kable(stats_df, format = "html", caption = "Tukey Test Statistics") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.4: Comparaciones múltiples usando el test de Tukey…
Tukey Test Statistics
MSerror Df Mean CV MSD
262.188 65 37.48611 43.19525 19.41112

La Tabla H.5

Código
# Crear y mostrar la tabla de parámetros
kable(params_df, format = "html", caption = "Tukey Test Parameters") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.5: Comparaciones múltiples usando el test de Tukey…
Tukey Test Parameters
test name.t ntr StudentizedRange alpha
Tukey Tratamiento 6 4.152742 0.05

La Tabla H.6

Código
# Crear y mostrar la tabla de medios y grupos
kable(tukey_means_groups_df, format = "html", caption = "Tukey Test Means and Groups") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.6: Comparaciones múltiples usando el test de Tukey…
Tukey Test Means and Groups
Treatment noPlantas0dda.x groups noPlantas0dda.y std r se Min Max Q25 Q50 Q75
T1 43.25000 a 43.25000 20.71067 12 4.674291 20 76 24.75 37.5 61.00
T3 40.08333 a 40.08333 16.24505 12 4.674291 12 65 31.25 39.5 52.75
TS 37.50000 a 37.50000 14.68766 12 4.674291 18 62 25.00 35.5 50.25
T2 35.58333 a 35.58333 14.02892 12 4.674291 16 59 28.50 32.5 46.75
TR 34.75000 a 34.75000 14.49843 12 4.674291 15 58 22.75 32.5 44.50
T4 33.75000 a 33.75000 15.30968 12 4.674291 10 61 23.50 35.0 40.25

H.1.2 Transformación de Box-Cox

Código
# Cargar las librerías necesarias
library(MASS)
library(car)

# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

# Aplicar la transformación de Box-Cox
boxcox_results <- boxcox(noPlantas0dda ~ Tratamiento + bloque, data = data, lambda = seq(-2, 2, 0.1))

# Encontrar el mejor lambda
best_lambda <- boxcox_results$x[which.max(boxcox_results$y)]
#print(paste("Mejor lambda:", best_lambda))

# Transformar los datos usando el mejor lambda
if (best_lambda == 0) {
  data$transformed_noPlantas0dda <- log(data$noPlantas0dda)
} else {
  data$transformed_noPlantas0dda <- (data$noPlantas0dda^best_lambda - 1) / best_lambda
}
Figura H.1: Gráfico de…
Código
# Ajustar el modelo con los datos transformados
model_transformed <- aov(transformed_noPlantas0dda ~ Tratamiento + bloque, data = data)

# Verificación de supuestos con los datos transformados
shapiro_test_transformed <- shapiro.test(residuals(model_transformed))
levene_test_transformed <- car::leveneTest(transformed_noPlantas0dda ~ Tratamiento, data = data)

# Resultados del modelo y verificación de supuestos
anova_results_transformed <- Anova(model_transformed)

#print(anova_results_transformed)
# Crear y mostrar la tabla
kable(anova_results_transformed, format = "html", caption = "Anova Table (Type II tests) - Response: noPlantas0dda") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.7: Comparaciones múltiples usando el test de Tukey…
Anova Table (Type II tests) - Response: noPlantas0dda
Sum Sq Df F value Pr(>F)
Tratamiento 14.5132790 5 0.5126642 0.7657074
bloque 0.0017188 1 0.0003036 0.9861524
Residuals 368.0237973 65 NA NA
Código
#print(shapiro_test_transformed)
shapiro_test_df <- htest_to_df(shapiro_test_transformed)
# Crear y mostrar la tabla
kable(shapiro_test_df, format = "html", caption = "Shapiro-Wilk normality test") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.8: Comparaciones múltiples usando el test de Tukey…
Shapiro-Wilk normality test
Statistic P.Value Method Data.Name
W 0.9708748 0.0932019 Shapiro-Wilk normality test residuals(model_transformed)
Código
print(levene_test_transformed)
Tabla H.9: Comparaciones múltiples usando el test de Tukey…
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  5  0.3396 0.8871
      66               
Código
# Análisis de independencia de los residuos transformados
plot(residuals(model_transformed) ~ fitted(model_transformed))
abline(h = 0, col = "red")
Tabla H.10: Comparaciones múltiples usando el test de Tukey…

Código
# Comparaciones múltiples usando el test de Tukey en datos transformados
tukey_results_transformed <- HSD.test(model_transformed, "Tratamiento")
#print(tukey_results_transformed)
# Función para convertir las estadísticas y parámetros a data.frame

stats_df <- as.data.frame(tukey_results_transformed$statistics)
params_df <- as.data.frame(tukey_results_transformed$parameters)

# Convertir los resultados a data.frames
tukey_means_groups_df <- tukey_means_groups_to_df(tukey_results_transformed)

# Crear y mostrar la tabla de estadísticas
kable(stats_df, format = "html", caption = "Tukey Test Statistics") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.11: Comparaciones múltiples usando el test de Tukey…
Tukey Test Statistics
MSerror Df Mean CV MSD
5.661905 65 9.173888 25.93748 2.852499
Código
# Crear y mostrar la tabla de parámetros
kable(params_df, format = "html", caption = "Tukey Test Parameters") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.12: Comparaciones múltiples usando el test de Tukey…
Tukey Test Parameters
test name.t ntr StudentizedRange alpha
Tukey Tratamiento 6 4.152742 0.05
Código
# Crear y mostrar la tabla de medios y grupos
kable(tukey_means_groups_df, format = "html", caption = "Tukey Test Means and Groups") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "#ae8f5fff", background = "#0a231fff")
Tabla H.13: Comparaciones múltiples usando el test de Tukey…
Tukey Test Means and Groups
Treatment transformed_noPlantas0dda.x groups transformed_noPlantas0dda.y std r se Min Max Q25 Q50 Q75
T1 9.916343 a 9.916343 2.723103 12 0.6868955 6.505403 13.94652 7.406121 9.421287 12.377497
T3 9.544688 a 9.544688 2.432420 12 0.6868955 4.676166 12.81849 8.498041 9.713849 11.433139
TS 9.226914 a 9.226914 2.166952 12 0.6868955 6.091775 12.49338 7.445240 9.150333 11.130950
T2 8.949846 a 8.949846 2.130288 12 0.6868955 5.652728 12.15973 8.042877 8.695980 10.691653
TR 8.811846 a 8.811846 2.184570 12 0.6868955 5.422152 12.04651 7.039068 8.695980 10.396671
T4 8.593692 a 8.593692 2.473613 12 0.6868955 4.121527 12.38314 7.163799 9.075221 9.816479

H.1.3 Resumen gráfico

Código
library(ggdist)
library(ggtext)

# Preparar los datos del test de Tukey
tukey_groups <- tukey_results_transformed$groups
tukey_groups$Tratamiento <- rownames(tukey_groups)
rownames(tukey_groups) <- NULL

# Unir los resultados del test de Tukey con los summary_stats
summary_stats <- summary_stats %>%
  left_join(tukey_groups, by = "Tratamiento")

# Ordenar el eje Y de manera descendente
data$Tratamiento <- factor(data$Tratamiento, levels = summary_stats$Tratamiento[order(summary_stats$media)])

graficoNoPlantas0ddaTUKEY <- data %>%
  ggplot(aes(x=noPlantas0dda, y = Tratamiento, fill = Tratamiento)) +
  geom_boxplot(width = 0.1) +
  geom_dots(
    side = 'bottom',
    position = position_nudge(y = -0.075),
    height = 0.55
  ) +
  stat_slab(
    position = position_nudge(y = 0.075),
    height = 0.55,
    trim = FALSE,
    alpha = 0.6
  ) +
  labs(
    title= "",
    y = element_blank(),
    x = "Número de plantas (conteo previo)"
  ) +
  theme_minimal(
    base_size = 20)+
  theme(
    text = element_text(family = "montserrat"),
    panel.grid.minor = element_blank(),
    legend.position = 'none'
  )+
  geom_text(data = summary_stats, aes(x = 95, y = Tratamiento, label = paste0(round(media, 2), "  ", groups)), 
            hjust = -0.2, size = 3, color = "#0a231fff", fontface = "bold", hjust = 1)

graficoNoPlantas0ddaTUKEY
#ggsave("./Plots/graficoNoPlantas0ddaTUKEY.png", plot = graficoNoPlantas0ddaTUKEY, width=1920, height=1080, units = "px")
Tabla H.14: Gráfico de…

H.2 Conteo final (28 dda)

Descriptivo

Código
# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Mostrar una vista previa de los datos
#head(data)

# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

# Análisis descriptivo
summary_stats <- data %>% 
  group_by(Tratamiento) %>% 
  summarise(n = n(),
            media = mean(noPlantas28dda, na.rm = TRUE),
            mediana = median(noPlantas28dda, na.rm = TRUE),
            sd = sd(noPlantas28dda, na.rm = TRUE),
            varianza = var(noPlantas28dda, na.rm = TRUE),
            min = min(noPlantas28dda, na.rm = TRUE),
            max = max(noPlantas28dda, na.rm = TRUE))


print(summary_stats)
# A tibble: 6 × 8
  Tratamiento     n media mediana    sd varianza   min   max
  <fct>       <int> <dbl>   <dbl> <dbl>    <dbl> <dbl> <dbl>
1 T1             12  19.6    19   10.3     107.      4    40
2 T2             12  12.8    12.5  9.67     93.4     0    27
3 T3             12  14.2    14   10.9     120.      0    32
4 T4             12  16.8    16    9.53     90.8     2    34
5 TR             12  12.7    11   10.4     107.      1    30
6 TS             12  29.8    31.5 11.0     121.     10    43

H.2.1 Datos sin transformar

Análisis de Varianza

# Análisis estadístico
# Análisis de Varianza (ANOVA) considerando el efecto de Tratamiento y bloque
model <- aov(noPlantas28dda ~ Tratamiento + bloque, data = data)
anova_results <- Anova(model)

# Mostrar los resultados del ANOVA
print(anova_results)
Anova Table (Type II tests)

Response: noPlantas28dda
            Sum Sq Df F value   Pr(>F)    
Tratamiento 2550.9  5  4.7501 0.000925 ***
bloque        50.2  1  0.4672 0.496694    
Residuals   6981.2 65                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Análisis de normalidad de los residuos utilizando Shapiro-Wilk

shapiro_test <- shapiro.test(residuals(model))
print(shapiro_test)

    Shapiro-Wilk normality test

data:  residuals(model)
W = 0.9629, p-value = 0.03228

Comparaciones múltiples

# Comparaciones múltiples usando el test de Tukey
tukey_results <- HSD.test(model, "Tratamiento")

# Mostrar los resultados del test de Tukey
print(tukey_results)
$statistics
   MSerror Df     Mean       CV      MSD
  107.4036 65 17.65278 58.70788 12.42378

$parameters
   test      name.t ntr StudentizedRange alpha
  Tukey Tratamiento   6         4.152742  0.05

$means
   noPlantas28dda       std  r       se Min Max   Q25  Q50   Q75
T1       19.58333 10.334922 12 2.991705   4  40 11.75 19.0 27.00
T2       12.83333  9.665622 12 2.991705   0  27  4.50 12.5 22.25
T3       14.25000 10.947187 12 2.991705   0  32  5.75 14.0 20.75
T4       16.75000  9.526279 12 2.991705   2  34 11.25 16.0 24.25
TR       12.66667 10.360180 12 2.991705   1  30  3.75 11.0 22.50
TS       29.83333 11.002754 12 2.991705  10  43 22.25 31.5 38.25

$comparison
NULL

$groups
   noPlantas28dda groups
TS       29.83333      a
T1       19.58333     ab
T4       16.75000      b
T3       14.25000      b
T2       12.83333      b
TR       12.66667      b

attr(,"class")
[1] "group"

H.2.2 Transformación de Box-Cox

# Cargar las librerías necesarias
library(MASS)
library(car)

# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

data$noPlantas28dda <- data$noPlantas28dda + 1

# Aplicar la transformación de Box-Cox
boxcox_results <- boxcox(noPlantas28dda ~ Tratamiento + bloque, data = data, lambda = seq(-2, 2, 0.1))

# Encontrar el mejor lambda
best_lambda <- boxcox_results$x[which.max(boxcox_results$y)]
print(paste("Mejor lambda:", best_lambda))
[1] "Mejor lambda: 0.666666666666667"
# Transformar los datos usando el mejor lambda
if (best_lambda == 0) {
  data$transformed_noPlantas28dda <- log(data$noPlantas28dda)
} else {
  data$transformed_noPlantas28dda <- (data$noPlantas28dda^best_lambda - 1) / best_lambda
}

# Ajustar el modelo con los datos transformados
model_transformed <- aov(transformed_noPlantas28dda ~ Tratamiento + bloque, data = data)

# Verificación de supuestos con los datos transformados
shapiro_test_transformed <- shapiro.test(residuals(model_transformed))
levene_test_transformed <- car::leveneTest(transformed_noPlantas28dda ~ Tratamiento, data = data)

# Resultados del modelo y verificación de supuestos
anova_results_transformed <- Anova(model_transformed)
print(anova_results_transformed)
Anova Table (Type II tests)

Response: transformed_noPlantas28dda
             Sum Sq Df F value  Pr(>F)   
Tratamiento  370.21  5  4.2941 0.00195 **
bloque         8.43  1  0.4890 0.48688   
Residuals   1120.77 65                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
print(shapiro_test_transformed)

    Shapiro-Wilk normality test

data:  residuals(model_transformed)
W = 0.9615, p-value = 0.02686
print(levene_test_transformed)
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  5  0.4579 0.8061
      66               
# Análisis de independencia de los residuos transformados
plot(residuals(model_transformed) ~ fitted(model_transformed))
abline(h = 0, col = "red")

# Comparaciones múltiples usando el test de Tukey en datos transformados
tukey_results_transformed <- HSD.test(model_transformed, "Tratamiento")
print(tukey_results_transformed)
$statistics
   MSerror Df     Mean       CV      MSD
  17.24268 65 8.516729 48.75617 4.977906

$parameters
   test      name.t ntr StudentizedRange alpha
  Tukey Tratamiento   6         4.152742  0.05

$means
   transformed_noPlantas28dda      std  r       se       Min      Max       Q25
T1                   9.458596 3.823438 12 1.198704 2.8860266 16.33530  6.685428
T2                   6.619040 4.261813 12 1.198704 0.0000000 12.33131  3.159609
T3                   7.130703 4.670202 12 1.198704 0.0000000 13.93241  3.854942
T4                   8.359369 3.817102 12 1.198704 1.6201257 14.54981  6.407124
TR                   6.503396 4.465421 12 1.198704 0.8811016 13.30241  2.734461
TS                  13.029270 3.681345 12 1.198704 5.9191312 17.19504 10.694222
         Q50      Q75
T1  9.524301 12.33131
T2  6.971769 10.71865
T3  7.618792 10.16407
T4  8.413417 11.40976
TR  6.356147 10.80473
TS 13.766076 15.82388

$comparison
NULL

$groups
   transformed_noPlantas28dda groups
TS                  13.029270      a
T1                   9.458596     ab
T4                   8.359369     ab
T3                   7.130703      b
T2                   6.619040      b
TR                   6.503396      b

attr(,"class")
[1] "group"

H.2.3 Análisis no paramétrico

# Test de Kruskal-Wallis
kruskal_test <- kruskal.test(noPlantas28dda ~ Tratamiento, data = data)
print(kruskal_test)

    Kruskal-Wallis rank sum test

data:  noPlantas28dda by Tratamiento
Kruskal-Wallis chi-squared = 16.333, df = 5, p-value = 0.005954

Test de Dunn

library(FSA)
Warning: package 'FSA' was built under R version 4.2.3
Registered S3 methods overwritten by 'FSA':
  method       from
  confint.boot car 
  hist.boot    car 
## FSA v0.9.5. See citation('FSA') if used in publication.
## Run fishR() for related website and fishR('IFAR') for related book.

Attaching package: 'FSA'
The following object is masked from 'package:car':

    bootCase
dunn_test <- dunnTest(noPlantas28dda ~ Tratamiento , data = data, method = "bonferroni")
print(dunn_test)
Dunn (1964) Kruskal-Wallis multiple comparison
  p-values adjusted with the Bonferroni method.
   Comparison           Z      P.unadj       P.adj
1     T1 - T2  1.43489650 0.1513165930 1.000000000
2     T1 - T3  1.05909027 0.2895586688 1.000000000
3     T2 - T3 -0.37580623 0.7070609586 1.000000000
4     T1 - T4  0.49294063 0.6220545345 1.000000000
5     T2 - T4 -0.94195587 0.3462152360 1.000000000
6     T3 - T4 -0.56614964 0.5712920610 1.000000000
7     T1 - TR  1.51298611 0.1302831881 1.000000000
8     T2 - TR  0.07808961 0.9377567756 1.000000000
9     T3 - TR  0.45389583 0.6499038038 1.000000000
10    T4 - TR  1.02004547 0.3077068957 1.000000000
11    T1 - TS -1.89367293 0.0582684362 0.874026543
12    T2 - TS -3.32856943 0.0008729324 0.013093986
13    T3 - TS -2.95276321 0.0031494345 0.047241517
14    T4 - TS -2.38661357 0.0170043545 0.255065317
15    TR - TS -3.40665904 0.0006576322 0.009864484

H.2.4 Resumen gráfico

Código
library(ggdist)
library(ggtext)

# Preparar los datos del test de Tukey
tukey_groups <- tukey_results_transformed$groups
tukey_groups$Tratamiento <- rownames(tukey_groups)
rownames(tukey_groups) <- NULL

# Unir los resultados del test de Tukey con los summary_stats
summary_stats <- summary_stats %>%
  left_join(tukey_groups, by = "Tratamiento")

# Ordenar el eje Y de manera descendente
data$Tratamiento <- factor(data$Tratamiento, levels = summary_stats$Tratamiento[order(summary_stats$media)])

graficoNoPlantas28ddaTUKEY <- data %>%
  ggplot(aes(x=noPlantas28dda, y = Tratamiento, fill = Tratamiento)) +
  geom_boxplot(width = 0.1) +
  geom_dots(
    side = 'bottom',
    position = position_nudge(y = -0.075),
    height = 0.55
  ) +
  stat_slab(
    position = position_nudge(y = 0.075),
    height = 0.55,
    trim = FALSE,
    alpha = 0.6
  ) +
  labs(
    title= "",
    y = element_blank(),
    x = "Número de plantas (28 dda)"
  ) +
  theme_minimal(
    base_size = 20)+
  theme(
    text = element_text(family = "montserrat"),
    panel.grid.minor = element_blank(),
    legend.position = 'none'
  )+
  geom_text(data = summary_stats, aes(x = 50, y = Tratamiento, label = paste0(round(media, 2), "  ", groups)), 
            hjust = -0.2, size = 3, color = "#0a231fff", fontface = "bold", hjust = 1)

graficoNoPlantas28ddaTUKEY
#ggsave("./Plots/graficoNoPlantas28ddaTUKEY.png", plot = graficoNoPlantas28ddaTUKEY, width=1920, height=1080, units = "px")
Tabla H.15: Gráfico de…

H.3 Cambio en número de plantas (28 dda)

Descriptivo

# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Mostrar una vista previa de los datos
head(data)
# A tibble: 6 × 28
  cambioNoPlantas cambioAltura Tratamiento bloque Parcela Rendimiento
            <dbl>        <dbl> <chr>        <dbl> <chr>         <dbl>
1             -34           15 T1               1 A1             4130
2              -6            0 T1               4 A4             5270
3             -37           20 T1               7 B8             6050
4             -40           25 T1              10 B10            5700
5             -33            0 T1               2 C3             5450
6             -13           15 T1               5 C6             4960
# ℹ 22 more variables: noPlantas0dda <dbl>, noPlantas14dda <dbl>,
#   noPlantas19dda <dbl>, noPlantas28dda <dbl>, hMax0dda <dbl>,
#   hMax14dda <dbl>, hMax19dda <dbl>, hMax28dda <dbl>, Columna <chr>,
#   Fila <dbl>, tiempo0dda <dbl>, tiempo14dda <dbl>, tiempo19dda <dbl>,
#   tiempo28dda <dbl>, tiempo0ddaBI <dbl>, cober0dda <dbl>, cober14dda <dbl>,
#   cober19dda <dbl>, cober28dda <dbl>, cloro14dda <dbl>, cloro19dda <dbl>,
#   cloro28dda <dbl>
# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

# Análisis descriptivo
summary_stats <- data %>% 
  group_by(Tratamiento) %>% 
  summarise(n = n(),
            media = mean(cambioNoPlantas, na.rm = TRUE),
            mediana = median(cambioNoPlantas, na.rm = TRUE),
            sd = sd(cambioNoPlantas, na.rm = TRUE),
            varianza = var(cambioNoPlantas, na.rm = TRUE),
            min = min(cambioNoPlantas, na.rm = TRUE),
            max = max(cambioNoPlantas, na.rm = TRUE))


print(summary_stats)
# A tibble: 6 × 8
  Tratamiento     n  media mediana    sd varianza   min   max
  <fct>       <int>  <dbl>   <dbl> <dbl>    <dbl> <dbl> <dbl>
1 T1             12 -23.7    -21    17.5     307.   -60     0
2 T2             12 -22.8    -25    12.4     154.   -37     7
3 T3             12 -25.8    -23.5  10.4     108.   -46   -11
4 T4             12 -17      -16.5  13.4     178.   -37     0
5 TR             12 -22.1    -20    11.7     136.   -45     1
6 TS             12  -7.67    -8    10.0     100.   -23     5

H.3.1 Datos sin transformar

Análisis de Varianza

# Análisis estadístico
# Análisis de Varianza (ANOVA) considerando el efecto de Tratamiento y bloque
model <- aov(cambioNoPlantas ~ Tratamiento + bloque, data = data)
anova_results <- Anova(model)

# Mostrar los resultados del ANOVA
print(anova_results)
Anova Table (Type II tests)

Response: cambioNoPlantas
             Sum Sq Df F value  Pr(>F)  
Tratamiento  2643.8  5  3.1838 0.01242 *
bloque         19.1  1  0.1150 0.73564  
Residuals   10795.1 65                  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Análisis de normalidad de los residuos utilizando Shapiro-Wilk

shapiro_test <- shapiro.test(residuals(model))
print(shapiro_test)

    Shapiro-Wilk normality test

data:  residuals(model)
W = 0.99027, p-value = 0.857

Comparaciones múltiples

# Comparaciones múltiples usando el test de Tukey
tukey_results <- HSD.test(model, "Tratamiento")

# Mostrar los resultados del test de Tukey
print(tukey_results)
$statistics
  MSerror Df      Mean        CV    MSD
  166.078 65 -19.83333 -64.97711 15.449

$parameters
   test      name.t ntr StudentizedRange alpha
  Tukey Tratamiento   6         4.152742  0.05

$means
   cambioNoPlantas      std  r       se Min Max    Q25   Q50    Q75
T1      -23.666667 17.51536 12 3.720193 -60   0 -34.75 -21.0 -10.75
T2      -22.750000 12.40326 12 3.720193 -37   7 -31.00 -25.0 -16.75
T3      -25.833333 10.37333 12 3.720193 -46 -11 -31.00 -23.5 -18.75
T4      -17.000000 13.35528 12 3.720193 -37   0 -26.25 -16.5  -6.25
TR      -22.083333 11.67327 12 3.720193 -45   1 -28.25 -20.0 -17.50
TS       -7.666667 10.01211 12 3.720193 -23   5 -15.25  -8.0   2.25

$comparison
NULL

$groups
   cambioNoPlantas groups
TS       -7.666667      a
T4      -17.000000     ab
TR      -22.083333     ab
T2      -22.750000     ab
T1      -23.666667      b
T3      -25.833333      b

attr(,"class")
[1] "group"

H.3.2 Resumen gráfico

Código
#library(ggdist)
#library(ggtext)

# Preparar los datos del test de Tukey
tukey_groups <- tukey_results$groups
tukey_groups$Tratamiento <- rownames(tukey_groups)
rownames(tukey_groups) <- NULL

# Unir los resultados del test de Tukey con los summary_stats
summary_stats <- summary_stats %>%
  left_join(tukey_groups, by = "Tratamiento")

# Ordenar el eje Y de manera descendente
data$Tratamiento <- factor(data$Tratamiento, levels = summary_stats$Tratamiento[order(summary_stats$media)])

graficocambioNoPlantasTUKEY <- data %>%
  ggplot(aes(x=cambioNoPlantas, y = Tratamiento, fill = Tratamiento)) +
  geom_boxplot(width = 0.1) +
  geom_dots(
    side = 'bottom',
    position = position_nudge(y = -0.075),
    height = 0.55
  ) +
  stat_slab(
    position = position_nudge(y = 0.075),
    height = 0.55,
    trim = FALSE,
    alpha = 0.6
  ) +
  labs(
    title= "",
    y = element_blank(),
    x = "Número de plantas (28 dda)"
  ) +
  theme_minimal(
    base_size = 20)+
  theme(
    text = element_text(family = "montserrat"),
    panel.grid.minor = element_blank(),
    legend.position = 'none'
  )+
  geom_text(data = summary_stats, aes(x = 10, y = Tratamiento, label = paste0(round(media, 2), "  ", groups)), 
            hjust = -0.2, size = 3, color = "#0a231fff", fontface = "bold", hjust = 1)

graficocambioNoPlantasTUKEY
#ggsave("./Plots/graficocambioNoPlantasTUKEY.png", plot = graficocambioNoPlantasTUKEY, width=1920, height=1080, units = "px")
Tabla H.16: Gráfico de…

H.4 Altura máxima (0 dda)

Descriptivo

# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Mostrar una vista previa de los datos
head(data)
# A tibble: 6 × 28
  cambioNoPlantas cambioAltura Tratamiento bloque Parcela Rendimiento
            <dbl>        <dbl> <chr>        <dbl> <chr>         <dbl>
1             -34           15 T1               1 A1             4130
2              -6            0 T1               4 A4             5270
3             -37           20 T1               7 B8             6050
4             -40           25 T1              10 B10            5700
5             -33            0 T1               2 C3             5450
6             -13           15 T1               5 C6             4960
# ℹ 22 more variables: noPlantas0dda <dbl>, noPlantas14dda <dbl>,
#   noPlantas19dda <dbl>, noPlantas28dda <dbl>, hMax0dda <dbl>,
#   hMax14dda <dbl>, hMax19dda <dbl>, hMax28dda <dbl>, Columna <chr>,
#   Fila <dbl>, tiempo0dda <dbl>, tiempo14dda <dbl>, tiempo19dda <dbl>,
#   tiempo28dda <dbl>, tiempo0ddaBI <dbl>, cober0dda <dbl>, cober14dda <dbl>,
#   cober19dda <dbl>, cober28dda <dbl>, cloro14dda <dbl>, cloro19dda <dbl>,
#   cloro28dda <dbl>
# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

# Análisis descriptivo
summary_stats <- data %>% 
  group_by(Tratamiento) %>% 
  summarise(n = n(),
            media = mean(hMax0dda, na.rm = TRUE),
            mediana = median(hMax0dda, na.rm = TRUE),
            sd = sd(hMax0dda, na.rm = TRUE),
            varianza = var(hMax0dda, na.rm = TRUE),
            min = min(hMax0dda, na.rm = TRUE),
            max = max(hMax0dda, na.rm = TRUE))


print(summary_stats)
# A tibble: 6 × 8
  Tratamiento     n media mediana    sd varianza   min   max
  <fct>       <int> <dbl>   <dbl> <dbl>    <dbl> <dbl> <dbl>
1 T1             12  19      20    5.15     26.5    10    25
2 T2             12  20.7    20.5  4.16     17.3    15    25
3 T3             12  18.8    19    4.63     21.5    11    25
4 T4             12  17.7    15    4.85     23.5    10    28
5 TR             12  17.2    17.5  4.56     20.8     7    25
6 TS             12  16.7    15    4.44     19.7    10    25

H.4.1 Datos sin transformar

Análisis de Varianza

# Análisis estadístico
# Análisis de Varianza (ANOVA) considerando el efecto de Tratamiento y bloque
model <- aov(hMax0dda ~ Tratamiento + bloque, data = data)
anova_results <- Anova(model)

# Mostrar los resultados del ANOVA
print(anova_results)
Anova Table (Type II tests)

Response: hMax0dda
            Sum Sq Df F value  Pr(>F)  
Tratamiento  125.5  5  1.2221 0.30889  
bloque        87.5  1  4.2604 0.04301 *
Residuals   1335.0 65                  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Análisis de normalidad de los residuos utilizando Shapiro-Wilk

shapiro_test <- shapiro.test(residuals(model))
print(shapiro_test)

    Shapiro-Wilk normality test

data:  residuals(model)
W = 0.97751, p-value = 0.2241

Comparaciones múltiples

# Comparaciones múltiples usando el test de Tukey
tukey_results <- HSD.test(model, "Tratamiento")

# Mostrar los resultados del test de Tukey
print(tukey_results)
$statistics
   MSerror Df     Mean       CV      MSD
  20.53844 65 18.33333 24.71965 5.432854

$parameters
   test      name.t ntr StudentizedRange alpha
  Tukey Tratamiento   6         4.152742  0.05

$means
   hMax0dda      std  r       se Min Max   Q25  Q50   Q75
T1 19.00000 5.152228 12 1.308257  10  25 17.25 20.0 21.25
T2 20.66667 4.163332 12 1.308257  15  25 17.25 20.5 25.00
T3 18.75000 4.634358 12 1.308257  11  25 15.00 19.0 22.50
T4 17.66667 4.849242 12 1.308257  10  28 15.00 15.0 20.25
TR 17.25000 4.555217 12 1.308257   7  25 15.00 17.5 20.00
TS 16.66667 4.438127 12 1.308257  10  25 15.00 15.0 20.00

$comparison
NULL

$groups
   hMax0dda groups
T2 20.66667      a
T1 19.00000      a
T3 18.75000      a
T4 17.66667      a
TR 17.25000      a
TS 16.66667      a

attr(,"class")
[1] "group"

H.4.2 Resumen gráfico

Código
#library(ggdist)
#library(ggtext)

# Preparar los datos del test de Tukey
tukey_groups <- tukey_results$groups
tukey_groups$Tratamiento <- rownames(tukey_groups)
rownames(tukey_groups) <- NULL

# Unir los resultados del test de Tukey con los summary_stats
summary_stats <- summary_stats %>%
  left_join(tukey_groups, by = "Tratamiento")

# Ordenar el eje Y de manera descendente
data$Tratamiento <- factor(data$Tratamiento, levels = summary_stats$Tratamiento[order(summary_stats$media)])

graficohMax0ddaTUKEY <- data %>%
  ggplot(aes(x=hMax0dda, y = Tratamiento, fill = Tratamiento)) +
  geom_boxplot(width = 0.1) +
  geom_dots(
    side = 'bottom',
    position = position_nudge(y = -0.075),
    height = 0.55
  ) +
  stat_slab(
    position = position_nudge(y = 0.075),
    height = 0.55,
    trim = FALSE,
    alpha = 0.6
  ) +
  labs(
    title= "",
    y = element_blank(),
    x = "Altura máxima (cm; 0 dda)"
  ) +
  theme_minimal(
    base_size = 20)+
  theme(
    text = element_text(family = "montserrat"),
    panel.grid.minor = element_blank(),
    legend.position = 'none'
  )+
  geom_text(data = summary_stats, aes(x = 30, y = Tratamiento, label = paste0(round(media, 2), "  ", groups)), 
            hjust = -0.2, size = 3, color = "#0a231fff", fontface = "bold", hjust = 1)

graficohMax0ddaTUKEY
ggsave("./Plots/graficohMax0ddaTUKEY.png", plot = graficohMax0ddaTUKEY, width=1920, height=1080, units = "px")
Tabla H.17: Gráfico de…

H.5 Altura máxima (28 dda)

Descriptivo

# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Mostrar una vista previa de los datos
head(data)
# A tibble: 6 × 28
  cambioNoPlantas cambioAltura Tratamiento bloque Parcela Rendimiento
            <dbl>        <dbl> <chr>        <dbl> <chr>         <dbl>
1             -34           15 T1               1 A1             4130
2              -6            0 T1               4 A4             5270
3             -37           20 T1               7 B8             6050
4             -40           25 T1              10 B10            5700
5             -33            0 T1               2 C3             5450
6             -13           15 T1               5 C6             4960
# ℹ 22 more variables: noPlantas0dda <dbl>, noPlantas14dda <dbl>,
#   noPlantas19dda <dbl>, noPlantas28dda <dbl>, hMax0dda <dbl>,
#   hMax14dda <dbl>, hMax19dda <dbl>, hMax28dda <dbl>, Columna <chr>,
#   Fila <dbl>, tiempo0dda <dbl>, tiempo14dda <dbl>, tiempo19dda <dbl>,
#   tiempo28dda <dbl>, tiempo0ddaBI <dbl>, cober0dda <dbl>, cober14dda <dbl>,
#   cober19dda <dbl>, cober28dda <dbl>, cloro14dda <dbl>, cloro19dda <dbl>,
#   cloro28dda <dbl>
# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

# Análisis descriptivo
summary_stats <- data %>% 
  group_by(Tratamiento) %>% 
  summarise(n = n(),
            media = mean(hMax28dda, na.rm = TRUE),
            mediana = median(hMax28dda, na.rm = TRUE),
            sd = sd(hMax28dda, na.rm = TRUE),
            varianza = var(hMax28dda, na.rm = TRUE),
            min = min(hMax28dda, na.rm = TRUE),
            max = max(hMax28dda, na.rm = TRUE))


print(summary_stats)
# A tibble: 6 × 8
  Tratamiento     n media mediana    sd varianza   min   max
  <fct>       <int> <dbl>   <dbl> <dbl>    <dbl> <dbl> <dbl>
1 T1             12  28.3    25   11.3     129.     15    50
2 T2             12  25      25   15.1     227.      0    50
3 T3             12  18.1    17.5 11.3     128.      0    40
4 T4             12  25      25    8.53     72.7    10    40
5 TR             12  20.2    17.5 13.4     179.      2    50
6 TS             12  58.8    60   16.3     264.     30    80

H.5.1 Datos sin transformar

Análisis de Varianza

# Análisis estadístico
# Análisis de Varianza (ANOVA) considerando el efecto de Tratamiento y bloque
model <- aov(hMax28dda ~ Tratamiento + bloque, data = data)
anova_results <- Anova(model)

# Mostrar los resultados del ANOVA
print(anova_results)
Anova Table (Type II tests)

Response: hMax28dda
             Sum Sq Df F value    Pr(>F)    
Tratamiento 13372.9  5 16.2251 2.328e-10 ***
bloque        286.7  1  1.7394    0.1918    
Residuals   10714.8 65                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Análisis de normalidad de los residuos utilizando Shapiro-Wilk

shapiro_test <- shapiro.test(residuals(model))
print(shapiro_test)

    Shapiro-Wilk normality test

data:  residuals(model)
W = 0.99401, p-value = 0.9831

Análisis de homogeneidad de varianzas utilizando la prueba de Levene

levene_test <- car::leveneTest(hMax28dda ~ Tratamiento, data = data)
print(levene_test)
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  5  1.0018 0.4237
      66               

Análisis de independencia de los residuos

plot(residuals(model) ~ fitted(model))
abline(h = 0, col = "red")

Comparaciones múltiples

# Comparaciones múltiples usando el test de Tukey
tukey_results <- HSD.test(model, "Tratamiento")

# Mostrar los resultados del test de Tukey
print(tukey_results)
$statistics
   MSerror Df     Mean      CV      MSD
  164.8426 65 29.22222 43.9361 15.39143

$parameters
   test      name.t ntr StudentizedRange alpha
  Tukey Tratamiento   6         4.152742  0.05

$means
   hMax28dda       std  r      se Min Max   Q25  Q50   Q75
T1  28.33333 11.348475 12 3.70633  15  50 20.00 25.0 36.25
T2  25.00000 15.075567 12 3.70633   0  50 13.75 25.0 32.50
T3  18.08333 11.301314 12 3.70633   0  40 13.75 17.5 25.00
T4  25.00000  8.528029 12 3.70633  10  40 20.00 25.0 30.00
TR  20.16667 13.394933 12 3.70633   2  50 13.75 17.5 26.25
TS  58.75000 16.254370 12 3.70633  30  80 50.00 60.0 70.00

$comparison
NULL

$groups
   hMax28dda groups
TS  58.75000      a
T1  28.33333      b
T2  25.00000      b
T4  25.00000      b
TR  20.16667      b
T3  18.08333      b

attr(,"class")
[1] "group"

H.5.2 Resumen gráfico

Código
#library(ggdist)
#library(ggtext)

# Preparar los datos del test de Tukey
tukey_groups <- tukey_results$groups
tukey_groups$Tratamiento <- rownames(tukey_groups)
rownames(tukey_groups) <- NULL

# Unir los resultados del test de Tukey con los summary_stats
summary_stats <- summary_stats %>%
  left_join(tukey_groups, by = "Tratamiento")

# Ordenar el eje Y de manera descendente
data$Tratamiento <- factor(data$Tratamiento, levels = summary_stats$Tratamiento[order(summary_stats$media)])

graficohMax28ddaTUKEY <- data %>%
  ggplot(aes(x=hMax28dda, y = Tratamiento, fill = Tratamiento)) +
  geom_boxplot(width = 0.1) +
  geom_dots(
    side = 'bottom',
    position = position_nudge(y = -0.075),
    height = 0.55
  ) +
  stat_slab(
    position = position_nudge(y = 0.075),
    height = 0.55,
    trim = FALSE,
    alpha = 0.6
  ) +
  labs(
    title= "",
    y = element_blank(),
    x = "Altura máxima (cm; 28 dda)"
  ) +
  theme_minimal(
    base_size = 20)+
  theme(
    text = element_text(family = "montserrat"),
    panel.grid.minor = element_blank(),
    legend.position = 'none'
  )+
  geom_text(data = summary_stats, aes(x = 75, y = Tratamiento, label = paste0(round(media, 2), "  ", groups)), 
            hjust = -0.2, size = 3, color = "#0a231fff", fontface = "bold", hjust = 1)

graficohMax28ddaTUKEY
#ggsave("./Plots/graficohMax28ddaTUKEY.png", plot = graficohMax28ddaTUKEY, width=1920, height=1080, units = "px")
Tabla H.18: Gráfico de…

H.6 Cambio en Altura máxima (28 dda)

Descriptivo

# Leer los datos desde el archivo Excel
data <- read_excel("csv/correlacionRendimiento.xlsx")

# Mostrar una vista previa de los datos
head(data)
# A tibble: 6 × 28
  cambioNoPlantas cambioAltura Tratamiento bloque Parcela Rendimiento
            <dbl>        <dbl> <chr>        <dbl> <chr>         <dbl>
1             -34           15 T1               1 A1             4130
2              -6            0 T1               4 A4             5270
3             -37           20 T1               7 B8             6050
4             -40           25 T1              10 B10            5700
5             -33            0 T1               2 C3             5450
6             -13           15 T1               5 C6             4960
# ℹ 22 more variables: noPlantas0dda <dbl>, noPlantas14dda <dbl>,
#   noPlantas19dda <dbl>, noPlantas28dda <dbl>, hMax0dda <dbl>,
#   hMax14dda <dbl>, hMax19dda <dbl>, hMax28dda <dbl>, Columna <chr>,
#   Fila <dbl>, tiempo0dda <dbl>, tiempo14dda <dbl>, tiempo19dda <dbl>,
#   tiempo28dda <dbl>, tiempo0ddaBI <dbl>, cober0dda <dbl>, cober14dda <dbl>,
#   cober19dda <dbl>, cober28dda <dbl>, cloro14dda <dbl>, cloro19dda <dbl>,
#   cloro28dda <dbl>
# Convertir la columna 'Tratamiento' a factor
data$Tratamiento <- as.factor(data$Tratamiento)

# Análisis descriptivo
summary_stats <- data %>% 
  group_by(Tratamiento) %>% 
  summarise(n = n(),
            media = mean(cambioAltura, na.rm = TRUE),
            mediana = median(cambioAltura, na.rm = TRUE),
            sd = sd(cambioAltura, na.rm = TRUE),
            varianza = var(cambioAltura, na.rm = TRUE),
            min = min(cambioAltura, na.rm = TRUE),
            max = max(cambioAltura, na.rm = TRUE))


print(summary_stats)
# A tibble: 6 × 8
  Tratamiento     n  media mediana    sd varianza   min   max
  <fct>       <int>  <dbl>   <dbl> <dbl>    <dbl> <dbl> <dbl>
1 T1             12  9.33      7.5  9.58     91.7    -5    25
2 T2             12  4.33      2.5 14.2     202.    -15    32
3 T3             12 -0.667     0    7.97     63.5   -13    16
4 T4             12  7.33      7    8.41     70.8    -8    20
5 TR             12  2.92     -2.5 12.5     157.    -10    30
6 TS             12 42.1      47.5 15.9     252.     15    65

H.6.1 Datos sin transformar

Análisis de Varianza

# Análisis estadístico
# Análisis de Varianza (ANOVA) considerando el efecto de Tratamiento y bloque
model <- aov(cambioAltura ~ Tratamiento + bloque, data = data)
anova_results <- Anova(model)

# Mostrar los resultados del ANOVA
print(anova_results)
Anova Table (Type II tests)

Response: cambioAltura
             Sum Sq Df F value    Pr(>F)    
Tratamiento 14738.6  5 20.9514 2.073e-12 ***
bloque         57.4  1  0.4083    0.5251    
Residuals    9145.1 65                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Análisis de normalidad de los residuos utilizando Shapiro-Wilk

shapiro_test <- shapiro.test(residuals(model))
print(shapiro_test)

    Shapiro-Wilk normality test

data:  residuals(model)
W = 0.99064, p-value = 0.8753

Análisis de homogeneidad de varianzas utilizando la prueba de Levene

levene_test <- car::leveneTest(cambioAltura ~ Tratamiento, data = data)
print(levene_test)
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  5  1.5362 0.1907
      66               

Análisis de independencia de los residuos

plot(residuals(model) ~ fitted(model))
abline(h = 0, col = "red")

Comparaciones múltiples

# Comparaciones múltiples usando el test de Tukey
tukey_results <- HSD.test(model, "Tratamiento")

# Mostrar los resultados del test de Tukey
print(tukey_results)
$statistics
   MSerror Df     Mean       CV      MSD
  140.6932 65 10.88889 108.9314 14.21939

$parameters
   test      name.t ntr StudentizedRange alpha
  Tukey Tratamiento   6         4.152742  0.05

$means
   cambioAltura       std  r       se Min Max  Q25  Q50   Q75
T1    9.3333333  9.575853 12 3.424096  -5  25  1.5  7.5 16.25
T2    4.3333333 14.208406 12 3.424096 -15  32 -2.5  2.5 11.25
T3   -0.6666667  7.969639 12 3.424096 -13  16 -5.5  0.0  5.00
T4    7.3333333  8.413553 12 3.424096  -8  20  1.5  7.0 11.25
TR    2.9166667 12.515142 12 3.424096 -10  30 -5.0 -2.5 10.00
TS   42.0833333 15.877132 12 3.424096  15  65 30.0 47.5 51.25

$comparison
NULL

$groups
   cambioAltura groups
TS   42.0833333      a
T1    9.3333333      b
T4    7.3333333      b
T2    4.3333333      b
TR    2.9166667      b
T3   -0.6666667      b

attr(,"class")
[1] "group"
Código
library(ggdist)
library(ggtext)

# Preparar los datos del test de Tukey
tukey_groups <- tukey_results$groups
tukey_groups$Tratamiento <- rownames(tukey_groups)
rownames(tukey_groups) <- NULL

# Unir los resultados del test de Tukey con los summary_stats
summary_stats <- summary_stats %>%
  left_join(tukey_groups, by = "Tratamiento")

# Ordenar el eje Y de manera descendente
data$Tratamiento <- factor(data$Tratamiento, levels = summary_stats$Tratamiento[order(summary_stats$media)])

data %>%
  ggplot(aes(x=cambioAltura, y = Tratamiento, fill = Tratamiento)) +
  geom_boxplot(width = 0.1) +
  geom_dots(
    side = 'bottom',
    position = position_nudge(y = -0.075),
    height = 0.55
  ) +
  stat_slab(
    position = position_nudge(y = 0.075),
    height = 0.55,
    trim = FALSE,
    alpha = 0.6
  ) +
  labs(
    title= "",
    y = element_blank(),
    x = "Cambio en altura máxima (cm)"
  ) +
  theme_minimal(
    base_size = 20)+
  theme(
    text = element_text(family = "montserrat"),
    panel.grid.minor = element_blank(),
    legend.position = 'none'
  )+
  geom_text(data = summary_stats, aes(x = 75, y = Tratamiento, label = paste0(round(media, 2), "  ", groups)), 
            hjust = -0.2, size = 3, color = "#0a231fff", fontface = "bold", hjust = 1)
Tabla H.19: Gráfico de…


H.6.2 Gráfico de barras

Código
# Cargar las librerías necesarias
library(ggplot2)
library(reshape2)

# Cargar los datos desde el archivo Excel
df <- read_excel("csv/correlacionRendimiento.xlsx")

# Filtrar las columnas relevantes
df_filtered <- df[, c("Tratamiento", "noPlantas0dda", "noPlantas14dda", "noPlantas19dda", "noPlantas28dda")]

# Renombrar las columnas para que tengan las etiquetas deseadas
colnames(df_filtered) <- c("Tratamiento", "0 dda", "14 dda", "19 dda", "28 dda")

# Convertir el dataframe a formato largo
df_melted <- melt(df_filtered, id.vars = "Tratamiento", 
                  variable.name = "Tiempo", value.name = "NoPlantas")

# Crear el gráfico
figuraBarrasNoplantas <- ggplot(df_melted, aes(x = Tiempo, y = NoPlantas, fill = Tratamiento)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Número de plantas por tiempo y tratamiento",
       x = "Tiempo", y = "Número de plantas") +
  theme_minimal()

figuraBarrasNoplantas
#ggsave("./Plots/figuraBarrasNoplantas.png", plot = figuraBarrasNoplantas, width=1920, height=1080, units = "px")
Tabla H.20: Gráfico de…

Código
# Filtrar las columnas relevantes
df_filtered_hmax <- df[, c("Tratamiento", "hMax0dda", "hMax14dda", "hMax19dda", "hMax28dda")]

# Renombrar las columnas para que tengan las etiquetas deseadas
colnames(df_filtered_hmax) <- c("Tratamiento", "0 dda", "14 dda", "19 dda", "28 dda")

# Convertir el dataframe a formato largo
df_melted_hmax <- melt(df_filtered_hmax, id.vars = "Tratamiento", 
                       variable.name = "Tiempo", value.name = "hMax")

# Crear el gráfico
figuraBarrashMax <- ggplot(df_melted_hmax, aes(x = Tiempo, y = hMax, fill = Tratamiento)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Altura máxima por tiempo y tratamiento",
       x = "Tiempo", y = "Altura máxima (cm)") +
  theme_minimal()

figuraBarrashMax
#ggsave("./Plots/figuraBarrashMax.png", plot = figuraBarrashMax, width=1920, height=1080, units = "px")
Tabla H.21: Gráfico de…

Código
# Filtrar las columnas relevantes
df_filtered <- df[, c("Tratamiento", "noPlantas0dda", "noPlantas14dda", "noPlantas19dda", "noPlantas28dda")]

# Renombrar las columnas para que tengan las etiquetas deseadas
colnames(df_filtered) <- c("Tratamiento", "0 dda", "14 dda", "19 dda", "28 dda")

# Convertir el dataframe a formato largo
df_melted <- melt(df_filtered, id.vars = "Tratamiento", 
                  variable.name = "Tiempo", value.name = "NoPlantas")

# Convertir la columna Tiempo a numérica para la regresión
df_melted$Tiempo <- as.numeric(gsub(" dda", "", df_melted$Tiempo))

# Convertir Tratamiento a factor y especificar el nivel de referencia
df_melted$Tratamiento <- relevel(factor(df_melted$Tratamiento), ref = "TS")

# Ajustar modelos lineales para cada tratamiento
models <- lm(NoPlantas ~ Tiempo * Tratamiento, data = df_melted)
summary(models)

Call:
lm(formula = NoPlantas ~ Tiempo * Tratamiento, data = df_melted)

Residuals:
    Min      1Q  Median      3Q     Max 
-25.948  -8.822  -0.413   8.211  33.716 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)           37.4885     3.2187  11.647  < 2e-16 ***
Tiempo                -0.2725     0.1758  -1.550  0.12230    
TratamientoT1          4.7958     4.5519   1.054  0.29300    
TratamientoT2         -4.1525     4.5519  -0.912  0.36244    
TratamientoT3          0.4599     4.5519   0.101  0.91959    
TratamientoT4         -6.6624     4.5519  -1.464  0.14443    
TratamientoTR         -4.9790     4.5519  -1.094  0.27499    
Tiempo:TratamientoT1  -0.5699     0.2486  -2.293  0.02263 *  
Tiempo:TratamientoT2  -0.5501     0.2486  -2.213  0.02773 *  
Tiempo:TratamientoT3  -0.6681     0.2486  -2.688  0.00764 ** 
Tiempo:TratamientoT4  -0.3650     0.2486  -1.468  0.14316    
Tiempo:TratamientoTR  -0.5670     0.2486  -2.281  0.02334 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 12.34 on 276 degrees of freedom
Multiple R-squared:  0.3663,    Adjusted R-squared:  0.341 
F-statistic:  14.5 on 11 and 276 DF,  p-value: < 2.2e-16
Código
# Obtener coeficientes y estadísticos
model_info <- tidy(models)


# Crear etiquetas personalizadas para la leyenda
labels <- c(
  "TS" = paste("TS: ", "y = ", round(coef(models)[1], 2), "+", round(coef(models)[2], 2), "*x", 
               "\nR² = ", round(summary(models)$r.squared, 2), 
               ", p =", round(summary(models)$coefficients[2,4], 4)),
  "T1" = paste("T1: ", "y = ", round(coef(models)[1] + coef(models)[3], 2), "+", 
               round(coef(models)[2] + coef(models)[8], 2), "*x", 
               "\nR² = ", round(summary(models)$r.squared, 2), 
               ", p =", round(summary(models)$coefficients[8,4], 4)),
  "T2" = paste("T2: ", "y = ", round(coef(models)[1] + coef(models)[4], 2), "+", 
               round(coef(models)[2] + coef(models)[9], 2), "*x", 
               "\nR² = ", round(summary(models)$r.squared, 2), 
               ", p =", round(summary(models)$coefficients[9,4], 4)),
  "T3" = paste("T3: ", "y = ", round(coef(models)[1] + coef(models)[5], 2), "+", 
               round(coef(models)[2] + coef(models)[10], 2), "*x", 
               "\nR² = ", round(summary(models)$r.squared, 2), 
               ", p =", round(summary(models)$coefficients[10,4], 4)),
  "T4" = paste("T4: ", "y = ", round(coef(models)[1] + coef(models)[6], 2), "+", 
               round(coef(models)[2] + coef(models)[11], 2), "*x", 
               "\nR² = ", round(summary(models)$r.squared, 2), 
               ", p =", round(summary(models)$coefficients[11,4], 4)),
  "TR" = paste("TR: ", "y = ", round(coef(models)[1] + coef(models)[7], 2), "+", 
               round(coef(models)[2] + coef(models)[12], 2), "*x", 
               "\nR² = ", round(summary(models)$r.squared, 2), 
               ", p =", round(summary(models)$coefficients[12,4], 4))
)

# Crear el gráfico con las etiquetas personalizadas
figuraRegresionNoPlantas <- ggplot(df_melted, aes(x = Tiempo, y = NoPlantas, color = Tratamiento, shape = Tratamiento))  +  
  geom_smooth(method = "lm", se = FALSE) +  # Líneas de regresión
  labs(title = "Número de Plantas por Tiempo y Tratamiento",
       x = "Tiempo (dda)", y = "Número de Plantas") +
  scale_color_manual(values = c("blue", "orange", "green", "red", "purple", "brown"), labels = labels) +
  scale_shape_manual(values = c(16, 17, 18, 19, 20, 21), labels = labels) +
  theme_minimal() +
  theme(legend.title = element_blank())

figuraRegresionNoPlantas
#ggsave("./Plots/figuraBarrashMax.png", plot = figuraBarrashMax, width=1920, height=1080, units = "px")

# Crear el gráfico con solo las líneas de regresión
figuraRegresionLineas <- ggplot(df_melted, aes(x = Tiempo, y = NoPlantas, color = Tratamiento)) +
  geom_smooth(method = "lm", se = FALSE, fullrange = TRUE) +  # Solo líneas de regresión
  labs(title = "Número de Plantas por Tiempo y Tratamiento",
       x = "Tiempo (dda)", y = "Número de Plantas") +
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = "right",  # Colocar la leyenda a la derecha
        plot.margin = margin(1, 1, 1, 1, "cm"))  # Márgenes alrededor del gráfico

figuraRegresionLineas
Tabla H.22: Gráfico de…

Código
# Filtrar las columnas relevantes para hMax
df_filtered_hmax <- df[, c("Tratamiento", "hMax0dda", "hMax14dda", "hMax19dda", "hMax28dda")]

# Renombrar las columnas para que tengan las etiquetas deseadas
colnames(df_filtered_hmax) <- c("Tratamiento", "0 dda", "14 dda", "19 dda", "28 dda")

# Convertir el dataframe a formato largo
df_melted_hmax <- melt(df_filtered_hmax, id.vars = "Tratamiento", 
                       variable.name = "Tiempo", value.name = "hMax")

# Convertir la columna Tiempo a numérica para la regresión
df_melted_hmax$Tiempo <- as.numeric(gsub(" dda", "", df_melted_hmax$Tiempo))

# Convertir Tratamiento a factor y especificar el nivel de referencia y el orden de los niveles
df_melted_hmax$Tratamiento <- factor(df_melted_hmax$Tratamiento, levels = c("TS", "TR", "T1", "T2", "T3", "T4"))

# Ajustar modelos lineales para cada tratamiento
models_hmax <- lm(hMax ~ Tiempo * Tratamiento, data = df_melted_hmax)
summary(models_hmax)

Call:
lm(formula = hMax ~ Tiempo * Tratamiento, data = df_melted_hmax)

Residuals:
     Min       1Q   Median       3Q      Max 
-31.5536  -4.8652  -0.8273   5.2806  30.9825 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)          18.33790    2.43013   7.546 6.54e-13 ***
Tiempo                1.54342    0.13272  11.629  < 2e-16 ***
TratamientoTR        -2.10393    3.43673  -0.612    0.541    
TratamientoT1         0.09475    3.43673   0.028    0.978    
TratamientoT2         0.45912    3.43673   0.134    0.894    
TratamientoT3        -0.18249    3.43673  -0.053    0.958    
TratamientoT4        -2.08201    3.43673  -0.606    0.545    
Tiempo:TratamientoTR -1.44400    0.18770  -7.693 2.55e-13 ***
Tiempo:TratamientoT1 -1.22479    0.18770  -6.525 3.23e-10 ***
Tiempo:TratamientoT2 -1.39623    0.18770  -7.439 1.29e-12 ***
Tiempo:TratamientoT3 -1.57273    0.18770  -8.379 2.74e-15 ***
Tiempo:TratamientoT4 -1.28561    0.18770  -6.849 4.82e-11 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.318 on 276 degrees of freedom
Multiple R-squared:  0.5789,    Adjusted R-squared:  0.5621 
F-statistic:  34.5 on 11 and 276 DF,  p-value: < 2.2e-16
Código
# Crear etiquetas personalizadas para la leyenda
labels_hmax <- c(
  "TS" = paste("TS: y = ", round(coef(models_hmax)[1], 2), "+", round(coef(models_hmax)[2], 2), "*x", 
               "\nR² = ", round(summary(models_hmax)$r.squared, 2), 
               ", p =", round(summary(models_hmax)$coefficients[2,4], 4)),
  "TR" = paste("TR: y = ", round(coef(models_hmax)[1] + coef(models_hmax)[7], 2), "+", 
               round(coef(models_hmax)[2] + coef(models_hmax)[12], 2), "*x", 
               "\nR² = ", round(summary(models_hmax)$r.squared, 2), 
               ", p =", round(summary(models_hmax)$coefficients[12,4], 4)),
  "T1" = paste("T1: y = ", round(coef(models_hmax)[1] + coef(models_hmax)[3], 2), "+", 
               round(coef(models_hmax)[2] + coef(models_hmax)[8], 2), "*x", 
               "\nR² = ", round(summary(models_hmax)$r.squared, 2), 
               ", p =", round(summary(models_hmax)$coefficients[8,4], 4)),
  "T2" = paste("T2: y = ", round(coef(models_hmax)[1] + coef(models_hmax)[4], 2), "+", 
               round(coef(models_hmax)[2] + coef(models_hmax)[9], 2), "*x", 
               "\nR² = ", round(summary(models_hmax)$r.squared, 2), 
               ", p =", round(summary(models_hmax)$coefficients[9,4], 4)),
  "T3" = paste("T3: y = ", round(coef(models_hmax)[1] + coef(models_hmax)[5], 2), "+", 
               round(coef(models_hmax)[2] + coef(models_hmax)[10], 2), "*x", 
               "\nR² = ", round(summary(models_hmax)$r.squared, 2), 
               ", p =", round(summary(models_hmax)$coefficients[10,4], 4)),
  "T4" = paste("T4: y = ", round(coef(models_hmax)[1] + coef(models_hmax)[6], 2), "+", 
               round(coef(models_hmax)[2] + coef(models_hmax)[11], 2), "*x", 
               "\nR² = ", round(summary(models_hmax)$r.squared, 2), 
               ", p =", round(summary(models_hmax)$coefficients[11,4], 4))
)

# Crear el gráfico con las etiquetas personalizadas para hMax
figuraRegresionhMax <- ggplot(df_melted_hmax, aes(x = Tiempo, y = hMax, color = Tratamiento, shape = Tratamiento))  +  
  geom_smooth(method = "lm", se = FALSE) +  # Líneas de regresión
  labs(title = "Altura Máxima por Tiempo y Tratamiento",
       x = "Tiempo (dda)", y = "Altura Máxima (hMax)") +
  scale_color_manual(values = c("blue", "orange", "green", "red", "purple", "brown"), labels = labels_hmax) +
  scale_shape_manual(values = c(16, 17, 18, 19, 20, 21), labels = labels_hmax) +
  theme_minimal() +
  theme(legend.title = element_blank())

figuraRegresionhMax
# Crear el gráfico con solo las líneas de regresión para hMax
figuraRegresionLineas_hMax <- ggplot(df_melted_hmax, aes(x = Tiempo, y = hMax, color = Tratamiento)) +
  geom_smooth(method = "lm", se = FALSE, fullrange = TRUE) +  # Solo líneas de regresión
  labs(title = "Altura Máxima por Tiempo y Tratamiento",
       x = "Tiempo (dda)", y = "Altura Máxima (hMax)") +
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = "right",  # Colocar la leyenda a la derecha
        plot.margin = margin(1, 1, 1, 1, "cm"))  # Márgenes alrededor del gráfico

figuraRegresionLineas_hMax
Tabla H.23: Gráfico de…