ANALISE UNIVARIADA

ANÁLISE EXPLORATÓRIA

Sumário por temperatura e variedade

responses = c("GERMINAÇÃO",
                    "ALTURA (CM)",
                    "N. FOLHA",
                    "N. DE RAIZ",
                    "TAMANHO RAIZ")
for (response_univar in responses) {

  tabela <- dados %>%
    group_by(TEMPERATURA, VARIEDADE) %>%
    summarise(
      Média = mean(.data[[response_univar]], na.rm = TRUE),
      `Desvio-padrão` = sd(.data[[response_univar]], na.rm = TRUE),
      Amplitude = diff(range(.data[[response_univar]])),
      .groups = "drop"
    )
  print(
    kable(
      tabela,
      digits = 2,
      caption = paste("Resumo por Temperatura e Variedade —", response_univar),
      align = "c"
    )
  )
}
## 
## 
## Table: Resumo por Temperatura e Variedade — GERMINAÇÃO
## 
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## |      A      |    V1     |  2.8  |     0.63      |     2     |
## |      A      |    V2     |  3.0  |     0.00      |     0     |
## |      B      |    V1     |  3.0  |     0.00      |     0     |
## |      B      |    V2     |  2.9  |     0.32      |     1     |
## 
## 
## Table: Resumo por Temperatura e Variedade — ALTURA (CM)
## 
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## |      A      |    V1     | 18.5  |     7.60      |    27     |
## |      A      |    V2     | 16.3  |     5.72      |    14     |
## |      B      |    V1     |  6.6  |     4.20      |    11     |
## |      B      |    V2     |  4.9  |     1.85      |     5     |
## 
## 
## Table: Resumo por Temperatura e Variedade — N. FOLHA
## 
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## |      A      |    V1     |  9.0  |     3.92      |    14     |
## |      A      |    V2     | 13.5  |     3.69      |    10     |
## |      B      |    V1     |  6.9  |     5.32      |    13     |
## |      B      |    V2     |  3.9  |     4.33      |    12     |
## 
## 
## Table: Resumo por Temperatura e Variedade — N. DE RAIZ
## 
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## |      A      |    V1     | 17.3  |     6.18      |    20     |
## |      A      |    V2     | 15.0  |     4.71      |    10     |
## |      B      |    V1     | 10.2  |     7.25      |    19     |
## |      B      |    V2     |  9.6  |     4.14      |    17     |
## 
## 
## Table: Resumo por Temperatura e Variedade — TAMANHO RAIZ
## 
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## |      A      |    V1     | 10.5  |     4.97      |    16     |
## |      A      |    V2     |  7.5  |     2.22      |     5     |
## |      B      |    V1     |  4.5  |     2.92      |     9     |
## |      B      |    V2     |  2.5  |     1.27      |     3     |

Gráficos Interação

for (response_univar in responses) {

  print(
    ggplot(dados,
           aes(x = TEMPERATURA,
               y = .data[[response_univar]],
               color = VARIEDADE,
               group = VARIEDADE)) +

      # Pontos das médias
      stat_summary(
        fun = mean,
        geom = "point",
        size = 3.2
      ) +

      # Linhas das médias
      stat_summary(
        fun = mean,
        geom = "line",
        linewidth = 1
      ) +

      # Cores das variedades (mesmo padrão dos boxplots)
      scale_color_manual(
        values = c(
          "V1" = "#E6AB02",  # Amarela
          "V2" = "#6A3D9A"   # Roxa
        ),
        labels = c(
          "V1" = "Amarela",
          "V2" = "Roxa"
        )
      ) +

      labs(
        title = response_univar,
        x = "Temperatura",
        y = NULL
      ) +

      theme_classic(base_size = 12) +
      theme(
        legend.position = "top",
        legend.title = element_blank(),
        axis.text.x = element_text(face = "bold"),
        plot.title = element_text(face = "bold", hjust = 0.5)
      )
  )
}

Box-Plot (vsersão 1)

for (response_univar in responses) {

  print(
    ggplot(dados, aes(x = TEMPERATURA,
                      y = .data[[response_univar]],
                      fill = TEMPERATURA)) +

      # Violino (distribuição)
      geom_violin(
        trim = TRUE,
        scale = "width",
        color = NA,
        alpha = 0.6
      ) +

      # Boxplot (estatísticas centrais)
      geom_boxplot(
        width = 0.18,
        outlier.shape = NA,
        alpha = 0.9
      ) +

      # Pontos individuais
      geom_jitter(
        width = 0.08,
        size = 1.6,
        alpha = 0.6
      ) +

      # Facetas por variedade
      facet_wrap(~ VARIEDADE, scales = "free_y") +

      # Paleta discreta (ajuste se quiser)
      scale_fill_manual(
        values = c(
          "#4E79A7",
          "#E15759"
          
        )
      ) +

      labs(
        title = response_univar,
        x = "Temperatura",
        y = NULL
      ) +

      theme_classic(base_size = 12) +
      theme(
        legend.position = "none",
        axis.text.x = element_text(face = "bold"),
        strip.background = element_blank(),
        strip.text = element_text(face = "bold"),
        plot.title = element_text(face = "bold", hjust = 0.5)
      )
  )
}

Testes de hipótese

Modelo

# Criar uma lista para armazenar os modelos
modelos_lista <- list()

for (i in responses) {
  # Adicionamos ` em volta do nome da variável para evitar o erro de função
  form <- as.formula(paste0("`", i, "` ~ TEMPERATURA * VARIEDADE"))
  
  modelos_lista[[i]] <- lm(form, data = dados)
}
anova_tabelas <- list()

for (response_univar in responses) {

  anova_tabelas[[response_univar]] <- as.data.frame(
    anova(modelos_lista[[response_univar]])
  ) %>%
    tibble::rownames_to_column("Fonte") %>%
    rename(
      GL = Df,
      `SQ` = `Sum Sq`,
      `QM` = `Mean Sq`,
      `F`  = `F value`,
      `p-valor` = `Pr(>F)`
    ) %>%
    mutate(
      across(where(is.numeric), ~ round(.x, 4))
    )
}
library(knitr)

for (response_univar in responses) {


  print(
    kable(
      anova_tabelas[[response_univar]],
      align = "c",
      digits = 4,
      caption = paste("Análise de variância para a variável", response_univar)
    )
  )
}
## 
## 
## Table: Análise de variância para a variável GERMINAÇÃO
## 
## |         Fonte         | GL |  SQ   |  QM   |  F  | p-valor |
## |:---------------------:|:--:|:-----:|:-----:|:---:|:-------:|
## |      TEMPERATURA      | 1  | 0.025 | 0.025 | 0.2 | 0.6574  |
## |       VARIEDADE       | 1  | 0.025 | 0.025 | 0.2 | 0.6574  |
## | TEMPERATURA:VARIEDADE | 1  | 0.225 | 0.225 | 1.8 | 0.1881  |
## |       Residuals       | 36 | 4.500 | 0.125 | NA  |   NA    |
## 
## 
## Table: Análise de variância para a variável ALTURA (CM)
## 
## |         Fonte         | GL |    SQ    |    QM     |    F    | p-valor |
## |:---------------------:|:--:|:--------:|:---------:|:-------:|:-------:|
## |      TEMPERATURA      | 1  | 1357.225 | 1357.2250 | 48.6703 | 0.0000  |
## |       VARIEDADE       | 1  |  38.025  |  38.0250  | 1.3636  | 0.2506  |
## | TEMPERATURA:VARIEDADE | 1  |  0.625   |  0.6250   | 0.0224  | 0.8818  |
## |       Residuals       | 36 | 1003.900 |  27.8861  |   NA    |   NA    |
## 
## 
## Table: Análise de variância para a variável N. FOLHA
## 
## |         Fonte         | GL |   SQ    |    QM    |    F    | p-valor |
## |:---------------------:|:--:|:-------:|:--------:|:-------:|:-------:|
## |      TEMPERATURA      | 1  | 342.225 | 342.2250 | 18.0039 | 0.0001  |
## |       VARIEDADE       | 1  |  5.625  |  5.6250  | 0.2959  | 0.5898  |
## | TEMPERATURA:VARIEDADE | 1  | 140.625 | 140.6250 | 7.3981  | 0.0100  |
## |       Residuals       | 36 | 684.300 | 19.0083  |   NA    |   NA    |
## 
## 
## Table: Análise de variância para a variável N. DE RAIZ
## 
## |         Fonte         | GL |    SQ    |    QM    |    F    | p-valor |
## |:---------------------:|:--:|:--------:|:--------:|:-------:|:-------:|
## |      TEMPERATURA      | 1  | 390.625  | 390.6250 | 11.9977 | 0.0014  |
## |       VARIEDADE       | 1  |  21.025  | 21.0250  | 0.6458  | 0.4269  |
## | TEMPERATURA:VARIEDADE | 1  |  7.225   |  7.2250  | 0.2219  | 0.6404  |
## |       Residuals       | 36 | 1172.100 | 32.5583  |   NA    |   NA    |
## 
## 
## Table: Análise de variância para a variável TAMANHO RAIZ
## 
## |         Fonte         | GL |  SQ   |    QM    |    F    | p-valor |
## |:---------------------:|:--:|:-----:|:--------:|:-------:|:-------:|
## |      TEMPERATURA      | 1  | 302.5 | 302.5000 | 30.4190 | 0.0000  |
## |       VARIEDADE       | 1  | 62.5  | 62.5000  | 6.2849  | 0.0168  |
## | TEMPERATURA:VARIEDADE | 1  |  2.5  |  2.5000  | 0.2514  | 0.6191  |
## |       Residuals       | 36 | 358.0 |  9.9444  |   NA    |   NA    |
shapiro_resultados <- lapply(responses, function(v) {
  shapiro.test(residuals(modelos_lista[[v]]))
})
names(shapiro_resultados) <- responses
shapiro_resultados
## $GERMINAÇÃO
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelos_lista[[v]])
## W = 0.42032, p-value = 2.192e-11
## 
## 
## $`ALTURA (CM)`
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelos_lista[[v]])
## W = 0.92034, p-value = 0.007892
## 
## 
## $`N. FOLHA`
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelos_lista[[v]])
## W = 0.96662, p-value = 0.2799
## 
## 
## $`N. DE RAIZ`
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelos_lista[[v]])
## W = 0.94111, p-value = 0.03769
## 
## 
## $`TAMANHO RAIZ`
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelos_lista[[v]])
## W = 0.93992, p-value = 0.03435

ANALISE MULTIVARIADA

dados_manova <- dados %>%
  select(TEMPERATURA, VARIEDADE, where(is.numeric)) %>%
  drop_na()
modelo_manova <- manova(
  as.matrix(dados_manova %>% select(where(is.numeric))) ~
    TEMPERATURA * VARIEDADE,
  data = dados_manova
)
library(dplyr)
library(knitr)

manova_res <- summary(modelo_manova, test = "Pillai")$stats

tabela_manova <- as.data.frame(manova_res) %>%
  tibble::rownames_to_column("Fonte") %>%
  rename(
    `Traço de Pillai` = Pillai,
    F = `approx F`,
    GL_num = `num Df`,
    GL_den = `den Df`,
    `p-valor` = `Pr(>F)`
  ) %>%
  mutate(
    across(where(is.numeric), ~ round(.x, 4))
  )


kable(
  tabela_manova,
  align = "c",
  caption = "Análise de Variância Multivariada (MANOVA) – Teste de Pillai"
)
Análise de Variância Multivariada (MANOVA) – Teste de Pillai
Fonte Df Traço de Pillai F GL_num GL_den p-valor
TEMPERATURA 1 0.6745 13.2611 5 32 0.0000
VARIEDADE 1 0.3651 3.6810 5 32 0.0096
TEMPERATURA:VARIEDADE 1 0.4078 4.4065 5 32 0.0036
Residuals 36 NA NA NA NA NA

PCA 1 = variedades

pca <- prcomp(dados_mv, scale. = TRUE)
summary(pca)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5
## Standard deviation     1.7733 0.9637 0.7892 0.45419 0.31235
## Proportion of Variance 0.6289 0.1858 0.1246 0.04126 0.01951
## Cumulative Proportion  0.6289 0.8147 0.9392 0.98049 1.00000
factoextra::fviz_pca_biplot(
  pca,
  habillage = dados$VARIEDADE,
  addEllipses = TRUE,
  ellipse.level = 0.95,
  palette = c("V1" = "#E6AB02", "V2" = "#6A3D9A"),
  repel = TRUE,
  col.var = "grey35",
  label = "var",
  pointshape = 19,     # ponto sólido (preenchido)
  pointsize = 2.8,
  alpha.ind = 0.85
) +
  ggplot2::theme_classic(base_size = 12) +
  ggplot2::theme(
    legend.position = "top",
    legend.title = ggplot2::element_blank(),
    plot.title = ggplot2::element_text(face = "bold", hjust = 0.5),
    axis.title = ggplot2::element_text(face = "bold")
  )

PCA 2 = temperaturas

factoextra::fviz_pca_biplot(
  pca,
  habillage = dados$TEMPERATURA,
  addEllipses = TRUE,
  ellipse.type = "norm",     # <- volta ao padrão de dispersão (não encolhe)
  ellipse.level = 0.95,
  ellipse.alpha = 0.20,      # transparência do preenchimento
  repel = TRUE,
  col.var = "grey35",
  label = "var",
  pointshape = 19,           # pontos preenchidos
  pointsize = 2.8,
  alpha.ind = 0.85
) +
  ggplot2::scale_color_manual(
    values = c(
      "A" = "#4DB8E8",  # 25 °C (frio)
      "B" = "#E87A4D"   # 33 °C (quente)
    ),
    labels = c(
      "A" = "25 °C",
      "B" = "33 °C"
    )
  ) +
  ggplot2::scale_fill_manual(
    values = c(
      "A" = "#4DB8E8",
      "B" = "#E15759"
    )
  ) +
  ggplot2::guides(
    fill  = "none",
    shape = "none"
  ) +
  ggplot2::theme_classic(base_size = 12) +
  ggplot2::theme(
    legend.position = "top",
    legend.title = ggplot2::element_blank(),
    plot.title = ggplot2::element_text(face = "bold", hjust = 0.5),
    axis.title = ggplot2::element_text(face = "bold")
  )