Anova 1 fator

Anova

Quando se trabalha com 2 tratamentos, os passos para seguir são: Teste de normalidade - shapiro.test, seguido de var.test, que se o p-valor der menor que 0,05 realiza testes não paramétricos (Mann-Whitney e Wilcoxon). Caso o p-vallor seja maior que 0,05, realiza-se o t.test —-> var.equal = F.

Anova com 1 fator

Pergunta a ser resposndida: Há efeito da espécie no crescimento micelial?

library(readxl)
library(tidyverse)
micelial <- read_excel("dados-diversos.xlsx", "micelial")
head(micelial)
# A tibble: 6 × 3
  especie   rep   tcm
  <chr>   <dbl> <dbl>
1 Fasi        1  1.5 
2 Fasi        2  1.59
3 Fasi        3  1.52
4 Fasi        4  1.52
5 Fasi        5  1.24
6 Fasi        6  1.29
micelial |>
  ggplot(aes(especie, tcm))+
  geom_boxplot()

###Usando AOV

Cria um novo modelo para atribuir a função aov() contendo os argumentos (tcm em função de espécie). Depois disso, resume o novo modelo criado com a função summary.

aov1 <- aov(tcm ~ especie, data = micelial)
summary(aov1)
            Df Sum Sq Mean Sq F value Pr(>F)
especie      4 0.4692 0.11729   1.983  0.117
Residuals   37 2.1885 0.05915               

Conclusão: Nesse conjunto de dados, não há diferença na media micelial (não há efeito significativo da espécie sobre o cresc. micelial).

Testando as premissas

Depois de fazer a anova, testa-se as premissas. É mais importante os dados serem homogeneos do que normais. Testando as premissas da anova - de normalidade e homocedasticidade do modelo: Para testar as premissas, é necessário instalar e carregar o pacote performance e o pacote DHARMa. O pacote performance permite checar as premissas (check_), já o pacote DHARMA ((Distributed Hierarchical Accumulation of Residuals for Generalized Linear Models in R) é para visualizar os dados pelo diagnóstico do resíduo (O pacote DHARMa permite faz uma comparação dos resíduos simulados, que são gerados pelo pacote, com os resíduos observados) e ver graficamente quando a distribuição dos dados não é normal e/ou quando há variação heterocedástica.

library(performance)
check_heteroscedasticity(aov1)
OK: Error variance appears to be homoscedastic (p = 0.175).
check_normality(aov1)
OK: residuals appear as normally distributed (p = 0.074).
library(DHARMa)
hist (aov1$residuals)

qqnorm(aov1$residuals)
qqline(aov1$residuals)

plot(simulateResiduals(aov1))

shapiro.test(aov1$residuals)

    Shapiro-Wilk normality test

data:  aov1$residuals
W = 0.95101, p-value = 0.07022

Novo conjunto de dados - Dados não paramétricos

Abrir um conjunto de dados que está no R chamado InsectSprays.

insects <- as_tibble(InsectSprays) |>
  select(spray, count)
insects |>
  ggplot(aes(spray, count))+
  geom_boxplot()

Rodando o modelo de anova: como os dados, aparentemente - pelo visual do gráfico - apresentaram-se não paramétricos, roda-se a anova e testa-se as premissas para confirmação.

aov2 <- aov(count ~ spray, data = insects)
summary(aov2)
            Df Sum Sq Mean Sq F value Pr(>F)    
spray        5   2669   533.8    34.7 <2e-16 ***
Residuals   66   1015    15.4                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
check_normality(aov2)
Warning: Non-normality of residuals detected (p = 0.022).
check_heteroscedasticity(aov2)
Warning: Heteroscedasticity (non-constant error variance) detected (p < .001).

Interpretação: dados não são normais e homogeneos.

Alternativas para dados não paramétricos:

Quando se tem dados não paramétricos, tem-se 3 alternativas - transformar os dados (raiz quadrada, log, etc); usar testes não paramétricos (Kruskal) ou usar modelos lineares generalizados (melhor opção).

  1. Transformar os dados para normalizar: Usa-se a raiz quadrada para tentar noprmalizar e tornar os dados normais e homogenos. Pode-se também tentar o log da variável resposta + 0.5.
aov2 <- aov(sqrt(count) ~ spray, data = insects)
summary(aov2)
            Df Sum Sq Mean Sq F value Pr(>F)    
spray        5  88.44  17.688    44.8 <2e-16 ***
Residuals   66  26.06   0.395                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
check_normality(aov2)
OK: residuals appear as normally distributed (p = 0.681).
check_heteroscedasticity(aov2)
OK: Error variance appears to be homoscedastic (p = 0.854).
  1. Se não normalizar e os dados ainda forem heterogenos, usa-se testes não paramétricos. Tem 2 opções de teste Kruskal. Para usar essa opção, é necessário baixar e carregar o pacote agricolae.
kruskal.test(count ~ spray, data = insects)

    Kruskal-Wallis rank sum test

data:  count by spray
Kruskal-Wallis chi-squared = 54.691, df = 5, p-value = 1.511e-10
library(agricolae)
kruskal(insects$count, insects$spray, 
        console = TRUE) #separa por grupos.

Study: insects$count ~ insects$spray
Kruskal-Wallis test's
Ties or no Ties

Critical Value: 54.69134
Degrees of freedom: 5
Pvalue Chisq  : 1.510845e-10 

insects$spray,  means of the ranks

  insects.count  r
A      52.16667 12
B      54.83333 12
C      11.45833 12
D      25.58333 12
E      19.33333 12
F      55.62500 12

Post Hoc Analysis

t-Student: 1.996564
Alpha    : 0.05
Minimum Significant Difference: 8.462804 

Treatments with the same letter are not significantly different.

  insects$count groups
F      55.62500      a
B      54.83333      a
A      52.16667      a
D      25.58333      b
E      19.33333     bc
C      11.45833      c

Pacote emmeans

O pacote emmeans (“estimated marginal means”, ou médias marginais estimadas) é usado para realizar testes de comparação de médias entre grupos, ajustando para outros fatores importantes que podem influenciar as médias. O pacote é particularmente útil em modelos lineares generalizados (GLM).

Função emmeans - tirar a média da variável inseticida: Para dar o valor original da média e não o valor transformado, usa-se a função type = response. A função pwpm gera uma tabela de comparação das médias e cld é uma função que serve para gerar os números que diferenciam os grupos de médias.

aov2 <- aov(count ~ spray, data = insects)
summary(aov2)
            Df Sum Sq Mean Sq F value Pr(>F)    
spray        5   2669   533.8    34.7 <2e-16 ***
Residuals   66   1015    15.4                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
check_normality(aov2)
Warning: Non-normality of residuals detected (p = 0.022).
check_heteroscedasticity(aov2)
Warning: Heteroscedasticity (non-constant error variance) detected (p < .001).
library(emmeans)
aov2 <- means <- emmeans(aov2, ~ spray,
                         type = "response")
  1. GLM A terceira opção é a geração de modelos lineares generalizados. Para publicação de artigos, essa é a opção mais aconselhável, é mais elegante do que transformar os dados. Para visualizar, pode usar o pacote Dharma e puxar um plot.
glm1 <- glm(count ~spray,
             data = insects,
            
             family = poisson(link = "identity"))
plot(simulateResiduals(glm1))

summary(glm1)

Call:
glm(formula = count ~ spray, family = poisson(link = "identity"), 
    data = insects)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.3852  -0.8876  -0.1482   0.6063   2.6922  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  14.5000     1.0992  13.191  < 2e-16 ***
sprayB        0.8333     1.5767   0.529    0.597    
sprayC      -12.4167     1.1756 -10.562  < 2e-16 ***
sprayD       -9.5833     1.2720  -7.534 4.92e-14 ***
sprayE      -11.0000     1.2247  -8.981  < 2e-16 ***
sprayF        2.1667     1.6116   1.344    0.179    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 409.041  on 71  degrees of freedom
Residual deviance:  98.329  on 66  degrees of freedom
AIC: 376.59

Number of Fisher Scoring iterations: 3