Transformações dos dados para normalidade e homocedasticidade

Nesta seção, são aplicadas transformações na variável resposta AACPD com o objetivo de atender às suposições do modelo linear misto, especialmente quanto à normalidade dos resíduos e homogeneidade das variâncias. São testadas três abordagens: logarítmica, Box-Cox e raiz quadrada (sqrt).

Transformação Logarítmica

A transformação logarítmica (log1p) é utilizada para reduzir a assimetria dos dados. A função log1p() aplica log(1 + x), o que permite lidar com valores próximos de zero sem gerar indefinições.

library(tidyverse)
library(pracma)
library(lme4)
library(lmerTest)
library(car)
library(readxl)

# Importar os dados
dados <- read_excel("Trabalho final Emerson.xlsx", sheet = "Planilha1")

# Calcular AACPD por unidade experimental
aacpd_result <- dados %>%
  group_by(Tratamento, Planta, Trifolio, Foliolo, Avaliador) %>%
  summarise(
    AACPD = trapz(Dia, Severidade),
    .groups = "drop"
  ) %>%
  mutate(
    AACPD_log = log1p(AACPD)  # transformação log(1 + x)
  )

# Modelo com AACPD transformado
modelo_log <- lmer(
  AACPD_log ~ Tratamento + (1 | Planta/Trifolio/Foliolo/Avaliador),
  data = aacpd_result
)

# Verificar resultados
summary(modelo_log)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: AACPD_log ~ Tratamento + (1 | Planta/Trifolio/Foliolo/Avaliador)
   Data: aacpd_result

REML criterion at convergence: 1209.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.85843 -0.53384 -0.02411  0.57727  3.02121 

Random effects:
 Groups                            Name        Variance Std.Dev.
 Avaliador:Foliolo:Trifolio:Planta (Intercept) 0.00000  0.0000  
 Foliolo:Trifolio:Planta           (Intercept) 0.00000  0.0000  
 Trifolio:Planta                   (Intercept) 0.08177  0.2859  
 Planta                            (Intercept) 0.00000  0.0000  
 Residual                                      0.33859  0.5819  
Number of obs: 660, groups:  
Avaliador:Foliolo:Trifolio:Planta, 60; Foliolo:Trifolio:Planta, 30; Trifolio:Planta, 10; Planta, 5

Fixed effects:
                     Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)           5.64861    0.11756  22.65246  48.050  < 2e-16 ***
TratamentoIsolado 1  -0.18433    0.10624 640.00000  -1.735  0.08320 .  
TratamentoIsolado 2  -0.28869    0.10624 640.00000  -2.717  0.00676 ** 
TratamentoIsolado 3  -0.05699    0.10624 640.00000  -0.536  0.59184    
TratamentoIsolado 4  -0.75740    0.10624 640.00000  -7.129 2.73e-12 ***
TratamentoIsolado 5  -0.19179    0.10624 640.00000  -1.805  0.07149 .  
TratamentoIsolado 6   0.29221    0.10624 640.00000   2.751  0.00612 ** 
TratamentoIsolado 7   0.12293    0.10624 640.00000   1.157  0.24766    
TratamentoProduto 1  -1.27128    0.10624 640.00000 -11.966  < 2e-16 ***
TratamentoProduto 2  -0.10707    0.10624 640.00000  -1.008  0.31393    
TratamentoProduto 3  -0.49614    0.10624 640.00000  -4.670 3.67e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr) TrtmI1 TrtmI2 TrtmI3 TrtmI4 TrtmI5 TrtmI6 TrtmI7 TrtmP1
TrtmntIsld1 -0.452                                                        
TrtmntIsld2 -0.452  0.500                                                 
TrtmntIsld3 -0.452  0.500  0.500                                          
TrtmntIsld4 -0.452  0.500  0.500  0.500                                   
TrtmntIsld5 -0.452  0.500  0.500  0.500  0.500                            
TrtmntIsld6 -0.452  0.500  0.500  0.500  0.500  0.500                     
TrtmntIsld7 -0.452  0.500  0.500  0.500  0.500  0.500  0.500              
TrtmntPrdt1 -0.452  0.500  0.500  0.500  0.500  0.500  0.500  0.500       
TrtmntPrdt2 -0.452  0.500  0.500  0.500  0.500  0.500  0.500  0.500  0.500
TrtmntPrdt3 -0.452  0.500  0.500  0.500  0.500  0.500  0.500  0.500  0.500
            TrtmP2
TrtmntIsld1       
TrtmntIsld2       
TrtmntIsld3       
TrtmntIsld4       
TrtmntIsld5       
TrtmntIsld6       
TrtmntIsld7       
TrtmntPrdt1       
TrtmntPrdt2       
TrtmntPrdt3  0.500
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
anova(modelo_log)
Type III Analysis of Variance Table with Satterthwaite's method
           Sum Sq Mean Sq NumDF DenDF F value    Pr(>F)    
Tratamento 115.22  11.522    10   640  34.028 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Diagnóstico dos resíduos transformados
plot(modelo_log)

qqnorm(resid(modelo_log)); qqline(resid(modelo_log))

shapiro.test(resid(modelo_log))

    Shapiro-Wilk normality test

data:  resid(modelo_log)
W = 0.99468, p-value = 0.02145
leveneTest(AACPD_log ~ Tratamento, data = aacpd_result)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value    Pr(>F)    
group  10  8.0705 2.394e-12 ***
      649                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Transformação Box-Cox

A transformação de Box-Cox permite identificar o valor ótimo de lambda para normalizar os dados. Essa abordagem é útil quando não se sabe qual transformação é mais adequada a priori.

# Pacotes necessários
library(tidyverse)
library(pracma)
library(lme4)
library(lmerTest)
library(MASS)
library(car)

# 1. Calcular AACPD por unidade experimental
aacpd_result <- dados %>%
  group_by(Tratamento, Planta, Trifolio, Foliolo, Avaliador) %>%
  summarise(
    AACPD = trapz(Dia, Severidade),
    .groups = "drop"
  )

# 2. Estimar lambda ideal com Box-Cox (usando modelo linear simples)
modelo_lm <- lm(AACPD ~ Tratamento, data = aacpd_result)

boxcox_result <- boxcox(modelo_lm, lambda = seq(-2, 2, 0.1))

# 3. Obter lambda ótimo
lambda_otimo <- boxcox_result$x[which.max(boxcox_result$y)]
print(paste("Melhor lambda =", round(lambda_otimo, 2)))
[1] "Melhor lambda = 0.1"
# 4. Aplicar a transformação Box-Cox manualmente
aacpd_result <- aacpd_result %>%
  mutate(
    AACPD_boxcox = if (abs(lambda_otimo) < 1e-4) log(AACPD) else (AACPD^lambda_otimo - 1) / lambda_otimo
  )

# 5. Ajustar modelo misto com a variável transformada
modelo_boxcox <- lmer(
  AACPD_boxcox ~ Tratamento + (1 | Planta/Trifolio/Foliolo/Avaliador),
  data = aacpd_result
)

# 6. Análise dos resultados
summary(modelo_boxcox)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: AACPD_boxcox ~ Tratamento + (1 | Planta/Trifolio/Foliolo/Avaliador)
   Data: aacpd_result

REML criterion at convergence: 1911.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.7901 -0.5600 -0.0512  0.5778  3.1659 

Random effects:
 Groups                            Name        Variance Std.Dev.
 Avaliador:Foliolo:Trifolio:Planta (Intercept) 0.0000   0.0000  
 Foliolo:Trifolio:Planta           (Intercept) 0.0000   0.0000  
 Trifolio:Planta                   (Intercept) 0.2490   0.4990  
 Planta                            (Intercept) 0.0000   0.0000  
 Residual                                      0.9984   0.9992  
Number of obs: 660, groups:  
Avaliador:Foliolo:Trifolio:Planta, 60; Foliolo:Trifolio:Planta, 30; Trifolio:Planta, 10; Planta, 5

Fixed effects:
                    Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)           7.6615     0.2038  22.1572  37.588  < 2e-16 ***
TratamentoIsolado 1  -0.3587     0.1824 640.0000  -1.966  0.04968 *  
TratamentoIsolado 2  -0.5292     0.1824 640.0000  -2.901  0.00385 ** 
TratamentoIsolado 3  -0.1270     0.1824 640.0000  -0.696  0.48671    
TratamentoIsolado 4  -1.3088     0.1824 640.0000  -7.174 2.02e-12 ***
TratamentoIsolado 5  -0.3415     0.1824 640.0000  -1.872  0.06170 .  
TratamentoIsolado 6   0.5078     0.1824 640.0000   2.784  0.00553 ** 
TratamentoIsolado 7   0.1794     0.1824 640.0000   0.983  0.32589    
TratamentoProduto 1  -2.1115     0.1824 640.0000 -11.574  < 2e-16 ***
TratamentoProduto 2  -0.2189     0.1824 640.0000  -1.200  0.23052    
TratamentoProduto 3  -0.8888     0.1824 640.0000  -4.872 1.40e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr) TrtmI1 TrtmI2 TrtmI3 TrtmI4 TrtmI5 TrtmI6 TrtmI7 TrtmP1
TrtmntIsld1 -0.448                                                        
TrtmntIsld2 -0.448  0.500                                                 
TrtmntIsld3 -0.448  0.500  0.500                                          
TrtmntIsld4 -0.448  0.500  0.500  0.500                                   
TrtmntIsld5 -0.448  0.500  0.500  0.500  0.500                            
TrtmntIsld6 -0.448  0.500  0.500  0.500  0.500  0.500                     
TrtmntIsld7 -0.448  0.500  0.500  0.500  0.500  0.500  0.500              
TrtmntPrdt1 -0.448  0.500  0.500  0.500  0.500  0.500  0.500  0.500       
TrtmntPrdt2 -0.448  0.500  0.500  0.500  0.500  0.500  0.500  0.500  0.500
TrtmntPrdt3 -0.448  0.500  0.500  0.500  0.500  0.500  0.500  0.500  0.500
            TrtmP2
TrtmntIsld1       
TrtmntIsld2       
TrtmntIsld3       
TrtmntIsld4       
TrtmntIsld5       
TrtmntIsld6       
TrtmntIsld7       
TrtmntPrdt1       
TrtmntPrdt2       
TrtmntPrdt3  0.500
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
anova(modelo_boxcox)
Type III Analysis of Variance Table with Satterthwaite's method
           Sum Sq Mean Sq NumDF DenDF F value    Pr(>F)    
Tratamento 323.12  32.312    10   640  32.363 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 7. Diagnóstico dos resíduos
plot(modelo_boxcox)

qqnorm(resid(modelo_boxcox)); qqline(resid(modelo_boxcox))

shapiro.test(resid(modelo_boxcox))

    Shapiro-Wilk normality test

data:  resid(modelo_boxcox)
W = 0.9934, p-value = 0.005363
leveneTest(AACPD_boxcox ~ Tratamento, data = aacpd_result)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value    Pr(>F)    
group  10  6.2207 4.013e-09 ***
      649                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Transformação Raiz Quadrada (SQRT)

A transformação raiz quadrada é útil para dados de contagem ou proporções moderadas, reduzindo a assimetria e estabilizando a variância.

# Carregar pacotes necessários
library(tidyverse)
library(pracma)
library(lme4)
library(lmerTest)
library(car)

# 1. Calcular AACPD por unidade experimental
aacpd_result <- dados %>%
  group_by(Tratamento, Planta, Trifolio, Foliolo, Avaliador) %>%
  summarise(
    AACPD = trapz(Dia, Severidade),
    .groups = "drop"
  ) %>%
  mutate(
    AACPD_sqrt = sqrt(AACPD)  # Aplicando raiz quadrada
  )

# 2. Ajustar modelo misto com variável transformada
modelo_sqrt <- lmer(
  AACPD_sqrt ~ Tratamento + (1 | Planta/Trifolio/Foliolo/Avaliador),
  data = aacpd_result
)

# 3. Análise dos resultados
summary(modelo_sqrt)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: AACPD_sqrt ~ Tratamento + (1 | Planta/Trifolio/Foliolo/Avaliador)
   Data: aacpd_result

REML criterion at convergence: 3881.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.3886 -0.5873 -0.1498  0.4779  4.7839 

Random effects:
 Groups                            Name        Variance  Std.Dev. 
 Avaliador:Foliolo:Trifolio:Planta (Intercept) 0.000e+00 0.0000000
 Foliolo:Trifolio:Planta           (Intercept) 9.649e-08 0.0003106
 Trifolio:Planta                   (Intercept) 5.231e+00 2.2870744
 Planta                            (Intercept) 1.785e-08 0.0001336
 Residual                                      2.079e+01 4.5591872
Number of obs: 660, groups:  
Avaliador:Foliolo:Trifolio:Planta, 60; Foliolo:Trifolio:Planta, 30; Trifolio:Planta, 10; Planta, 5

Fixed effects:
                    Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)          18.0762     0.9325  22.0268  19.385 2.49e-15 ***
TratamentoIsolado 1  -2.3492     0.8324 639.9996  -2.822 0.004917 ** 
TratamentoIsolado 2  -2.8658     0.8324 639.9996  -3.443 0.000613 ***
TratamentoIsolado 3  -1.0915     0.8324 639.9996  -1.311 0.190216    
TratamentoIsolado 4  -5.7798     0.8324 639.9996  -6.944 9.41e-12 ***
TratamentoIsolado 5  -1.7174     0.8324 639.9996  -2.063 0.039497 *  
TratamentoIsolado 6   2.3277     0.8324 639.9996   2.796 0.005322 ** 
TratamentoIsolado 7   0.1129     0.8324 639.9996   0.136 0.892116    
TratamentoProduto 1  -8.1275     0.8324 639.9996  -9.764  < 2e-16 ***
TratamentoProduto 2  -1.6180     0.8324 639.9996  -1.944 0.052359 .  
TratamentoProduto 3  -4.4819     0.8324 639.9996  -5.384 1.02e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr) TrtmI1 TrtmI2 TrtmI3 TrtmI4 TrtmI5 TrtmI6 TrtmI7 TrtmP1
TrtmntIsld1 -0.446                                                        
TrtmntIsld2 -0.446  0.500                                                 
TrtmntIsld3 -0.446  0.500  0.500                                          
TrtmntIsld4 -0.446  0.500  0.500  0.500                                   
TrtmntIsld5 -0.446  0.500  0.500  0.500  0.500                            
TrtmntIsld6 -0.446  0.500  0.500  0.500  0.500  0.500                     
TrtmntIsld7 -0.446  0.500  0.500  0.500  0.500  0.500  0.500              
TrtmntPrdt1 -0.446  0.500  0.500  0.500  0.500  0.500  0.500  0.500       
TrtmntPrdt2 -0.446  0.500  0.500  0.500  0.500  0.500  0.500  0.500  0.500
TrtmntPrdt3 -0.446  0.500  0.500  0.500  0.500  0.500  0.500  0.500  0.500
            TrtmP2
TrtmntIsld1       
TrtmntIsld2       
TrtmntIsld3       
TrtmntIsld4       
TrtmntIsld5       
TrtmntIsld6       
TrtmntIsld7       
TrtmntPrdt1       
TrtmntPrdt2       
TrtmntPrdt3  0.500
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
anova(modelo_sqrt)
Type III Analysis of Variance Table with Satterthwaite's method
           Sum Sq Mean Sq NumDF DenDF F value    Pr(>F)    
Tratamento 5156.2  515.62    10   640  24.806 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 4. Diagnóstico dos resíduos
plot(modelo_sqrt)  # Resíduos vs valores ajustados

qqnorm(resid(modelo_sqrt)); qqline(resid(modelo_sqrt))  # QQ-plot

shapiro.test(resid(modelo_sqrt))  # Teste de normalidade dos resíduos

    Shapiro-Wilk normality test

data:  resid(modelo_sqrt)
W = 0.95635, p-value = 4.379e-13
# 5. Teste de homogeneidade de variância
leveneTest(AACPD_sqrt ~ Tratamento, data = aacpd_result)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value    Pr(>F)    
group  10  3.5788 0.0001224 ***
      649                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1