#####################################
## Q13 — ANOVA e Tukey             ##
## Autora: Victória Souza          ##
#####################################
# Pacotes
library(car)        # Levene
## Carregando pacotes exigidos: carData
library(emmeans)    # pós-testes (Tukey / efeitos simples)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(ggplot2)    # gráfico
library(dplyr)      # gráfico/manipulação
## 
## Anexando pacote: 'dplyr'
## O seguinte objeto é mascarado por 'package:car':
## 
##     recode
## Os seguintes objetos são mascarados por 'package:stats':
## 
##     filter, lag
## Os seguintes objetos são mascarados por 'package:base':
## 
##     intersect, setdiff, setequal, union
# 1) Ler dados
dados <- read.table("questao13.txt", header = TRUE, dec = ".")

# 2) Fatores 
dados$local   <- factor(dados$local,   levels = c("A","B","C"))
dados$periodo <- factor(dados$periodo, levels = c("dia","noite"))

# 3) Checagens 
# Levene por célula do fatorial:
leveneTest(oxigenio ~ interaction(local, periodo), data = dados)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value    Pr(>F)    
## group  5  8.0977 4.191e-06 ***
##       72                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Normalidade dos resíduos será checada após o ajuste

# 4) ANOVA fatorial
mod <- aov(oxigenio ~ local * periodo, data = dados)
summary(mod)
##               Df Sum Sq Mean Sq F value   Pr(>F)    
## local          2  28.33   14.17   52.64 8.16e-15 ***
## periodo        1 144.79  144.79  538.01  < 2e-16 ***
## local:periodo  2  52.34   26.17   97.24  < 2e-16 ***
## Residuals     72  19.38    0.27                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretação: Ambos os fatores e a interação entre eles apresentaram alta significância (Local: p=8.16e-15; Período: p< 2e-16; Local:Período: p< 2e-16). Isso indica que o oxigênio dissolvido é diferente entre locais, entre períodos e que a diferença entre locais depende do período (interação).

# Diagnóstico 
par(mfrow = c(1,2))
plot(mod, which = 1)               # resíduos vs ajustados
qqnorm(residuals(mod)); qqline(residuals(mod))  # QQ-plot

par(mfrow = c(1,1))

# 5) Pós-testes (Tukey) 
# a) Todas as 6 combinações (Local:Período)
emm_all <- emmeans(mod, ~ local:periodo)
pairs(emm_all, adjust = "tukey")
##  contrast          estimate    SE df t.ratio p.value
##  A dia - B dia       0.0792 0.203 72   0.389  0.9988
##  A dia - C dia      -0.4669 0.203 72  -2.295  0.2097
##  A dia - A noite     1.1046 0.203 72   5.429  <.0001
##  A dia - B noite     2.1800 0.203 72  10.714  <.0001
##  A dia - C noite     4.5023 0.203 72  22.127  <.0001
##  B dia - C dia      -0.5462 0.203 72  -2.684  0.0910
##  B dia - A noite     1.0254 0.203 72   5.039  <.0001
##  B dia - B noite     2.1008 0.203 72  10.324  <.0001
##  B dia - C noite     4.4231 0.203 72  21.738  <.0001
##  C dia - A noite     1.5715 0.203 72   7.723  <.0001
##  C dia - B noite     2.6469 0.203 72  13.009  <.0001
##  C dia - C noite     4.9692 0.203 72  24.422  <.0001
##  A noite - B noite   1.0754 0.203 72   5.285  <.0001
##  A noite - C noite   3.3977 0.203 72  16.698  <.0001
##  B noite - C noite   2.3223 0.203 72  11.413  <.0001
## 
## P value adjustment: tukey method for comparing a family of 6 estimates

Interpretação: Os únicos três pares que não apresentaram diferença significatica foram: A-dia vs B-dia (p=0.9988); A-dia vs C-dia (p=2097); B-dia vs C-dia (p=0.0910). Indicando que não há diferença no oxigênio dissolvido apenas entre os locais durante o dia. Em compensação, cada par Dia vs Noite, no mesmo local, é diferente; e durante à noite, todos os locais diferem entre si.

# 6) Tabela de médias ± EP para plot
sumario <- aggregate(oxigenio ~ local + periodo, dados,
                     function(z) c(mean = mean(z), se = sd(z)/sqrt(length(z))))
sumario <- transform(sumario,
                     media = oxigenio[, "mean"],
                     se    = oxigenio[, "se"])

# 7) Boxplot por local em cada período (com pontos individuais)
  ggplot(dados, aes(local, oxigenio, color = local)) +
    geom_boxplot(outlier.shape = NA, alpha = 0.15) +
    geom_jitter(width = 0.08, alpha = 0.5, size = 1.8) +
    facet_wrap(~ periodo, nrow = 1) +
    scale_color_brewer(palette = "Dark2", guide = "none") +
    labs(x = "Local", y = "Oxigênio dissolvido",
         title = "Boxplot por local em cada período",
         subtitle = "Mediana e quartis (Q1–Q3) com pontos individuais") +
    theme_bw(base_size = 13) +
    theme(panel.grid = element_blank(),
          strip.background = element_blank(),
          plot.title.position = "plot")

# 8) Gráfico Interação (média ± EP)
  ggplot(sumario,
       aes(x = local, y = media,
           group = periodo, color = periodo, shape = periodo)) +
  geom_line(linetype = "dotted", linewidth = 0.9) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = media - se, ymax = media + se),
                width = 0.10, linewidth = 0.7) +
  scale_color_brewer(palette = "Dark2",
                     name = "Período",
                     labels = c(dia = "Dia", noite = "Noite")) +
  scale_shape_manual(values = c(dia = 16, noite = 17),
                     name = "Período",
                     labels = c(dia = "Dia", noite = "Noite")) +
  labs(x = "Local",
       y = "Oxigênio dissolvido",
       title = "Interação Local × Período (média ± EP)") +
  # quadro fechado
  theme_classic(base_size = 13) +
  theme(
    panel.border = element_rect(colour = "black", fill = NA, linewidth = 0.8),
    axis.line = element_blank(),
    legend.position = "top",
    legend.title = element_text(face = "bold"),
    plot.title.position = "plot",
    aspect.ratio = 1        # painel quadrado
  ) +
  scale_y_continuous(expand = expansion(mult = c(0.03, 0.06)))

Interpretação: Existem diferenças entre períodos e entre locais, e o padrão entre locais depende do período (interação). Dia: A ~ B ~ C (não significativo). Noite: A > B > C (p<0,001). Dentro de cada local: Dia > Noite (p<0,001).