1 Definições da sessão

#-----------------------------------------------------------------------
#                                            Prof. Dr. Walmes M. Zeviani
#                                leg.ufpr.br/~walmes · github.com/walmes
#                                        walmes@ufpr.br · @walmeszeviani
#                      Laboratory of Statistics and Geoinformation (LEG)
#                Department of Statistics · Federal University of Paraná
#                                       2021-out-04 · Curitiba/PR/Brazil
#-----------------------------------------------------------------------

#-----------------------------------------------------------------------
# Pacotes.

# rm(list = ls())

library(emmeans)
library(lme4)
library(lmerTest)
library(tidyverse)
library(readxl)

2 Descrição do experimento

Objetivo: Comparação de médias de variáveis da qualidade da pulverização por meio de papeis hidrossensíveis, em diferentes pulverizadores (spray), duas alturas da copa (Canopy strata) e superficies da folha (leaf surface).

Experimento em parcelas sub-subdivididas. A unidade experimental é uma planta. A casualização do tipo de spray foi feito às plantas (UE). Cada planta foi subdividida em 3 alturas. Em cada altura, um papel hidrosolúvel teve cada um dos lados mensurado.

O experimento foi realizado em blocos ao acaso com 3 repetições. Cada parcela foi composta por 2 plantas.

O experimento foi realizado em duas datas diferentes. Uma diferença entre as duas datas é que na primeiro havia maior quantidade de folhas e na segunda um pouco menos devido a desfolha, e isso pode influenciar na qualidade de pulverização. Células vazias correspondem a papeis hidrosensíveis perdidos

#-----------------------------------------------------------------------
# Importação e inspeção.

tb <- read_excel("planilhas para R - Walmes.xlsx",
                 sheet = "Analise média - subsubdividida",
                 skip = 1)
str(tb)
## tibble [47 × 9] (S3: tbl_df/tbl/data.frame)
##  $ Data         : POSIXct[1:47], format: "2018-02-06" ...
##  $ Spray        : chr [1:47] "Electrostatic" "Electrostatic" "Electrostatic" "Electrostatic" ...
##  $ Canopy strata: chr [1:47] "Upper" "Upper" "Upper" "Upper" ...
##  $ Leaf surface : chr [1:47] "Adaxial" "Adaxial" "Adaxial" "Abaxial" ...
##  $ Block        : num [1:47] 1 2 3 1 2 3 1 2 3 1 ...
##  $ n. droplets  : num [1:47] 1502 26 2851 672 75 ...
##  $ n. diameter  : num [1:47] 376 14 278 138 20 136 26 190 17 158 ...
##  $ Coverage (%) : num [1:47] 40.62 0.689 24.583 8.085 0.946 ...
##  $ MVD (mm)     : num [1:47] 645 640 293 1293 683 ...
# dput(names(tb))
names(tb) <- c("data", "spray", "strata", "side", "block",
               "ndroplets", "ndiameter", "coverage", "mvd")

# Faz testemunha ser o último nível do fator.
tb <- tb %>%
    mutate_at(c("strata", "spray", "side", "data", "block"), factor) %>%
    drop_na()
str(tb)
## tibble [45 × 9] (S3: tbl_df/tbl/data.frame)
##  $ data     : Factor w/ 2 levels "2018-02-06","2018-02-23": 1 1 1 1 1 1 1 1 1 1 ...
##  $ spray    : Factor w/ 2 levels "Convencional",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ strata   : Factor w/ 2 levels "Lower","Upper": 2 2 2 2 2 2 1 1 1 1 ...
##  $ side     : Factor w/ 2 levels "Abaxial","Adaxial": 2 2 2 1 1 1 2 2 2 1 ...
##  $ block    : Factor w/ 3 levels "1","2","3": 1 2 3 1 2 3 1 2 3 1 ...
##  $ ndroplets: num [1:45] 1502 26 2851 672 75 ...
##  $ ndiameter: num [1:45] 376 14 278 138 20 136 26 190 17 158 ...
##  $ coverage : num [1:45] 40.62 0.689 24.583 8.085 0.946 ...
##  $ mvd      : num [1:45] 645 640 293 1293 683 ...
# Número de casos experimentais.
xtabs(~spray + strata + side + block, data = tb) %>%
    ftable()
##                              block 1 2 3
## spray         strata side               
## Convencional  Lower  Abaxial       2 1 1
##                      Adaxial       2 2 2
##               Upper  Abaxial       2 2 2
##                      Adaxial       2 2 2
## Electrostatic Lower  Abaxial       2 2 2
##                      Adaxial       2 2 2
##               Upper  Abaxial       2 2 2
##                      Adaxial       1 2 2
#-----------------------------------------------------------------------
# Análise exploratória.

tb %>%
    pivot_longer(cols = ndroplets:mvd,
                 names_to = "responses",
                 values_to = "values") %>%
    ggplot(data = .,
           mapping = aes(x = interaction(strata, side, spray),
                         y = values,
                         color = data)) +
    facet_wrap(facets = ~responses, scales = "free_y") +
    geom_jitter(width = 0.05) +
    stat_summary(geom = "line", fun = "mean") +
    labs(x = "Leaf surface",
         y = "Number of droplets",
         color = "Data") +
    theme(axis.text.x = element_text(angle = 15, hjust = 1))
## geom_path: Each group consists of only one observation. Do you need
## to adjust the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need
## to adjust the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need
## to adjust the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need
## to adjust the group aesthetic?

#-----------------------------------------------------------------------

3 Number of droplets

O modelo considerado para a análise dos dados sob a presente estrutura experimental é \[ \begin{aligned} y_{hijkl} &= \text{DATA}_h + \text{DATA:BLOCO}_{hi} + \text{SPRAY}_j + e_{hij} \\ &+ \text{STRATA}_k + \text{SPRAY:STRATA}_{jk} + e_{hijk} \\ &+ \text{SIDE}_l + \text{SPRAY:SIDE}_{jl} + \text{STRATA:SIDE}_{kl}\\ &+ \text{SPRAY:STRATA:SIDE}_{jkl} + e_{hijkl} \\ e_{hij} &\sim \text{N}(0, \sigma^2_a) \quad \text{(variância entre UE das parcelas)}\\ e_{hijk} &\sim \text{N}(0, \sigma^2_b) \quad \text{(variância entre UE das subparcelas)}\\ e_{hijkl} &\sim \text{N}(0, \sigma^2_c) \quad \text{(variância entre UE das subsubparcelas)}\\ \end{aligned} \]

Caso diagnostique-se que na escala original não há atendimento dos pressupostos serão aplicadas transformações nos dados na buscando o atendimentos dos pressupostos.

O modelo será ajustado aos dados por máxima verossimilhança restrita (REML). Havendo efeito dos termos experimentais ou interações, o estudo se dará dos termos de maior ordem (interações triplas) para os de menor (efeitos principais). O estudo será feito por comparação múltiplas de médias.

#-----------------------------------------------------------------------

# Modelo incorreto nos componentes de variância que serve apenas para
# avaliar as suposições sobre o erro residual.
m0 <- lm(ndroplets ~ data/block + spray * strata * side +
             data:block:spray/strata,
         data = tb)

# Análise de diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

# Transformação Box-Cox.
MASS::boxcox(m0)

# Ajuste do modelo aos dados.
mm0 <- lmer(log10(ndroplets) ~ data/block + spray * strata * side +
                (1 | data:block:spray) + (1 | data:block:spray:strata),
            data = tb)
## boundary (singular) fit: see ?isSingular
# Quadro de testes de Wald para os termos de efeito fixo.
anova(mm0)
## Type III Analysis of Variance Table with Satterthwaite's method
##                    Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## data              0.34502 0.34502     1    32  0.7077 0.4065
## spray             0.15236 0.15236     1    32  0.3125 0.5800
## strata            0.46915 0.46915     1    32  0.9623 0.3340
## side              0.47855 0.47855     1    32  0.9816 0.3292
## data:block        2.13614 0.53404     4    32  1.0954 0.3756
## spray:strata      0.83985 0.83985     1    32  1.7226 0.1987
## spray:side        0.17827 0.17827     1    32  0.3657 0.5496
## strata:side       0.38056 0.38056     1    32  0.7806 0.3836
## spray:strata:side 0.05880 0.05880     1    32  0.1206 0.7307
# Componentes de variância.
VarCorr(mm0)
##  Groups                  Name        Std.Dev.
##  data:block:spray:strata (Intercept) 0.00000 
##  data:block:spray        (Intercept) 0.00000 
##  Residual                            0.69824

4 Number of different diameters

#-----------------------------------------------------------------------

# Modelo incorreto nos componentes de variância que serve apenas para
# avaliar as suposições sobre o erro residual.
m0 <- lm(ndiameter ~ data/block + spray * strata * side +
             data:block:spray/strata,
         data = tb)

# Análise de diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

# Transformação Box-Cox.
MASS::boxcox(m0)

# Ajuste do modelo aos dados.
mm0 <- lmer(log10(ndiameter) ~ data/block + spray * strata * side +
                (1 | data:block:spray) + (1 | data:block:spray:strata),
            data = tb)
## boundary (singular) fit: see ?isSingular
# Quadro de testes de Wald para os termos de efeito fixo.
anova(mm0)
## Type III Analysis of Variance Table with Satterthwaite's method
##                    Sum Sq Mean Sq NumDF  DenDF F value Pr(>F)
## data              0.07254 0.07254     1 14.165  0.2891 0.5992
## spray             0.00005 0.00005     1 14.487  0.0002 0.9891
## strata            0.06253 0.06253     1 14.487  0.2492 0.6251
## side              0.26019 0.26019     1 18.696  1.0369 0.3215
## data:block        0.94572 0.23643     4 14.044  0.9422 0.4683
## spray:strata      0.48255 0.48255     1 14.256  1.9230 0.1868
## spray:side        0.17581 0.17581     1 18.764  0.7006 0.4131
## strata:side       0.10831 0.10831     1 18.764  0.4316 0.5192
## spray:strata:side 0.02466 0.02466     1 18.696  0.0983 0.7574
# Componentes de variância.
VarCorr(mm0)
##  Groups                  Name        Std.Dev.
##  data:block:spray:strata (Intercept) 0.12002 
##  data:block:spray        (Intercept) 0.00000 
##  Residual                            0.50093

5 Median volumetric diameter

#-----------------------------------------------------------------------

# Modelo incorreto nos componentes de variância que serve apenas para
# avaliar as suposições sobre o erro residual.
m0 <- lm(mvd ~ data/block + spray * strata * side +
             data:block:spray/strata,
         data = tb)

# Análise de diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

MASS::boxcox(m0)

# m0 <- update(m0, formula = log10(.) ~ .)

# Ajuste do modelo aos dados.
mm0 <- lmer(log10(mvd) ~ data/block + spray * strata * side +
                (1 | data:block:spray) + (1 | data:block:spray:strata),
            data = tb)
## boundary (singular) fit: see ?isSingular
# Quadro de testes de Wald para os termos de efeito fixo.
anova(mm0)
## Type III Analysis of Variance Table with Satterthwaite's method
##                    Sum Sq Mean Sq NumDF  DenDF F value   Pr(>F)   
## data              0.02563 0.02563     1 15.194  0.6646 0.427530   
## spray             0.47464 0.47464     1 15.446 12.3081 0.003049 **
## strata            0.08942 0.08942     1 15.446  2.3188 0.148031   
## side              0.03065 0.03065     1 18.791  0.7948 0.383936   
## data:block        0.22505 0.05626     4 15.103  1.4589 0.263355   
## spray:strata      0.00978 0.00978     1 15.309  0.2537 0.621652   
## spray:side        0.05591 0.05591     1 18.898  1.4498 0.243418   
## strata:side       0.51184 0.51184     1 18.898 13.2729 0.001742 **
## spray:strata:side 0.35960 0.35960     1 18.791  9.3250 0.006595 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Componentes de variância.
VarCorr(mm0)
##  Groups                  Name        Std.Dev.  
##  data:block:spray:strata (Intercept) 1.3826e-01
##  data:block:spray        (Intercept) 1.4566e-05
##  Residual                            1.9637e-01
# Desdobramento da interação tripla.
# Efeito de spray dentro das combinações dos demais.
emm <- emmeans(mm0, spec = ~spray | strata + side) %>%
    multcomp::cld(Letters = letters)
## NOTE: A nesting structure was detected in the fitted model:
##     block %in% data
emm
## strata = Lower, side = Abaxial:
##  spray         emmean    SE   df lower.CL upper.CL .group
##  Convencional    2.98 0.123 29.1     2.73     3.23  a    
##  Electrostatic   2.99 0.098 23.7     2.79     3.19  a    
## 
## strata = Lower, side = Adaxial:
##  spray         emmean    SE   df lower.CL upper.CL .group
##  Electrostatic   2.90 0.098 23.7     2.70     3.10  a    
##  Convencional    3.40 0.098 23.7     3.20     3.60   b   
## 
## strata = Upper, side = Abaxial:
##  spray         emmean    SE   df lower.CL upper.CL .group
##  Electrostatic   2.86 0.098 23.7     2.65     3.06  a    
##  Convencional    3.30 0.098 23.7     3.10     3.50   b   
## 
## strata = Upper, side = Adaxial:
##  spray         emmean    SE   df lower.CL upper.CL .group
##  Electrostatic   2.70 0.109 26.6     2.47     2.92  a    
##  Convencional    2.92 0.098 23.7     2.71     3.12  a    
## 
## Results are averaged over the levels of: block, data 
## Degrees-of-freedom method: kenward-roger 
## Results are given on the log10 (not the response) scale. 
## Confidence level used: 0.95 
## significance level used: alpha = 0.05
# Calcula a coverage passando a transformação inversa.
emm <- emm %>%
    as.data.frame() %>%
    mutate(emmean_mvd = 10^(emmean),
           lower = 10^(lower.CL),
           upper = 10^(upper.CL))

# Na escala logit, na qual a análise foi realizada para atendimento dos
# pressupostos.
ggplot(data = emm,
       mapping = aes(x = spray, y = emmean)) +
    facet_wrap(facets = ~strata + side, nrow = 1) +
    geom_point() +
    geom_errorbar(mapping = aes(ymin = lower.CL, ymax = upper.CL),
                  width = 0.05) +
    geom_text(mapping = aes(label = sprintf("%0.2f %s",
                                            emmean, .group)),
              hjust = 0, nudge_x = 0.025)

# Na escala original onde é mais fácil interpretar. NOTE: intervalos de
# confiança podem ficar bem amplos.
ggplot(data = emm,
       mapping = aes(x = spray, y = emmean_mvd)) +
    # facet_wrap(facets = ~strata + side, nrow = 1) +
    facet_grid(facets = strata ~ side) +
    geom_point() +
    geom_errorbar(mapping = aes(ymin = lower, ymax = upper),
                  width = 0.05) +
    geom_text(mapping = aes(label = sprintf("%0.2f %s",
                                            emmean_mvd, .group)),
              hjust = 0, nudge_x = 0.025) +
    labs(x = "Spray",
         y = "Coverage")

# Efeito de side dentro das combinações dos demais.
emmeans(mm0, spec = ~side | strata + spray) %>%
    multcomp::cld(Letters = letters)
## NOTE: A nesting structure was detected in the fitted model:
##     block %in% data
## strata = Lower, spray = Convencional:
##  side    emmean    SE   df lower.CL upper.CL .group
##  Abaxial   2.98 0.123 29.1     2.73     3.23  a    
##  Adaxial   3.40 0.098 23.7     3.20     3.60   b   
## 
## strata = Lower, spray = Electrostatic:
##  side    emmean    SE   df lower.CL upper.CL .group
##  Adaxial   2.90 0.098 23.7     2.70     3.10  a    
##  Abaxial   2.99 0.098 23.7     2.79     3.19  a    
## 
## strata = Upper, spray = Convencional:
##  side    emmean    SE   df lower.CL upper.CL .group
##  Adaxial   2.92 0.098 23.7     2.71     3.12  a    
##  Abaxial   3.30 0.098 23.7     3.10     3.50   b   
## 
## strata = Upper, spray = Electrostatic:
##  side    emmean    SE   df lower.CL upper.CL .group
##  Adaxial   2.70 0.109 26.6     2.47     2.92  a    
##  Abaxial   2.86 0.098 23.7     2.65     3.06  a    
## 
## Results are averaged over the levels of: block, data 
## Degrees-of-freedom method: kenward-roger 
## Results are given on the log10 (not the response) scale. 
## Confidence level used: 0.95 
## significance level used: alpha = 0.05
# Efeito de strata dentro das combinações dos demais.
emmeans(mm0, spec = ~strata | spray + side) %>%
    multcomp::cld(Letters = letters)
## NOTE: A nesting structure was detected in the fitted model:
##     block %in% data
## spray = Convencional, side = Abaxial:
##  strata emmean    SE   df lower.CL upper.CL .group
##  Lower    2.98 0.123 29.1     2.73     3.23  a    
##  Upper    3.30 0.098 23.7     3.10     3.50  a    
## 
## spray = Convencional, side = Adaxial:
##  strata emmean    SE   df lower.CL upper.CL .group
##  Upper    2.92 0.098 23.7     2.71     3.12  a    
##  Lower    3.40 0.098 23.7     3.20     3.60   b   
## 
## spray = Electrostatic, side = Abaxial:
##  strata emmean    SE   df lower.CL upper.CL .group
##  Upper    2.86 0.098 23.7     2.65     3.06  a    
##  Lower    2.99 0.098 23.7     2.79     3.19  a    
## 
## spray = Electrostatic, side = Adaxial:
##  strata emmean    SE   df lower.CL upper.CL .group
##  Upper    2.70 0.109 26.6     2.47     2.92  a    
##  Lower    2.90 0.098 23.7     2.70     3.10  a    
## 
## Results are averaged over the levels of: block, data 
## Degrees-of-freedom method: kenward-roger 
## Results are given on the log10 (not the response) scale. 
## Confidence level used: 0.95 
## significance level used: alpha = 0.05

6 Spray coverage

#-----------------------------------------------------------------------

# Modelo incorreto nos componentes de variância que serve apenas para
# avaliar as suposições sobre o erro residual.
m0 <- lm(coverage ~ data/block + spray * strata * side +
             data:block:spray/strata,
         data = tb)

# Análise de diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

# ATTENTION: essa variável é uma contínua limitada entre 0 e 1. A
# relação média-variância é do tipo da Binomial, algo como p * (1 - p).
# Tentar estabilizar a variância com uma tranformação *it como probit,
# logit, etc.
range(tb$coverage)
## [1]  0.044 98.883
# Usando a transformação logit.
tb$coverage_trans <- binomial(link = logit)$linkfun(tb$coverage/100)

# Inversa da logit.
# binomial()$linkinv(0)

# Modelo incorreto nos componentes de variância que serve apenas para
# avaliar as suposições sobre o erro residual.
m0 <- lm(coverage_trans ~ data/block + spray * strata * side +
             data:block:spray/strata,
         data = tb)

# Análise de diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

# Pressupostos são melhor atendidos.

# Ajuste do modelo aos dados.
mm0 <- lmer(coverage_trans ~ data/block + spray * strata * side +
                (1 | data:block:spray) + (1 | data:block:spray:strata),
            data = tb)

# Quadro de testes de Wald para os termos de efeito fixo.
anova(mm0)
## Type III Analysis of Variance Table with Satterthwaite's method
##                   Sum Sq Mean Sq NumDF   DenDF F value    Pr(>F)    
## data              10.613  10.613     1  5.2197  3.7106 0.1095914    
## spray             45.499  45.499     1  5.3080 15.9070 0.0092549 ** 
## strata             0.606   0.606     1 10.0435  0.2119 0.6551205    
## side              50.803  50.803     1 18.5916 17.7615 0.0004896 ***
## data:block         7.600   1.900     4  5.1836  0.6643 0.6426202    
## spray:strata      12.574  12.574     1 10.0122  4.3960 0.0623926 .  
## spray:side         2.107   2.107     1 18.6767  0.7366 0.4016290    
## strata:side       39.750  39.750     1 18.6767 13.8972 0.0014610 ** 
## spray:strata:side 36.138  36.138     1 18.5916 12.6343 0.0021747 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Componentes de variância.
VarCorr(mm0)
##  Groups                  Name        Std.Dev.
##  data:block:spray:strata (Intercept) 1.14803 
##  data:block:spray        (Intercept) 0.63494 
##  Residual                            1.69124
# Desdobramento da interação tripla.
# Efeito de spray dentro das combinações dos demais.
emm <- emmeans(mm0, spec = ~spray | strata + side) %>%
    multcomp::cld(Letters = letters)
## NOTE: A nesting structure was detected in the fitted model:
##     block %in% data
emm
## strata = Lower, side = Abaxial:
##  spray          emmean    SE   df lower.CL upper.CL .group
##  Convencional  -3.7287 1.085 27.5   -5.952   -1.505  a    
##  Electrostatic -3.1234 0.874 21.1   -4.940   -1.307  a    
## 
## strata = Lower, side = Adaxial:
##  spray          emmean    SE   df lower.CL upper.CL .group
##  Electrostatic -1.2940 0.874 21.1   -3.111    0.523  a    
##  Convencional   2.6816 0.874 21.1    0.865    4.498   b   
## 
## strata = Upper, side = Abaxial:
##  spray          emmean    SE   df lower.CL upper.CL .group
##  Electrostatic -4.8247 0.874 21.1   -6.641   -3.008  a    
##  Convencional   1.1911 0.874 21.1   -0.626    3.008   b   
## 
## strata = Upper, side = Adaxial:
##  spray          emmean    SE   df lower.CL upper.CL .group
##  Electrostatic -3.1661 0.964 24.3   -5.154   -1.179  a    
##  Convencional   0.0472 0.874 21.1   -1.769    1.864   b   
## 
## Results are averaged over the levels of: block, data 
## Degrees-of-freedom method: kenward-roger 
## Confidence level used: 0.95 
## significance level used: alpha = 0.05
# Calcula a coverage passando a transformação inversa.
emm <- emm %>%
    as.data.frame() %>%
    mutate(emmean_coverage = binomial(link = logit)$linkinv(emmean),
           lower = binomial(link = logit)$linkinv(lower.CL),
           upper = binomial(link = logit)$linkinv(upper.CL))

# Na escala logit, na qual a análise foi realizada para atendimento dos
# pressupostos.
ggplot(data = emm,
       mapping = aes(x = spray, y = emmean)) +
    facet_wrap(facets = ~strata + side, nrow = 1) +
    geom_point() +
    geom_errorbar(mapping = aes(ymin = lower.CL, ymax = upper.CL),
                  width = 0.05) +
    geom_text(mapping = aes(label = sprintf("%0.2f %s",
                                            emmean, .group)),
              hjust = 0, nudge_x = 0.025)

# Na escala original onde é mais fácil interpretar. NOTE: intervalos de
# confiança podem ficar bem amplos.
ggplot(data = emm,
       mapping = aes(x = spray, y = emmean_coverage)) +
    # facet_wrap(facets = ~strata + side, nrow = 1) +
    facet_grid(facets = strata ~ side) +
    geom_point() +
    geom_errorbar(mapping = aes(ymin = lower, ymax = upper),
                  width = 0.05) +
    geom_text(mapping = aes(label = sprintf("%0.2f %s",
                                            emmean_coverage, .group)),
              hjust = 0, nudge_x = 0.025) +
    labs(x = "Spray",
         y = "Coverage")

# Efeito de side dentro das combinações dos demais.
emmeans(mm0, spec = ~side | strata + spray) %>%
    multcomp::cld(Letters = letters)
## NOTE: A nesting structure was detected in the fitted model:
##     block %in% data
## strata = Lower, spray = Convencional:
##  side     emmean    SE   df lower.CL upper.CL .group
##  Abaxial -3.7287 1.085 27.5   -5.952   -1.505  a    
##  Adaxial  2.6816 0.874 21.1    0.865    4.498   b   
## 
## strata = Lower, spray = Electrostatic:
##  side     emmean    SE   df lower.CL upper.CL .group
##  Abaxial -3.1234 0.874 21.1   -4.940   -1.307  a    
##  Adaxial -1.2940 0.874 21.1   -3.111    0.523  a    
## 
## strata = Upper, spray = Convencional:
##  side     emmean    SE   df lower.CL upper.CL .group
##  Adaxial  0.0472 0.874 21.1   -1.769    1.864  a    
##  Abaxial  1.1911 0.874 21.1   -0.626    3.008  a    
## 
## strata = Upper, spray = Electrostatic:
##  side     emmean    SE   df lower.CL upper.CL .group
##  Abaxial -4.8247 0.874 21.1   -6.641   -3.008  a    
##  Adaxial -3.1661 0.964 24.3   -5.154   -1.179  a    
## 
## Results are averaged over the levels of: block, data 
## Degrees-of-freedom method: kenward-roger 
## Confidence level used: 0.95 
## significance level used: alpha = 0.05
# Efeito de strata dentro das combinações dos demais.
emmeans(mm0, spec = ~strata | spray + side) %>%
    multcomp::cld(Letters = letters)
## NOTE: A nesting structure was detected in the fitted model:
##     block %in% data
## spray = Convencional, side = Abaxial:
##  strata  emmean    SE   df lower.CL upper.CL .group
##  Lower  -3.7287 1.085 27.5   -5.952   -1.505  a    
##  Upper   1.1911 0.874 21.1   -0.626    3.008   b   
## 
## spray = Convencional, side = Adaxial:
##  strata  emmean    SE   df lower.CL upper.CL .group
##  Upper   0.0472 0.874 21.1   -1.769    1.864  a    
##  Lower   2.6816 0.874 21.1    0.865    4.498   b   
## 
## spray = Electrostatic, side = Abaxial:
##  strata  emmean    SE   df lower.CL upper.CL .group
##  Upper  -4.8247 0.874 21.1   -6.641   -3.008  a    
##  Lower  -3.1234 0.874 21.1   -4.940   -1.307  a    
## 
## spray = Electrostatic, side = Adaxial:
##  strata  emmean    SE   df lower.CL upper.CL .group
##  Upper  -3.1661 0.964 24.3   -5.154   -1.179  a    
##  Lower  -1.2940 0.874 21.1   -3.111    0.523  a    
## 
## Results are averaged over the levels of: block, data 
## Degrees-of-freedom method: kenward-roger 
## Confidence level used: 0.95 
## significance level used: alpha = 0.05