Sumário


1 Objetivo

Neste relatório, deve-se analisar um experimento em DBC (Delineamento em Blocos Causalizado), que agrupa as variáveis e tratamentos em grupos para realizarmos uma análise, a fim de aumentar a precisão dos testes e controlar a variabilidade entre blocos.

Muito semelhante ao Relatório 04, deve-se realizar uma Análise Descritiva geral e de cada tratamento (com média, desvio padrão e coeficiente de variação) e uma análise gráfica de Boxplot. Também é necessário realizar uma Análise de Variância, com hipóteses H0 e H1, tabela de ANAVA, e análise gráfica de resíduos.

2 Desenvolvimento

Para este relatório, devemos analisar o banco de dados abaixo, que relaciona o Consumo de Energia para Percurso (Wh) de 3 tipos de motores, avaliando cada um em 4 tipos de pisos (cimento, borracha, carpete, asfalto).

## 
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
## 
##     filter, lag
## Os seguintes objetos são mascarados por 'package:base':
## 
##     intersect, setdiff, setequal, union
Piso Motor Consumo
1 A 12.1
1 B 10.9
1 C 9.8
2 A 11.4
2 B 10.5
2 C 9.5
3 A 13.0
3 B 11.8
3 C 10.2
4 A 12.7
4 B 11.0
4 C 10.0

2.1 Análise Descritiva

Para a realizar a Análise Descritiva, foi necessário calcular a média (X barra), o desvio padrão (S) e o coeficiente de variação (CV), de forma geral e de cada tratamento, conforme o código abaixo.

2.1.1 Análise Geral

Conforme é possível ver abaixo, estes são os valores gerais de média (11.075), Desvio Padrão (1.145049) e Coeficiente de Variação (10.33904).

Estatística Valor
Média Geral 11.075000
Desvio Padrão Geral 1.145049
Coeficiente de Variação (%) 10.339040

2.1.2 Análise por Tratamento

Nas tabelas abaixo, é possível ver a Média, o Desvio Padrão e o Coeficiente de Variância de cada tipo de motor, e de cada tipo de piso.

Motor Média Desvio_Padrão CV
A 12.300 0.707 5.749
B 11.050 0.545 4.929
C 9.875 0.299 3.024
Piso Média Desvio_Padrão CV
1 10.933 1.150 10.522
2 10.467 0.950 9.081
3 11.667 1.405 12.041
4 11.233 1.365 12.152

2.1.3 Boxplot

Seguindo abaixo, é possível perceber os gráficos Boxplot do consumo de energia por marca de motor (A, B, C), e consumo por tipo de piso (1, 2, 3, 4).

É possível analisar que no gráfico dos motores, os tipos A e C possuem uma distribuição bem equilibrada de consumo, enquanto o motor B tende a uma distribuição de valores mais próxima de seu terceiro quartil.

Sobre o gráfico dos pisos, se destacam os números 3 e 4, que possuem uma distribuição maior para o primeiro e terceiro quartis, respectivamente. Válido ressaltar que o piso 3 possui uma mediana de valor mais alto entre os quatro, enquanto o piso 2 possui a menor.

2.2 Análise de Variância

Para a Analise de Variância, deve ser estabelecida a relação entre as hipóteses H₀ e H₁, uma tabela ANAVA e uma análise gráfica de resíduos.

Para a relação das hipóteses, segue a explicação abaixo:

H₀: μ₁ = μ₂ = μ₃ = μ₄ = μ₅

H₁: ao menos um difere significativamente

Abaixo, podemos ver a tabela ANAVA utilizando a função sugerida pelo professor. Para a representação em uma tabela mais elaborada, foi necessário converter a função summary(modelo) para um data frame data_summary.

##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Motor        2 11.765   5.883   97.59 2.65e-05 ***
## Piso         3  2.296   0.765   12.70  0.00522 ** 
## Residuals    6  0.362   0.060                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##             Df     Sum Sq    Mean Sq  F value       Pr(>F)
## Motor        2 11.7650000 5.88250000 97.58986 2.652779e-05
## Piso         3  2.2958333 0.76527778 12.69585 5.224308e-03
## Residuals    6  0.3616667 0.06027778       NA           NA
Tabela ANOVA - DBC (Motor + Piso)
Fonte GL Soma.dos.Quadrados Quadrado.Médio Valor.F Pr..F.
Motor 2 11.765 5.883 97.59 2.65e-05
Piso 3 2.296 0.765 12.7 0.00522
Resíduo 6 0.362 0.060 NA NA

Com isso, é possível afirmar que ambos os valores P (dos motores e dos pisos) é muito menor que o alpha definido como (0,05), portanto, pode-se confirmar que há diferença entre os tipos de motores (A, B, C) e pisos (cimento, borracha, carpete, asfalto).

2.3 Análise gráfica dos resíduos

Sobre a análise de resíduos, é possível observar que:

No gráfico Residuals vs fitted, é possível perceber que há uma distribuição não-linear dos resíduos, podendo observar quase uma parábola. Caso fizessemos uma análise mais aprofundada, poderia até ser possível encontrar a relação quadrárica que define o modelo.

Há uma normalidade da dsitribuição dos resíduos, visto o Gráfico Q-Q ser aproximadamente linear, com apenas alguns dos últimos pontos se destacando, porém nada fora do normal.

O gráfico Scale Location apresenta uma homocedasticidade (variância constante) que está, no geral, distribuida de forma aleatória acima e abaixo da linha de regrssão (vermelha).

E por fim, o gráfico Constant Leverage: Residuals vs Factor Levels apresenta um tratamento realmente aleatório, onde não existem casos que influenciam muito o modelo.

3 Conclusão

Com base nos resultados obtidos ao longo da análise, pode-se concluir que tanto o tipo de motor quanto o tipo de piso influenciam significativamente o consumo de energia durante o percurso. A utilização do Delineamento em Blocos Casualizado (DBC) foi adequada, pois permitiu controlar a variabilidade entre os tipos de piso e aumentou a precisão na comparação entre os motores.

A análise descritiva mostrou que o motor C teve, em média, o menor consumo energético, o que pode indicar maior eficiência energética nesse contexto experimental. Já o motor A apresentou o maior consumo médio, sendo potencialmente o menos eficiente entre os três avaliados. Em relação aos pisos, o tipo 3 (carpete) apresentou a maior média de consumo, enquanto o tipo 2 teve a menor, o que pode estar relacionado à resistência que cada tipo de piso oferece ao deslocamento.

A análise de variância reforçou essas observações, indicando que as diferenças encontradas são estatisticamente significativas, com valores de p muito inferiores ao nível de significância adotado (α = 0,05). Portanto, rejeita-se a hipótese nula de que todos os motores e pisos possuem médias iguais de consumo.

Por fim, a análise gráfica dos resíduos demonstrou que os pressupostos do modelo foram razoavelmente atendidos, permitindo confiar nos resultados da ANOVA. Assim, pode-se afirmar com segurança que há evidências estatísticas de que tanto o tipo de motor quanto o tipo de piso impactam o consumo energético, sendo relevante considerar esses fatores em decisões relacionadas à eficiência energética em percursos.

4 Código

Segue abaixo o código utilizado no relatório 05, que foi colocado nesta seção apenas para facilitar a visualização na página:

Código

library(dplyr)
library(gt)

piso <- factor(rep(1:4, each = 3))  # Blocos
motor <- factor(rep(c("A", "B", "C"), times = 4))  # Tratamentos
consumo <- c(12.1, 10.9, 9.8,
             11.4, 10.5, 9.5,
             13.0, 11.8, 10.2,
             12.7, 11.0, 10.0)

dados <- data.frame(Piso = piso, Motor = motor, Consumo = consumo)

# Exibir tabela formatada
dados |>
  gt() |>
  tab_style(
    style = list(cell_text(weight = "bold", color = "white"),
                 cell_fill(color = "black")),
    locations = cells_column_labels()
  ) |>
  tab_style(
    style = cell_text(align = "center"),
    locations = cells_body(columns = everything())
  ) |>
  data_color(
    columns = everything(),
    rows = seq(1, 3, 1),
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = seq(4, 6, 1),
    palette = "#FFB2B2"
  )|>
  data_color(
    columns = everything(),
    rows = seq(7, 9, 1),
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = seq(10, 12, 1),
    palette = "#FFB2B2"
  )

# Geral
media_geral <- mean(dados$Consumo)
dp_geral <- sd(dados$Consumo)
cv_geral <- (dp_geral / media_geral) * 100

tabela_estatisticas <- data.frame(
  Estatística = c("Média Geral", "Desvio Padrão Geral", "Coeficiente de Variação (%)"),
  Valor = c(media_geral, dp_geral, cv_geral)
)

tabela_estatisticas |>
  gt() |>
  tab_style(
    style = list(cell_text(weight = "bold", color = "white"),
                 cell_fill(color = "black")),
    locations = cells_column_labels()
  ) |>
  tab_style(
    style = cell_text(align = "center"),
    locations = cells_body(columns = everything())
  ) |>
  data_color(
    columns = everything(),
    rows = 1,
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = 2,
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = 3,
    palette = "#f2f2f2"
  )

# Por Tratamento
descr_trat <- dados %>%
  group_by(Motor) %>%
  summarise(
    Média = round(mean(Consumo), 3),
    Desvio_Padrão = round(sd(Consumo), 3),
    CV = round((sd(Consumo) / mean(Consumo)) * 100, 3)
  )

descr2 <- dados %>%
  group_by(Piso) %>%
  summarise(
    Média = round(mean(Consumo), 3),
    Desvio_Padrão = round(sd(Consumo), 3),
    CV = round((sd(Consumo) / mean(Consumo)) * 100, 3)
  )

descr_trat |>
  gt() |>
  tab_style(
    style = list(cell_text(weight = "bold", color = "white"),
                 cell_fill(color = "black")),
    locations = cells_column_labels()
  ) |>
  tab_style(
    style = cell_text(align = "center"),
    locations = cells_body(columns = everything())
  ) |>
  data_color(
    columns = everything(),
    rows = 1,
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = 2,
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = 3,
    palette = "#f2f2f2"
  )

descr2 |>
  gt() |>
  tab_style(
    style = list(cell_text(weight = "bold", color = "white"),
                 cell_fill(color = "black")),
    locations = cells_column_labels()
  ) |>
  tab_style(
    style = cell_text(align = "center"),
    locations = cells_body(columns = everything())
  ) |>
  data_color(
    columns = everything(),
    rows = 1,
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = 2,
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = 3,
    palette = "#f2f2f2"
  )|>
  data_color(
    columns = everything(),
    rows = 4,
    palette = "#f2f2f2"
  )

# 3. Boxplot dos tratamentos

boxplot(Consumo ~ Motor, data = dados,
        col = c("lightblue", "lightgreen", "salmon"),
        main = "Consumo de Energia por Marca de Motor",
        ylab = "Consumo (Wh)", xlab = "Motor")

boxplot(Consumo ~ Piso, data = dados,
        col = c("lightblue", "lightgreen", "salmon"),
        main = "Consumo de Energia por Tipo de Piso",
        ylab = "Consumo (Wh)", xlab = "Piso")

# 4. ANOVA - Modelo com blocos

modelo <- aov(Consumo ~ Motor + Piso, data = dados)
summary(modelo)

#Converter SUMMARY para Data Frame
data_summary <- data.frame(unclass(summary(modelo)), check.names = FALSE)

print(data_summary)

x <- "NA"

data_summary2 <- data.frame(
  Fonte = c("Motor", "Piso", "Resíduo"),
  GL = c(2, 3, 6),
  `Soma dos Quadrados` = c(11.765, 2.296, 0.362),
  `Quadrado Médio` = c(5.883, 0.765, 0.060),
  `Valor F` = c(97.59, 12.70, x),
  `Pr(>F)` = c(0.0000265, 0.00522, x)
)

data_summary2 |>
  gt() |>
  tab_header(title = "Tabela ANOVA - DBC (Motor + Piso)") |>
  tab_style(
    style = list(cell_text(weight = "bold", color = "white"),
                 cell_fill(color = "black")),
    locations = cells_column_labels()
  ) |>
  tab_style(
    style = cell_text(align = "center"),
    locations = cells_body(columns = everything())
  ) |>
  data_color(
    columns = everything(),
    rows = seq(1, 1, 1),
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = seq(2, 2, 1),
    palette = "#f2f2f2"
  ) |>
  data_color(
    columns = everything(),
    rows = seq(3, 3, 1),
    palette = "#f2f2f2"
  )

# 5. Análise resíduos

par(mfrow = c(2, 2))
plot(modelo)

# -----------------------------
# 6. Cálculo Manual da ANOVA
# -----------------------------

# Soma dos quadrados total
SQTotal <- sum((dados$Consumo - mean(dados$Consumo))^2)

# Soma dos quadrados do tratamento
SQT <- sum(tapply(dados$Consumo, dados$Motor, mean)^2 * 4) - (sum(dados$Consumo)^2 / 12)

# Soma dos quadrados do bloco
SQB <- sum(tapply(dados$Consumo, dados$Piso, mean)^2 * 3) - (sum(dados$Consumo)^2 / 12)

# Soma dos quadrados do resíduo
SQR <- SQTotal - SQT - SQB

# Graus de liberdade
GLT <- nlevels(dados$Motor) - 1
GLB <- nlevels(dados$Piso) - 1
GLR <- nrow(dados) - (GLT + GLB + 1)

# Quadrados médios
QMT <- SQT / GLT
QMB <- SQB / GLB
QMR <- SQR / GLR

# Valores F
FT <- QMT / QMR
FB <- QMB / QMR

# Tabela ANOVA manual
anova_manual <- data.frame(
  Fonte = c("Tratamento", "Bloco", "Resíduo", "Total"),
  GL = c(GLT, GLB, GLR, GLT + GLB + GLR),
  SQ = round(c(SQT, SQB, SQR, SQTotal), 4),
  QM = round(c(QMT, QMB, QMR, NA), 4),
  F = round(c(FT, FB, NA, NA), 4)
)

print(anova_manual)

Links de referência: https://library.virginia.edu/data/articles/diagnostic-plots