library (tidyverse)
library(tidyverse)
library(readxl)
library(ggplot2)
<- read_excel("dados-diversos.xlsx", "fungicida_vaso") fung
Anova 2 fatores
Fazendo anova para mais de um fator
Carregar dados : fungicida_vaso: 2 fungicidas x 2 doses (quando é duas doses fica como fator qualitativo).
n de repetições: 5
n-sp : numero de espigas
dis-sp: numero de espigas doentes
Criando a variável percentual de espigas
mutate pra criar uma outra coluna para incidência
<- fung |>
fung2 mutate(inc = dis_sp / n_sp * 100)
criando um gráfico para visualizar
com esse grafico conseguimos visualizar que provavelmente tem interação fungicida ~ dose
|>
fung2 ggplot(aes(x= treat, y =inc))+
geom_jitter(width = 0.1)+
facet_wrap(~dose)
anova: considerando dois fatores qualitativos
interpretando anova: todos as fontes de variação foram significativas
<- aov(inc ~ treat*dose, data = fung2)
m1 summary(m1)
Df Sum Sq Mean Sq F value Pr(>F)
treat 1 919.5 919.5 24.31 0.000151 ***
dose 1 920.9 920.9 24.34 0.000150 ***
treat:dose 1 747.7 747.7 19.76 0.000407 ***
Residuals 16 605.3 37.8
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
conferindo premissas com pacote performance
dados não foram homogêneos e nem homocedasticidade
library(performance)
check_normality(m1)
Warning: Non-normality of residuals detected (p = 0.018).
check_heteroscedasticity(m1)
Warning: Heteroscedasticity (non-constant error variance) detected (p < .001).
library(DHARMa)
plot(simulateResiduals(m1))
tranformando dados > Que transformação usa pra percentagem > log +0.5
conseguiu ter homcedasticidade
como a normalidade deu 0.05 consegue ainda fazer, o que é mais importante é a homocedasticidade
<- aov(log(inc+0.5) ~ treat*dose, data = fung2)
m1 summary(m1)
Df Sum Sq Mean Sq F value Pr(>F)
treat 1 12.928 12.928 13.980 0.00179 **
dose 1 5.663 5.663 6.124 0.02491 *
treat:dose 1 5.668 5.668 6.129 0.02486 *
Residuals 16 14.796 0.925
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
check_normality(m1)
Warning: Non-normality of residuals detected (p = 0.050).
check_heteroscedasticity(m1)
OK: Error variance appears to be homoscedastic (p = 0.180).
plot(simulateResiduals(m1))
library(emmeans)#comparando médias, médias pra cada interação
<- emmeans(m1, ~ treat | dose,
means_m1 type= "response")
means_m1
dose = 0.5:
treat response SE df lower.CL upper.CL
Ionic liquid 27.05 11.847 16 10.570 68.05
Tebuconazole 1.21 0.737 16 0.188 3.76
dose = 2.0:
treat response SE df lower.CL upper.CL
Ionic liquid 3.10 1.412 16 1.065 7.77
Tebuconazole 1.42 0.925 16 0.194 4.83
Confidence level used: 0.95
Intervals are back-transformed from the log(mu + 0.5) scale
library(multcompView)
library(multcomp)
cld(means_m1)
dose = 0.5:
treat response SE df lower.CL upper.CL .group
Tebuconazole 1.21 0.737 16 0.188 3.76 1
Ionic liquid 27.05 11.847 16 10.570 68.05 2
dose = 2.0:
treat response SE df lower.CL upper.CL .group
Tebuconazole 1.42 0.925 16 0.194 4.83 1
Ionic liquid 3.10 1.412 16 1.065 7.77 1
Confidence level used: 0.95
Intervals are back-transformed from the log(mu + 0.5) scale
Tests are performed on the log scale
significance level used: alpha = 0.05
NOTE: If two or more means share the same grouping letter,
then we cannot show them to be different.
But we also did not show them to be the same.
#agora ao contrario
<- emmeans(m1, ~ dose | treat,
means_m1 type= "response")
means_m1
treat = Ionic liquid:
dose response SE df lower.CL upper.CL
0.5 27.05 11.847 16 10.570 68.05
2.0 3.10 1.412 16 1.065 7.77
treat = Tebuconazole:
dose response SE df lower.CL upper.CL
0.5 1.21 0.737 16 0.188 3.76
2.0 1.42 0.925 16 0.194 4.83
Confidence level used: 0.95
Intervals are back-transformed from the log(mu + 0.5) scale
library(multcompView)
library(multcomp)
cld(means_m1)
treat = Ionic liquid:
dose response SE df lower.CL upper.CL .group
2.0 3.10 1.412 16 1.065 7.77 1
0.5 27.05 11.847 16 10.570 68.05 2
treat = Tebuconazole:
dose response SE df lower.CL upper.CL .group
0.5 1.21 0.737 16 0.188 3.76 1
2.0 1.42 0.925 16 0.194 4.83 1
Confidence level used: 0.95
Intervals are back-transformed from the log(mu + 0.5) scale
Tests are performed on the log scale
significance level used: alpha = 0.05
NOTE: If two or more means share the same grouping letter,
then we cannot show them to be different.
But we also did not show them to be the same.
library(agricolae)
cv.model(m1)
[1] 65.04818
Anova com dois fatores para dados sem normalidade
library(readxl)
library(tidyverse)
<- read_excel("dados-diversos.xlsx", "fungicida_vaso")
micelial <- micelial |>
micelial2 mutate(inc = inf_seeds/n_seeds*100, rank_inc = rank(inc)) #transforma os dados da variavel resposta (inc)
<- aov(rank_inc ~ treat*dose, data = micelial2)
rank_anova summary(rank_anova)
Df Sum Sq Mean Sq F value Pr(>F)
treat 1 220.00 220.00 14.204 0.00168 **
dose 1 105.34 105.34 6.801 0.01904 *
treat:dose 1 80.34 80.34 5.187 0.03684 *
Residuals 16 247.82 15.49
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
library(emmeans)
<- emmeans(rank_anova, ~ treat | dose)
means_rank library(multcompView)
library(multcomp)
cld(means_rank) #não usar as médias daqui, colocar médias reais e só usar a separação das médias . Se não der siginificativo a interação vc pode usar a anova sozinha, pra cada fator ou faz kruskal normal que separa pra um fator.
dose = 0.5:
treat emmean SE df lower.CL upper.CL .group
Tebuconazole 6.90 1.76 16 3.17 10.6 1
Ionic liquid 18.00 1.76 16 14.27 21.7 2
dose = 2.0:
treat emmean SE df lower.CL upper.CL .group
Tebuconazole 6.75 1.97 16 2.58 10.9 1
Ionic liquid 9.75 1.61 16 6.34 13.2 1
Confidence level used: 0.95
significance level used: alpha = 0.05
NOTE: If two or more means share the same grouping letter,
then we cannot show them to be different.
But we also did not show them to be the same.
fazendo outra coisa
library(MASS)
<- InsectSprays
insects
<- boxcox(lm(InsectSprays$count+0.1 ~1)) #depende da tabelinha do lang vc sabe qual é a transformação pra ver quan é o lambda b
<- b$x[which.max(b$y)]
lambda lambda
[1] 0.4242424
$count2 <- (insects$count ^ lambda - 1) / lambda
insects
$count2 insects
[1] 3.903635 3.024469 6.043993 4.864268 4.864268 4.407118 3.903635
[8] 6.557185 5.484274 6.043993 4.864268 4.640760 4.161975 5.484274
[15] 6.219699 4.161975 5.285168 4.864268 5.484274 5.484274 5.863153
[22] 6.219699 3.024469 4.640760 -2.357143 0.000000 3.024469 0.805831
[29] 1.399509 0.000000 0.805831 0.000000 1.399509 -2.357143 0.000000
[36] 1.887150 1.399509 2.308577 4.407118 2.683787 1.887150 1.399509
[43] 2.308577 2.308577 2.308577 2.308577 0.805831 1.887150 1.399509
[50] 2.308577 1.399509 2.308577 1.399509 2.683787 0.000000 0.000000
[57] 1.399509 0.805831 2.683787 1.887150 4.161975 3.629951 5.078760
[64] 6.390651 5.078760 5.285168 4.640760 3.903635 7.033117 7.033117
[71] 6.719601 4.640760
hist(insects$count)
#quando eu transformar os dados pra ver se tem normalidade ou não eu tenho que além de fazer o teste de heterocedasticidade visualizar a normalidade dos gráficos.
#no pacote agricolae colocar um ponto de interrogação pra ver qual o teste para separar as médias.