Experimento Anova

Anova de um fator

library(readxl)
experimentos_anova_1 <- read_excel("experimentos_anova.xlsx", 
    sheet = "ANOVA_Um_Fator")
aov1 <- aov(experimentos_anova_1$Crescimento ~ experimentos_anova_1$Fertilizante, data=experimentos_anova_1)
summary(aov1)
##                                    Df Sum Sq Mean Sq F value Pr(>F)
## experimentos_anova_1$Fertilizante   2     12   6.005   0.244  0.784
## Residuals                         997  24552  24.626

Como o p-valor é maior que 0.05, não existe diferença estatística entre os tipos de fertilizantes.

Anova de dois fatores

library(readxl)
experimentos_anova_2 <- read_excel("experimentos_anova.xlsx", 
    sheet = "ANOVA_Dois_Fatores_Modificado")
aov2 <- aov(Crescimento ~ Fertilizante * Água, data = experimentos_anova_2)
summary(aov2)
##                    Df Sum Sq Mean Sq F value Pr(>F)    
## Fertilizante        2    196      98   3.918 0.0202 *  
## Água                1  14548   14548 581.081 <2e-16 ***
## Fertilizante:Água   2     49      25   0.986 0.3734    
## Residuals         994  24885      25                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Neste caso, como o p-valor do fator Fertilizante é 0.0202, que é menor que o nível de significância de 0.05, concluímos que o tipo de fertilizante causa uma diferença estatisticamente significativa no crescimento das plantas. Portanto, diferentes fertilizantes influenciam de forma distinta o resultado da variável resposta.

Assemble Time

library(readxl)
assemble_time <- read_excel("assemble_time.xlsx")
dados <- read_excel("assemble_time.xlsx")
head(dados)
## # A tibble: 6 × 5
##   antes treinamento_01 treinamento_02 treinamento_03 treinamento_04
##   <dbl>          <dbl>          <dbl>          <dbl>          <dbl>
## 1  28.8           78.2           92.9           89.6           79.6
## 2  71.8           67.6           82.9           85.1           73.5
## 3  72.6           80.8           64.8           84.5           79.3
## 4  81.0           76.0           95.6           80.0           86.0
## 5  68.3           80.9           86.8           88.9           84.5
## 6  74.2           77.7           75.5           81.6           83.3
# Comparar 'antes' com cada sessão de treinamento
wilcox.test(dados$antes, dados$treinamento_01, paired = TRUE)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  dados$antes and dados$treinamento_01
## V = 24595, p-value = 0.001241
## alternative hypothesis: true location shift is not equal to 0
wilcox.test(dados$antes, dados$treinamento_02, paired = TRUE)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  dados$antes and dados$treinamento_02
## V = 20718, p-value = 1.321e-07
## alternative hypothesis: true location shift is not equal to 0
wilcox.test(dados$antes, dados$treinamento_03, paired = TRUE)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  dados$antes and dados$treinamento_03
## V = 8174, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
wilcox.test(dados$antes, dados$treinamento_04, paired = TRUE)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  dados$antes and dados$treinamento_04
## V = 8928, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

Após aplicar o teste de Wilcoxon para amostras pareadas, observou-se que todos os treinamentos reduziram significativamente o tempo de montagem quando comparados ao tempo inicial (“antes”). Os treinamentos 3 e 4 foram os que apresentaram os resultados mais expressivos, com p-valores extremamente baixos, indicando forte evidência de melhoria no desempenho.

Teste de Velocidade

library(tidyr)
# Transformar para formato longo
dados_largos <- read_excel("teste_velocidade.xlsx") |> 
  pivot_longer(cols = everything(), names_to = "algoritmo", values_to = "tempo")

head(dados_largos)
## # A tibble: 6 × 2
##   algoritmo     tempo
##   <chr>         <dbl>
## 1 Algorith_A 0.000031
## 2 Algorith_B 0.000183
## 3 Algorith_C 0.000824
## 4 Algorith_D 0.773   
## 5 Algorith_E 0.854   
## 6 Algorith_A 0.0445

Teste de normalidade (Shapiro-Wilk)

by(dados_largos$tempo, dados_largos$algoritmo, shapiro.test)
## dados_largos$algoritmo: Algorith_A
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.9579, p-value = 2.773e-09
## 
## ------------------------------------------------------------ 
## dados_largos$algoritmo: Algorith_B
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.95079, p-value = 2.802e-10
## 
## ------------------------------------------------------------ 
## dados_largos$algoritmo: Algorith_C
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.96136, p-value = 9.237e-09
## 
## ------------------------------------------------------------ 
## dados_largos$algoritmo: Algorith_D
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.99759, p-value = 0.835
## 
## ------------------------------------------------------------ 
## dados_largos$algoritmo: Algorith_E
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.94697, p-value = 8.898e-11

A maioria dos algoritmos (A, B, C e E) não segue distribuição normal (p < 0.05). Portanto, usaremos o teste de Kruskal-Wallis.

Teste de Kruskal-Wallis

kruskal.test(tempo ~ algoritmo, data = dados_largos)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  tempo by algoritmo
## Kruskal-Wallis chi-squared = 356.14, df = 4, p-value < 2.2e-16

O teste de Kruskal-Wallis indicou diferença significativa entre os algoritmos (p < 0.05).

Teste Post-hoc de Dunn (com correção de Bonferroni)

library(FSA)
## ## FSA v0.10.0. See citation('FSA') if used in publication.
## ## Run fishR() for related website and fishR('IFAR') for related book.
dunnTest(tempo ~ algoritmo, data = dados_largos, method = "bonferroni")
## Warning: algoritmo was coerced to a factor.
## Dunn (1964) Kruskal-Wallis multiple comparison
##   p-values adjusted with the Bonferroni method.
##                 Comparison           Z      P.unadj        P.adj
## 1  Algorith_A - Algorith_B   1.8128429 6.985606e-02 6.985606e-01
## 2  Algorith_A - Algorith_C   2.4326844 1.498736e-02 1.498736e-01
## 3  Algorith_B - Algorith_C   0.6198415 5.353621e-01 1.000000e+00
## 4  Algorith_A - Algorith_D -12.2875801 1.056206e-34 1.056206e-33
## 5  Algorith_B - Algorith_D -14.1004229 3.775004e-45 3.775004e-44
## 6  Algorith_C - Algorith_D -14.7202645 4.777881e-49 4.777881e-48
## 7  Algorith_A - Algorith_E  -8.5342466 1.410717e-17 1.410717e-16
## 8  Algorith_B - Algorith_E -10.3470895 4.314014e-25 4.314014e-24
## 9  Algorith_C - Algorith_E -10.9669310 5.511136e-28 5.511136e-27
## 10 Algorith_D - Algorith_E   3.7533335 1.744985e-04 1.744985e-03

Média dos tempos por algoritmo

aggregate(tempo ~ algoritmo, data = dados_largos, mean)
##    algoritmo     tempo
## 1 Algorith_A 0.5264293
## 2 Algorith_B 0.4860531
## 3 Algorith_C 0.4809547
## 4 Algorith_D 0.7615998
## 5 Algorith_E 0.7105089

Gráfico comparativo

library(ggplot2)
ggplot(dados_largos, aes(x = algoritmo, y = tempo, fill = algoritmo)) +
  geom_boxplot() +
  theme_minimal() +
  labs(title = "Comparação de Tempo entre Algoritmos", y = "Tempo", x = "Algoritmo")

Com base no teste de Kruskal-Wallis (p < 0.05) e no teste de Dunn com correção de Bonferroni:

Os algoritmos A, B e C não apresentaram diferenças significativas entre si e foram estatisticamente mais rápidos.

Os algoritmos D e E foram significativamente mais lentos.

Houve também diferença significativa entre D e E, com E sendo melhor que D.

🏆 Melhor desempenho: O algoritmo C teve o menor tempo médio (0.48095), seguido de perto por B (0.48605) e A (0.52643).

O algoritmo D foi o pior em desempenho, com tempo médio de 0.76160.