Sumário

1 Objetivo

Simular um experimento com quatro tipos de controladores (PID, AutoPID, Fuzzy e LQR), analisar os dados via ANOVA, verificar as pressuposições do modelo (normalidade, homocedasticidade, independência) por meio de testes estatísticos e gráficos, e aplicar uma transformação logarítmica caso as pressuposições sejam violadas (e elas propositalmente serão)

2 Desenvolvimento

Os dados iram criar propositalmente heterocedasticidade (variâncias diferentes), para que possamos ver o efeito nos testes de pressupostos

2.1 Simulação dos dados

Tratamento Média Desvio Padrão
PID 1.2 0.1
AutoPID 1.0 0.3
Fuzzy 0.8 0.15
LQR 0.9 0.5
# Instala e carrega pacotes, se necessário
if (!require("dplyr")) install.packages("dplyr")
if (!require("gt")) install.packages("gt")
library(dplyr)
library(gt)
library(glue)

# Define tratamentos
tratamentos <- rep(c("PID", "AutoPID", "Fuzzy", "LQR"), each = 5)

# Simula os valores
set.seed(42)
valores <- c(
  rnorm(5, mean = 1.2, sd = 0.1),
  rnorm(5, mean = 1.0, sd = 0.3),
  rnorm(5, mean = 0.8, sd = 0.15),
  rnorm(5, mean = 0.9, sd = 0.5)
)

# Cria data frame
dados <- data.frame(
  Tratamento = tratamentos,
  Repeticao = rep(1:5, times = 4),
  EMA = round(valores, 3)
)

# Gera tabela com 'gt'
dados %>%
  arrange(Tratamento, Repeticao) %>%
  gt() %>%
  tab_header(
    title = "Tabela de Erro Médio Absoluto por Tratamento"
  ) %>%
  cols_label(
    Tratamento = "Controlador",
    Repeticao = "Repetição",
    EMA = "Erro Médio Absoluto"
  )
Tabela de Erro Médio Absoluto por Tratamento
Controlador Repetição Erro Médio Absoluto
AutoPID 1 0.968
AutoPID 2 1.453
AutoPID 3 0.972
AutoPID 4 1.606
AutoPID 5 0.981
Fuzzy 1 0.996
Fuzzy 2 1.143
Fuzzy 3 0.592
Fuzzy 4 0.758
Fuzzy 5 0.780
LQR 1 1.218
LQR 2 0.758
LQR 3 -0.428
LQR 4 -0.320
LQR 5 1.560
PID 1 1.337
PID 2 1.144
PID 3 1.236
PID 4 1.263
PID 5 1.240
# Instala e carrega pacotes necessários
pacotes <- c("car", "nortest", "lmtest", "ggplot2")
instalar <- pacotes[!pacotes %in% installed.packages()]
if (length(instalar)) install.packages(instalar)
invisible(lapply(pacotes, library, character.only = TRUE))

set.seed(42) # Reprodutibilidade

# ------------------------
# 1. SIMULAÇÃO DO EXPERIMENTO
# ------------------------

tratamento <- rep(c("PID", "AutoPID", "Fuzzy", "LQR"), each = 5)
ema <- c(
  rnorm(5, mean = 1.2, sd = 0.1),
  rnorm(5, mean = 1.0, sd = 0.3),
  rnorm(5, mean = 0.8, sd = 0.15),
  rnorm(5, mean = 0.9, sd = 0.5)
)
dados <- data.frame(Tratamento = tratamento, EMA = ema)

# ------------------------
# 2. AJUSTE DO MODELO ANOVA ORIGINAL
# ------------------------

modelo <- aov(EMA ~ Tratamento, data = dados)
residuos <- residuals(modelo)
ajustados <- fitted(modelo)

# Cria data.frame auxiliar para gráficos
res_df <- data.frame(Tratamento = dados$Tratamento, Residuos = residuos, Ajustados = ajustados)


# ------------------------
# 4. TESTES DE PRESSUPOSTOS
# ------------------------

cat("Testes estatísticos do modelo original")
## Testes estatísticos do modelo original
print(shapiro.test(residuos))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.94125, p-value = 0.2532
print(bartlett.test(EMA ~ Tratamento, data = dados))
## 
##  Bartlett test of homogeneity of variances
## 
## data:  EMA by Tratamento
## Bartlett's K-squared = 18.937, df = 3, p-value = 0.0002818
print(leveneTest(EMA ~ Tratamento, data = dados))
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value  Pr(>F)  
## group  3  4.8527 0.01377 *
##       16                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
print(durbinWatsonTest(modelo))
##  lag Autocorrelation D-W Statistic p-value
##    1      -0.1222469      1.978566   0.418
##  Alternative hypothesis: rho != 0
# ------------------------
# 3. GRÁFICOS DE DIAGNÓSTICO - MODELO ORIGINAL
# ------------------------

par(mfrow = c(2, 2))  # Layout de 4 plots

hist(residuos, main = "Histograma dos Resíduos", xlab = "Resíduos", col = "lightblue", border = "black")
qqnorm(residuos, main = "QQ-Plot dos Resíduos")
qqline(residuos, col = "red")
plot(res_df$Ajustados, res_df$Residuos, main = "Resíduos vs Ajustados",
     xlab = "Valores Ajustados", ylab = "Resíduos", pch = 19)
abline(h = 0, col = "red", lty = 2)
boxplot(Residuos ~ Tratamento, data = res_df,
        main = "Resíduos vs Tratamento", xlab = "Tratamento", ylab = "Resíduos", col = "lightgray")

2.2 Testes de Pressuposições

Teste Objetivo Resultado Esperado p>0.05
shapiro.test() Teste de normalidade dos resíduos ✔ Se normalidade for válida
bartlett.test() Teste de igualdade de variâncias (sensível) ✖ Se variâncias forem diferentes
leveneTest() Teste robusto de igualdade de variâncias ✖ Se variâncias forem diferentes
durbinWatsonTest() Teste de independência dos resíduos ✔ Valor próximo de 2

São gerados quatro gráficos para diagnosticar o modelo:

  • Histograma dos resíduos – verifica a simetria/normalidade.

  • QQ-plot – avalia se os resíduos seguem a distribuição normal.

  • Resíduos vs Ajustados – avalia homogeneidade das variâncias.

  • Resíduos vs Tratamento – verifica padrão de variância entre grupos.

2.3 Resultado

Espera-se ver dispersões desiguais no gráfico (3) e (4), indicando necessidade de transformação.

3 Conclusão

A análise realizada demonstra a eficácia da ANOVA como uma ferramenta estatística para detectar diferenças entre grupos experimentais. A ANOVA baseia-se em pressupostos fundamentais: normalidade dos resíduos, homogeneidade das variâncias (homocedasticidade) e independência dos erros. Quando essas condições são atendidas, a ANOVA fornece resultados confiáveis e interpretações robustas.

No entanto, como ilustrado neste experimento simulado, a violação desses pressupostos compromete a validade da análise. A introdução intencional de variâncias diferentes entre os grupos permitiu observar como os testes de Bartlett e Levene sinalizam a heterocedasticidade, enquanto os gráficos de resíduos reforçam essa visualização com padrões de dispersão desigual.

A ANOVA continua sendo útil mesmo quando os dados brutos violam seus pressupostos, desde que sejam adotadas estratégias adequadas de transformação ou uso de modelos alternativos (como ANOVA robusta ou modelos não paramétricos, em casos extremos).

Portanto, este relatório reforça que a ANOVA é eficaz e sensível, mas não é à prova de erros: ela depende fortemente das condições sob as quais é aplicada. Identificar e tratar adequadamente essas violações é essencial para que os resultados reflitam fielmente a realidade do sistema analisado.