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)
Os dados iram criar propositalmente heterocedasticidade (variâncias diferentes), para que possamos ver o efeito nos testes de pressupostos
| 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
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.94125, p-value = 0.2532
##
## Bartlett test of homogeneity of variances
##
## data: EMA by Tratamento
## Bartlett's K-squared = 18.937, df = 3, p-value = 0.0002818
## 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
## 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")| 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.
Espera-se ver dispersões desiguais no gráfico (3) e (4), indicando necessidade de transformaçã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.