---
title: "Análise de Variância em blocos com testes post-hoc"
author: "Prof. João Tolentino"
date: "2025-05-14"
output:
  html_document:
    code_folding: hide
params:
  arquivo: NULL
  grupo: NULL
  bloco: NULL
  resposta: NULL
  testemunha: NULL
---

```{r, include=FALSE}
# opções
knitr::opts_chunk$set(message = FALSE)
knitr::opts_chunk$set(warning = FALSE)
``` 

```{r, include=FALSE}
# Carregar pacotes
if (!require(pacman)) install.packages("pacman")
pacman::p_load(
  "tidyverse", "readxl", "moments", "car", "gt",
  "emmeans", "multcomp", "multcompView"
)
```

# Análise da variável `r params$resposta`

### Importar o dados do arquivo
```{r}
extensao <- tolower(gsub(".*\\.", "", params$arquivo))
if (extensao == "xlsx") {
  dados <- readxl::read_excel(
    params$arquivo,
  )
} else if (extensao == "csv") {
  dados <- readr::read_csv(params$arquivo)
} else {
  stop("O arquivo não parece ser nem .xlsx nem .csv")
}
```

# Análise Exploratória

## Estatísticas descritivas por grupo

```{r}
dados |>
  group_by(.data[[params$grupo]]) |>
  summarise(
    n = n(),
    media = mean(.data[[params$resposta]]),
    desvpad = sd(.data[[params$resposta]]),
    var = var(.data[[params$resposta]]),
    .groups = "drop"
  ) |>
  gt(locale = "pt") |>
  fmt_integer(columns = n) |>
  fmt_number(columns = c("media", "desvpad", "var")) |>
  cols_align(columns = -1, "center")
```

## Boxplot comparativo entre os grupos

```{r}
dados |>
  ggplot(aes(
    x = fct_reorder(.data[[params$grupo]], .data[[params$resposta]], .fun = mean),
    y = .data[[params$resposta]]
  )) +
  geom_boxplot() +
  stat_summary(fun = "mean", shape = 23) +
  theme_classic()
```

## Estatísticas descritivas por bloco

```{r}
dados |>
  group_by(.data[[params$bloco]]) |>
  summarise(
    n = n(),
    media = mean(.data[[params$resposta]]),
    desvpad = sd(.data[[params$resposta]]),
    var = var(.data[[params$resposta]]),
    .groups = "drop"
  ) |>
  gt(locale = "pt") |>
  fmt_integer(columns = n) |>
  fmt_number(columns = c("media", "desvpad", "var")) |>
  cols_align(columns = -1, "center")
```

## Boxplot comparativo entre os blocos

```{r}
dados |>
  ggplot(aes(
    x = fct_reorder(.data[[params$bloco]], .data[[params$resposta]], .fun = mean),
    y = .data[[params$resposta]]
  )) +
  geom_boxplot() +
  stat_summary(fun = "mean", shape = 23) +
  theme_classic()
```


# Análise de variância
```{r}
formula_aov <- as.formula(paste(params$resposta, "~", params$grupo,"+", params$bloco))
mod1 <- lm(formula_aov, data = dados)
anova(mod1)
```


# Teste de Tukey

```{r}
# Calcular as médias marginais estimadas e aplicar o teste de Tukey
tk <- emmeans::emmeans(mod1, as.formula(paste("~", params$grupo)), contr = "tukey")
```


## Contrastes (comparações par a par)
```{r}
tk$contrasts
```


## Intervalos de confiança para os contrastes
```{r}
tk$contrasts |> confint()
```


## Médias marginais estimadas e Compact Letter Display (CLD)
```{r}
## Ajustar 'Letters = letters' ou 'Letters = LETTERS' para minúsculas ou maiúsculas
## Ajustar decreasing = TRUE para letras decrescentes e decreasing = FALSE para crescentes
tk$emmeans |> multcomp::cld(Letters = letters, decreasing = TRUE)
```


## Gráfico das médias com intervalos de confiança
```{r}
tk$emmeans |> plot(comparisons = TRUE, CIs = TRUE)
```


# Teste de Dunnett

```{r}
# Calculando as médias marginais estimadas e aplicando o teste de Dunnett
dn <- emmeans::emmeans(mod1, as.formula(paste("~", params$grupo)), contr="dunnett", ref = which(names(table(dados[[params$grupo]])) == params$testemunha))
```


## Contrastes (comparações contra a testemunha)
```{r}
dn$contrasts
```

## Intervalos de confiança para os contrastes

```{r}
dn$contrasts %>% confint()
```

## Médias marginais estimadas
```{r}
dn$emmeans
```



## Gráfico das médias com intervalos de confiança

```{r}
dn$emmeans %>% plot(comparisons = TRUE, CIs = TRUE)
```