Análise de experimento

Autores

Ms. Santino Aleandro Silva

Dr. Walmes Zeviani

1 Informações da sessão

Código
#-----------------------------------------------------------------------
# Pacotes.

library(reactable)
library(emmeans)
library(tidyverse)

#-----------------------------------------------------------------------
# Tema.

custom_theme <- function() {
    theme_linedraw() +
        theme(
            panel.grid = element_blank(),
            strip.background = element_rect(fill = "gray90",
                                            color = "black"),
            strip.text = element_text(color = "black")
        )
}

# Configure globalmente o tema personalizado
theme_set(custom_theme())

#-----------------------------------------------------------------------
# Informações da sessão.

devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.3.0 (2023-04-21)
 os       Ubuntu 20.04.6 LTS
 system   x86_64, linux-gnu
 ui       X11
 language en_US
 collate  en_US.UTF-8
 ctype    pt_BR.UTF-8
 tz       America/Campo_Grande
 date     2024-01-19
 pandoc   3.1.1 @ /usr/lib/rstudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package      * version date (UTC) lib source
 cachem         1.0.8   2023-05-01 [3] CRAN (R 4.3.0)
 callr          3.7.3   2022-11-02 [3] CRAN (R 4.2.1)
 cli            3.6.1   2023-03-23 [1] CRAN (R 4.3.0)
 coda           0.19-4  2020-09-30 [3] CRAN (R 4.2.3)
 codetools      0.2-19  2023-02-01 [4] CRAN (R 4.2.2)
 colorspace     2.1-0   2023-01-23 [3] CRAN (R 4.2.2)
 crayon         1.5.2   2022-09-29 [3] CRAN (R 4.2.1)
 devtools       2.4.5   2022-10-11 [3] CRAN (R 4.2.2)
 digest         0.6.34  2024-01-11 [3] CRAN (R 4.3.0)
 dplyr        * 1.1.4   2023-11-17 [3] CRAN (R 4.3.0)
 ellipsis       0.3.2   2021-04-29 [3] CRAN (R 4.2.2)
 emmeans      * 1.8.3   2022-12-06 [3] CRAN (R 4.2.2)
 estimability   1.4.1   2022-08-05 [3] CRAN (R 4.2.2)
 evaluate       0.23    2023-11-01 [3] CRAN (R 4.3.0)
 fansi          1.0.6   2023-12-08 [3] CRAN (R 4.3.0)
 fastmap        1.1.1   2023-02-24 [3] CRAN (R 4.3.0)
 forcats      * 1.0.0   2023-01-29 [3] CRAN (R 4.3.0)
 fs             1.6.3   2023-07-20 [3] CRAN (R 4.3.0)
 generics       0.1.3   2022-07-05 [3] CRAN (R 4.2.1)
 ggplot2      * 3.4.4   2023-10-12 [3] CRAN (R 4.3.0)
 glue           1.7.0   2024-01-09 [3] CRAN (R 4.3.0)
 gtable         0.3.1   2022-09-01 [3] CRAN (R 4.2.1)
 hms            1.1.3   2023-03-21 [1] CRAN (R 4.3.0)
 htmltools      0.5.7   2023-11-03 [3] CRAN (R 4.3.0)
 htmlwidgets    1.6.2   2023-03-17 [3] CRAN (R 4.3.0)
 httpuv         1.6.13  2023-12-06 [3] CRAN (R 4.3.0)
 jsonlite       1.8.8   2023-12-04 [3] CRAN (R 4.3.0)
 knitr          1.45    2023-10-30 [3] CRAN (R 4.3.0)
 later          1.3.2   2023-12-06 [3] CRAN (R 4.3.0)
 lattice        0.21-8  2023-04-05 [4] CRAN (R 4.3.0)
 lifecycle      1.0.4   2023-11-07 [3] CRAN (R 4.3.0)
 lubridate    * 1.9.2   2023-02-10 [3] CRAN (R 4.2.2)
 magrittr       2.0.3   2022-03-30 [3] CRAN (R 4.2.2)
 MASS           7.3-59  2023-04-21 [4] CRAN (R 4.3.0)
 Matrix         1.5-3   2022-11-11 [4] CRAN (R 4.2.2)
 memoise        2.0.1   2021-11-26 [3] CRAN (R 4.2.2)
 mime           0.12    2021-09-28 [3] CRAN (R 4.2.2)
 miniUI         0.1.1.1 2018-05-18 [3] CRAN (R 4.2.2)
 multcomp       1.4-20  2022-08-07 [3] CRAN (R 4.2.1)
 munsell        0.5.0   2018-06-12 [3] CRAN (R 4.2.2)
 mvtnorm        1.1-3   2021-10-08 [3] CRAN (R 4.2.2)
 pillar         1.9.0   2023-03-22 [3] CRAN (R 4.3.0)
 pkgbuild       1.4.0   2022-11-27 [3] CRAN (R 4.2.2)
 pkgconfig      2.0.3   2019-09-22 [3] CRAN (R 4.2.2)
 pkgload        1.3.2   2022-11-16 [3] CRAN (R 4.2.2)
 prettyunits    1.2.0   2023-09-24 [3] CRAN (R 4.3.0)
 processx       3.8.3   2023-12-10 [3] CRAN (R 4.3.0)
 profvis        0.3.7   2020-11-02 [3] CRAN (R 4.2.2)
 promises       1.2.1   2023-08-10 [3] CRAN (R 4.3.0)
 ps             1.7.6   2024-01-18 [3] CRAN (R 4.3.0)
 purrr        * 1.0.2   2023-08-10 [3] CRAN (R 4.3.0)
 R6             2.5.1   2021-08-19 [3] CRAN (R 4.2.2)
 Rcpp           1.0.10  2023-01-22 [1] CRAN (R 4.3.0)
 reactable    * 0.4.1   2022-12-08 [3] CRAN (R 4.2.2)
 readr        * 2.1.4   2023-02-10 [3] CRAN (R 4.2.2)
 remotes        2.4.2   2021-11-30 [3] CRAN (R 4.2.2)
 rlang          1.1.1   2023-04-28 [1] CRAN (R 4.3.0)
 rmarkdown      2.25    2023-09-18 [3] CRAN (R 4.3.0)
 rstudioapi     0.15.0  2023-07-07 [3] CRAN (R 4.3.0)
 sandwich       3.0-2   2022-06-15 [3] CRAN (R 4.2.1)
 scales         1.2.1   2022-08-20 [3] CRAN (R 4.2.1)
 sessioninfo    1.2.2   2021-12-06 [3] CRAN (R 4.2.2)
 shiny          1.7.5.1 2023-10-14 [3] CRAN (R 4.3.0)
 stringi        1.8.3   2023-12-11 [3] CRAN (R 4.3.0)
 stringr      * 1.5.1   2023-11-14 [3] CRAN (R 4.3.0)
 survival       3.5-5   2023-03-12 [4] CRAN (R 4.2.3)
 TH.data        1.1-1   2022-04-26 [3] CRAN (R 4.2.1)
 tibble       * 3.2.1   2023-03-20 [3] CRAN (R 4.3.0)
 tidyr        * 1.3.0   2023-01-24 [3] CRAN (R 4.3.0)
 tidyselect     1.2.0   2022-10-10 [3] CRAN (R 4.2.1)
 tidyverse    * 2.0.0   2023-02-22 [3] CRAN (R 4.3.0)
 timechange     0.2.0   2023-01-11 [3] CRAN (R 4.2.2)
 tzdb           0.3.0   2022-03-28 [3] CRAN (R 4.2.2)
 urlchecker     1.0.1   2021-11-30 [3] CRAN (R 4.2.2)
 usethis        2.1.6   2022-05-25 [3] CRAN (R 4.2.2)
 utf8           1.2.4   2023-10-22 [3] CRAN (R 4.3.0)
 vctrs          0.6.5   2023-12-01 [3] CRAN (R 4.3.0)
 withr          3.0.0   2024-01-16 [3] CRAN (R 4.3.0)
 xfun           0.41    2023-11-01 [3] CRAN (R 4.3.0)
 xtable         1.8-4   2019-04-21 [3] CRAN (R 4.2.2)
 yaml           2.3.8   2023-12-11 [3] CRAN (R 4.3.0)
 zoo            1.8-11  2022-09-17 [3] CRAN (R 4.2.1)

 [1] /home/walmes/R/x86_64-pc-linux-gnu-library/4.3
 [2] /usr/local/lib/R/site-library
 [3] /usr/lib/R/site-library
 [4] /usr/lib/R/library

──────────────────────────────────────────────────────────────────────────────

2 Importação e preparo dos dados

Código
#-----------------------------------------------------------------------
# Importação e preparo.

# Importa as abas já padronizando os nomes.
tb <-
    map(set_names(c(1, 2)),
        ~readxl::read_excel("Aveias Patricia.xlsx", sheet = .x) |>
            rename_all(~tolower(gsub("[. /º]+", "_", .)))
        )
# str(tb)

# Concatena as tabelas.
tb <- bind_rows(tb, .id = "experimento")
# str(tb)

# Converte termos experimentais para fator.
tb <- tb |>
    rename("n_nemas_cm3" = "n_nemas_cm³") |>
    mutate(across(c("experimento", "cultivar"), as.factor))
# str(tb)

3 Análise exploratória

Código
#-----------------------------------------------------------------------
# Análise exploratória.

# Repetições dos pontos experimentais.
tb |>
    count(experimento, cultivar, pop_inicial, n_nemas_cm3) |>
    mutate(n_nemas_cm3_log2 = log2(n_nemas_cm3)) |>
    print(n = Inf)
# A tibble: 24 × 6
   experimento cultivar pop_inicial n_nemas_cm3     n n_nemas_cm3_log2
   <fct>       <fct>          <dbl>       <dbl> <int>            <dbl>
 1 1           Afrodite           0      0          5             -Inf
 2 1           Afrodite         188      0.0625     5               -4
 3 1           Afrodite         750      0.25       5               -2
 4 1           Afrodite        3000      1          5                0
 5 1           Afrodite       12000      4          5                2
 6 1           Afrodite       48000     16          5                4
 7 1           Torena             0      0          5             -Inf
 8 1           Torena           188      0.0625     5               -4
 9 1           Torena           750      0.25       5               -2
10 1           Torena          3000      1          5                0
11 1           Torena         12000      4          5                2
12 1           Torena         48000     16          5                4
13 2           Afrodite           0      0          5             -Inf
14 2           Afrodite         188      0.0625     5               -4
15 2           Afrodite         750      0.25       5               -2
16 2           Afrodite        3000      1          5                0
17 2           Afrodite       12000      4          5                2
18 2           Afrodite       48000     16          5                4
19 2           Torena             0      0          5             -Inf
20 2           Torena           188      0.0625     5               -4
21 2           Torena           750      0.25       5               -2
22 2           Torena          3000      1          5                0
23 2           Torena         12000      4          5                2
24 2           Torena         48000     16          5                4
Código
# Tabela com medidas descritivas por cela experimental.
tb_describe <-
    tb |>
    group_by(experimento, cultivar, pop_inicial, n_nemas_cm3) |>
    rstatix::get_summary_stats(c(nema_g, fr, mfr, mfpa, mspa),
                               type = "common") |>
    select(-c(iqr, se, ci))

# tb_describe |>
#     print(n = Inf)

# tb_describe |>
#     group_split(variable) |>
#     map(function(tbi) {
#         tbi |>
#             select(-variable) |>
#             reactable::reactable(
#                 pagination = FALSE,
#                 sortable = FALSE,
#                 defaultColDef = reactable::colDef(
#                     format = reactable::colFormat(digits = 3)),
#                 columns = list(
#                     n = reactable::colDef(
#                         format = reactable::colFormat(digits = 0)
#                     ),
#                     pop_inicial = reactable::colDef(
#                         format = reactable::colFormat(digits = 0)
#                     )
#                 )
#             ) |>
#             reactablefmtr::add_title(title = tbi$variable[1],
#                                      font_size = 16)
#     }) |>
#     htmltools::tagList() |>
#     htmltools::browsable()

# summary(tb$nema_g)
Código
nema_lab <- expression("Densidade de nematoides aplicada ao solo (" * unid/cm^3 ~ "de solo)")

# Quantidade de nematoides por cultivar.
ggplot(data = tb,
       mapping = aes(
           x = n_nemas_cm3,
           y = nema_g)) +
    facet_grid(facets = cultivar ~ experimento, scale = "free_y") +
    # geom_point() +
    geom_jitter(width = 0.025, height = 0) +
    stat_summary(geom = "line", fun = "mean") +
    scale_x_log10() +
    # scale_y_log10() +
    labs(x = nema_lab,
         y = "Densidade final de nematoides (unid/g de raiz)",
         title = "Nematoides nas raízes de aveia por cultivar")

Densidade de nematoides nas raízes de aveia em função da densidade inicial de nematiodes aplicada ao solo separado por cultivar (linhas) e experimento (colunas).

Código
# summary(tb$fr)
Código
# Fator de reprodução.
ggplot(data = tb,
       mapping = aes(
           x = n_nemas_cm3,
           y = fr)) +
    facet_grid(facets = cultivar ~ experimento, scale = "free_y") +
    # geom_point() +
    geom_jitter(width = 0.025, height = 0) +
    stat_summary(geom = "line", fun = "mean") +
    scale_x_log10() +
    # scale_y_log10() +
    labs(x = nema_lab,
         y = "Fator de reprodução",
         title = "Fator de reprodução dos nematoides por cultivar")

Fator de reprodução dos nematoides nas raízes de aveia em função da densidade inicial de nematiodes aplicada ao solo separado por cultivar (linhas) e experimento (colunas).

Código
# Componentes de produção.
tb |>
    select(experimento:pop_inicial, mfr, mfpa, mspa) |>
    mutate(n_nemas_cm3 = replace(n_nemas_cm3,
                                 n_nemas_cm3 == 0,
                                 2^(-6))) |>
    pivot_longer(cols = c(mfr, mfpa, mspa),
                 names_to = "resposta",
                 values_to = "valor") |>
    ggplot(data = _,
           mapping = aes(
               x = n_nemas_cm3,
               y = valor,
               color = cultivar)) +
    facet_grid(facets = resposta ~ experimento, scale = "free_y") +
    # geom_point() +
    geom_jitter(width = 0.05, height = 0) +
    stat_summary(geom = "line", fun = "mean") +
    scale_x_log10() +
    labs(x = nema_lab,
         y = "Massa (g)",
         title = "Componentes de produção da aveia",
         color = "Cultivar") +
    theme(legend.position = "top")

Componentes de produção para as plantas de aveia em função da densidade inicial de nematiodes aplicada ao solo e cultivar (cores) separado por variável resposta (linhas) e experimento (colunas).

4 Análise estatística

4.1 Descrição

A análise estatística dos dois experimentos, que visaram avaliar a densidade inicial de nematoides no desenvolvimento de duas cultivares de aveia, foi conduzida seguindo um delineamento inteiramente casualizado com 5 repetições para cada experimento. As variáveis resposta incluíram massa fresca de parte aérea, massa seca de parte aérea, massa fresca de raízes, densidade final de nematoides nas raízes e fator de reprodução.

Os dados foram submetidos à análise de variância (ANOVA) considerando a estrutura fatorial entre os fatores, sendo estes a densidade inicial de nematoides (com 5 níveis e a testemunha) e a cultivar (com 2 níveis). A análise foi realizada conjuntamente para ambos os experimentos, tratando o experimento como um bloco e acomodando as interações entre o experimento e os fatores mencionados.

Em caso de significância nas interações, identificadas pelo teste F da ANOVA, foi conduzido um estudo de comparação de médias utilizando o teste de Tukey. A ordem de precedência para comparação foi estabelecida como densidade, cultivar e experimento. Em situações em que não houve interação significativa, foram estudados os efeitos principais de densidade e cultivar.

Antes da aplicação dos métodos inferenciais, uma análise dos pressupostos do modelo foi realizada de maneira gráfica. Isso incluiu uma avaliação coletiva e integrada dos pressupostos considerando os resíduos, valores ajustados e medidas de influência. Em caso de detecção de violações nos pressupostos, foram implementadas estratégias para reduzir tais violações. Inicialmente, foi considerada a aplicação de transformações na variável resposta, com ênfase na família de transformações Box-Cox. Caso as violações fossem atribuídas a observações influentes, essas observações foram examinadas e, se necessário, removidas do conjunto de dados.

Código
#-----------------------------------------------------------------------
# Prepara para análise estatística.

# Cria o fator qualitativo para densidade.
tb <-
    tb |>
    mutate(densidade = as.character(MASS::fractions(n_nemas_cm3)),
           densidade = replace(densidade,
                               n_nemas_cm3 == 0,
                               "Controle"),
           # densidade = factor(densidade),
           densidade = fct_reorder(densidade, n_nemas_cm3))

# IMPORTANT: Não há repetição verdadeira de experimento. Portanto, a
# estatística F para experimento não está correta. Os tratamentos
# (cultivar e densidade) são casualizados dentro de experimento.

# nema_lab <- "Densidade (nematoides/cm³ de solo)"
nema_lab <- expression("Densidade de nematoides aplicada ao solo (" * unid/cm^3 ~ "de solo)")
cult_lab <- "Cultivar"
exp_lab <- "Experimento"
note <- "Médias seguidas de mesma letra não diferem pelo teste de Tukey a 5%"

4.2 Massa seca da parte aérea

Código
#-----------------------------------------------------------------------
# Massa seca da parte aérea.

resp_lab <- "Massa seca da parte aérea (g)"
title_lab <- "Massa seca da parte aérea da aveia"

# Ajuste do modelo aos dados.
m0 <- lm(mspa ~ experimento * cultivar * densidade, data = tb)

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

Código
layout(1)
# MASS::boxcox(m0)

# Quadro de análise de variância.
car::Anova(m0, type = "II")
Anova Table (Type II tests)

Response: mspa
                                Sum Sq Df  F value    Pr(>F)    
experimento                    11154.4  1 831.8841 < 2.2e-16 ***
cultivar                         356.7  1  26.6022 1.342e-06 ***
densidade                        330.4  5   4.9282 0.0004657 ***
experimento:cultivar             171.2  1  12.7642 0.0005546 ***
experimento:densidade            101.2  5   1.5095 0.1940470    
cultivar:densidade               189.5  5   2.8259 0.0200328 *  
experimento:cultivar:densidade   142.7  5   2.1282 0.0685375 .  
Residuals                       1287.2 96                       
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Não há violação grave ou prejudicial aos pressupostos do modelo. Pela estatística F foram significativas as interações entre densidade e cultivar, e entre experimento e cultivar. Será feito o estudo da interação.

Código
# Estudo do efeito das densidades dentro de cada cultivar.
tb_emm <-
    emmeans::emmeans(m0, ~densidade | cultivar) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
cultivar = Afrodite:
 densidade emmean   SE df lower.CL upper.CL .group
 Controle   18.39 1.16 96    16.09     20.7  a    
 4          16.26 1.16 96    13.96     18.6  ab   
 1          16.24 1.16 96    13.94     18.5  ab   
 16         16.12 1.16 96    13.82     18.4  ab   
 1/4        15.55 1.16 96    13.25     17.8  ab   
 1/16       13.24 1.16 96    10.94     15.5   b   

cultivar = Torena:
 densidade emmean   SE df lower.CL upper.CL .group
 1          15.33 1.16 96    13.03     17.6  a    
 4          14.94 1.16 96    12.65     17.2  a    
 1/4        14.33 1.16 96    12.03     16.6  a    
 Controle   11.92 1.16 96     9.62     14.2  ab   
 1/16        9.46 1.16 96     7.16     11.8   b   
 16          9.12 1.16 96     6.82     11.4   b   

Results are averaged over the levels of: experimento 
Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 6 estimates 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    ggplot(
        data = _,
        mapping = aes(
            x = densidade,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    facet_wrap(facets = ~cultivar, ncol = 1) +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.2f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.075,
        size = 3.25) +
    labs(x = nema_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = cult_lab) +
    expand_limits(x = c(NA, nlevels(m0$model[["densidade"]]) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para a massa seca da parte aérea da aveia em função da densidade inicial de nematoides aplicada ao solo para cada cultivar.

Código
# Estudo do efeito das cultivares dentro de cada experimento.
tb_emm <-
    emmeans::emmeans(m0, ~cultivar | experimento) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
experimento = 1:
 cultivar emmean    SE df lower.CL upper.CL .group
 Afrodite   5.13 0.669 96     3.80     6.46  a    
 Torena     4.07 0.669 96     2.74     5.40  a    

experimento = 2:
 cultivar emmean    SE df lower.CL upper.CL .group
 Afrodite  26.80 0.669 96    25.47    28.13  a    
 Torena    20.96 0.669 96    19.64    22.29   b   

Results are averaged over the levels of: densidade 
Confidence level used: 0.95 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    ggplot(
        data = _,
        mapping = aes(
            x = cultivar,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    facet_wrap(
        facets = ~experimento, ncol = 1, scale = "free_y") +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.2f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.025,
        size = 3.25) +
    labs(x = cult_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = exp_lab) +
    # expand_limits(x = c(NA, nlevels(tb$cultivar) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para a massa seca da parte aérea da aveia em função das cultivares para cada experimento.

4.3 Massa fresca da parte aérea

Código
#-----------------------------------------------------------------------
# Massa fresca da parte aérea.

resp_lab <- "Massa fresca da parte aérea (g)"
title_lab <- "Massa fresca da parte aérea da aveia"

# Ajuste do modelo aos dados.
m0 <- lm(mfpa ~ experimento * cultivar * densidade, data = tb)

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

Código
layout(1)
# MASS::boxcox(m0)

# Quadro de análise de variância.
car::Anova(m0, type = "II")
Anova Table (Type II tests)

Response: mfpa
                               Sum Sq Df  F value    Pr(>F)    
experimento                    224586  1 682.1911 < 2.2e-16 ***
cultivar                         5519  1  16.7653 8.824e-05 ***
densidade                        8800  5   5.3464 0.0002228 ***
experimento:cultivar             1005  1   3.0534 0.0837678 .  
experimento:densidade             409  5   0.2484 0.9396849    
cultivar:densidade               4479  5   2.7213 0.0241409 *  
experimento:cultivar:densidade   1013  5   0.6154 0.6883320    
Residuals                       31604 96                       
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Não há violação grave ou prejudicial aos pressupostos do modelo. Pela estatística F foi significativa a interação entre densidade e cultivar. Será feito o estudo da interação.

Código
# Estudo do efeito das densidades dentro de cada cultivar.
tb_emm <-
    emmeans::emmeans(m0, ~densidade | cultivar) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
cultivar = Afrodite:
 densidade emmean   SE df lower.CL upper.CL .group
 Controle    92.5 5.74 96     81.1    103.9  a    
 1           86.0 5.74 96     74.6     97.3  a    
 4           85.2 5.74 96     73.8     96.6  a    
 16          84.5 5.74 96     73.1     95.9  a    
 1/4         82.9 5.74 96     71.5     94.3  a    
 1/16        70.3 5.74 96     58.9     81.6  a    

cultivar = Torena:
 densidade emmean   SE df lower.CL upper.CL .group
 1           86.5 5.74 96     75.1     97.9  a    
 1/4         81.2 5.74 96     69.8     92.6  a    
 Controle    73.7 5.74 96     62.3     85.1  ab   
 4           73.1 5.74 96     61.7     84.4  ab   
 1/16        57.5 5.74 96     46.1     68.9   bc  
 16          48.0 5.74 96     36.6     59.4    c  

Results are averaged over the levels of: experimento 
Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 6 estimates 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    ggplot(
        data = _,
        mapping = aes(
            x = densidade,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    facet_wrap(facets = ~cultivar, ncol = 1) +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.2f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.075,
        size = 3.25) +
    labs(x = nema_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = cult_lab) +
    expand_limits(x = c(NA, nlevels(m0$model[["densidade"]]) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para a massa fresca da parte aérea da aveia em função da densidade inicial de nematoides aplicada ao solo para cada cultivar.

4.4 Massa fresca de raízes

Código
#-----------------------------------------------------------------------
# Massa fresca de raízes.

resp_lab <- "Massa fresca de raízes (g)"
title_lab <- "Massa fresca de raízes da aveia"

# Ajuste do modelo aos dados.
m0 <- lm(mfr ~ experimento * cultivar * densidade, data = tb)

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

Código
layout(1)
# MASS::boxcox(m0)

# Quadro de análise de variância.
car::Anova(m0, type = "II")
Anova Table (Type II tests)

Response: mfr
                                Sum Sq Df  F value    Pr(>F)    
experimento                    20023.4  1 261.4114 < 2.2e-16 ***
cultivar                        4827.0  1  63.0181 3.835e-12 ***
densidade                       1316.1  5   3.4364  0.006707 ** 
experimento:cultivar             408.0  1   5.3261  0.023155 *  
experimento:densidade            392.9  5   1.0258  0.406946    
cultivar:densidade               356.0  5   0.9296  0.465385    
experimento:cultivar:densidade    80.7  5   0.2107  0.957248    
Residuals                       7353.3 96                       
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Não há violação grave ou prejudicial aos pressupostos do modelo. Pela estatística F foi significativa a interação entre cultivar e experimento e houve efeito principal de densidade. Será feito o estudo da interação e do efeito principal.

Código
# Estudo do efeito das densidades.
tb_emm <-
    emmeans::emmeans(m0, ~densidade) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
 densidade emmean   SE df lower.CL upper.CL .group
 4           33.2 1.96 96     29.4     37.1  a    
 1/4         30.0 1.96 96     26.1     33.9  ab   
 Controle    29.6 1.96 96     25.7     33.5  ab   
 1           27.8 1.96 96     23.9     31.7  ab   
 16          26.9 1.96 96     23.0     30.8  ab   
 1/16        22.4 1.96 96     18.5     26.3   b   

Results are averaged over the levels of: experimento, cultivar 
Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 6 estimates 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    ggplot(
        data = _,
        mapping = aes(
            x = densidade,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.2f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.075,
        size = 3.25) +
    labs(x = nema_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = cult_lab) +
    expand_limits(x = c(NA, nlevels(m0$model[["densidade"]]) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para a massa fresca de raízes da aveia em função da densidade inicial de nematoides aplicada ao solo.

Código
# Estudo do efeito das cultivares dentro de cada experimento.
tb_emm <-
    emmeans::emmeans(m0, ~cultivar | experimento) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
experimento = 1:
 cultivar emmean  SE df lower.CL upper.CL .group
 Afrodite   19.9 1.6 96    16.75     23.1  a    
 Torena     10.9 1.6 96     7.75     14.1   b   

experimento = 2:
 cultivar emmean  SE df lower.CL upper.CL .group
 Afrodite   49.4 1.6 96    46.27     52.6  a    
 Torena     33.1 1.6 96    29.90     36.2   b   

Results are averaged over the levels of: densidade 
Confidence level used: 0.95 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    ggplot(
        data = _,
        mapping = aes(
            x = cultivar,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    facet_wrap(facets = ~experimento, ncol = 1, scale = "free_y") +
    # facet_wrap(facets = ~experimento, ncol = 1) +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.2f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.025,
        size = 3.25) +
    labs(x = cult_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = exp_lab) +
    # expand_limits(x = c(NA, nlevels(tb$cultivar) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para a massa fresca de raízes da aveia em função das cultivares para cada experimento.

4.5 Densidade final de nematoides

Código
#-----------------------------------------------------------------------
# Densidade final de nematoides.

resp_lab <- "Densidade final de nematoides (unid/g de raiz)"
title_lab <- "Densidade final de nematoides nas raízes da aveia"

# summary(tb$nema_g)

# # Ajuste do modelo aos dados.
# m0 <- lm(nema_g + 1 ~ experimento * cultivar * densidade, data = tb)
# x11()
# par(mfrow = c(2, 2))
# plot(m0)
# layout(1)
# x11()
# MASS::boxcox(m0)
# x11()

# Ajuste do modelo aos dados.
shift <- 1
m0 <- lm(log10(nema_g + shift) ~ experimento * cultivar * densidade,
         data = tb)

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

Código
layout(1)
# MASS::boxcox(m0)

# Quadro de análise de variância.
car::Anova(m0, type = "II")
Anova Table (Type II tests)

Response: log10(nema_g + shift)
                               Sum Sq Df  F value    Pr(>F)    
experimento                     1.348  1  11.2123 0.0012409 ** 
cultivar                       77.834  1 647.4188 < 2.2e-16 ***
densidade                       3.725  4   7.7465 2.501e-05 ***
experimento:cultivar            0.324  1   2.6914 0.1048198    
experimento:densidade           1.079  4   2.2431 0.0716560 .  
cultivar:densidade              2.847  4   5.9203 0.0003173 ***
experimento:cultivar:densidade  0.844  4   1.7560 0.1459499    
Residuals                       9.618 80                       
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Na escala original da resposta houve grave violação dos pressupostos marcada por uma forte relação de dispersão com a média. Tal resultado já era esperado visto que a variável resposta é função de uma variável de contagem e, portanto, como na grande maioria dos casos, variáveis de contagem possuem relação média variância. A transformação Box-Cox indicou o uso da transformação logarítmica. Aos valores da resposta somou-se a constante 1 pra evitar valores iguais a zero.

Na escala transformada não houve violação grave ou prejudicial aos pressupostos do modelo. Pela estatística F foi significativa a interação entre densidade e cultivar. Será feito o estudo da interação.

Código
# Estudo do efeito das densidades dentro de cada cultivar.
tb_emm <-
    emmeans::emmeans(m0, ~densidade | cultivar) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
cultivar = Afrodite:
 densidade emmean   SE df lower.CL upper.CL .group
 1          1.215 0.11 80    0.997    1.433  a    
 16         0.927 0.11 80    0.708    1.145  ab   
 1/16       0.871 0.11 80    0.653    1.089  ab   
 4          0.852 0.11 80    0.634    1.070  ab   
 1/4        0.767 0.11 80    0.549    0.986   b   

cultivar = Torena:
 densidade emmean   SE df lower.CL upper.CL .group
 4          3.033 0.11 80    2.815    3.251  a    
 16         2.868 0.11 80    2.649    3.086  a    
 1          2.804 0.11 80    2.586    3.022  a    
 1/4        2.673 0.11 80    2.455    2.892  a    
 1/16       2.076 0.11 80    1.857    2.294   b   

Results are averaged over the levels of: experimento 
Results are given on the log10(mu + 1) (not the response) scale. 
Confidence level used: 0.95 
Results are given on the log10 (not the response) scale. 
P value adjustment: tukey method for comparing a family of 5 estimates 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    mutate_at(vars(emmean, lower.CL, upper.CL),
              ~10^(.) - shift) |>
    ggplot(
        data = _,
        mapping = aes(
            x = densidade,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    facet_wrap(facets = ~cultivar, ncol = 1) +
    facet_wrap(facets = ~cultivar, ncol = 1, scales = "free_y") +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.1f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.075,
        size = 3.25) +
    labs(x = nema_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = cult_lab) +
    expand_limits(x = c(NA, nlevels(m0$model[["densidade"]]) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para a densidade final de nematoides nas raízes em função da densidade inicial de nematoides aplicada ao solo para cada cultivar.

4.6 Fator de reprodução

Código
#-----------------------------------------------------------------------
# Fator de reprodução.

resp_lab <- "Fator de reprodução"
title_lab <- "Fator de reprodução dos nematoides nas raízes da aveia"

summary(tb$fr)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
 0.0000  0.0800  0.6199  3.5688  3.7626 33.9733      20 
Código
# Ajuste do modelo aos dados.
# m0 <- lm(fr + 0.01 ~ experimento * cultivar * densidade, data = tb)
# par(mfrow = c(2, 2))
# plot(m0)
# layout(1)
# MASS::boxcox(m0)

# Ajuste do modelo aos dados.
shift <- 0.1
m0 <- lm(log10(fr + shift) ~ experimento * cultivar * densidade,
         data = tb)

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

Código
layout(1)
# MASS::boxcox(m0)

# # Medidas de influência.
# im <- influence.measures(m0)
# tb_im <-
#     sapply(tail(colnames(im$infmat), n = 4),
#            function(i) {
#                paste0(sprintf("%0.4f", im$infmat[, i]),
#                       ifelse(im$is.inf[, i], " *", ""))
#            }) |>
#     as.data.frame(check.names = FALSE) |>
#     add_column(row_number = rownames(im$infmat), .after = 0)
# tb_im[as.logical(rowSums(im$is.inf)), ]

# Quadro de análise de variância.
car::Anova(m0, type = "II")
Anova Table (Type II tests)

Response: log10(fr + shift)
                                Sum Sq Df  F value    Pr(>F)    
experimento                     1.3173  1  22.1074 1.060e-05 ***
cultivar                       30.1506  1 506.0170 < 2.2e-16 ***
densidade                      16.6212  4  69.7384 < 2.2e-16 ***
experimento:cultivar            0.4201  1   7.0513  0.009556 ** 
experimento:densidade           0.4245  4   1.7811  0.140782    
cultivar:densidade              3.4895  4  14.6411 5.135e-09 ***
experimento:cultivar:densidade  0.2921  4   1.2257  0.306548    
Residuals                       4.7667 80                       
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Na escala original da resposta houve grave violação dos pressupostos marcada por uma forte relação de dispersão com a média. A transformação Box-Cox indicou o uso da transformação logarítmica. Aos valores da resposta somou-se a constante 0.1 pra evitar valores iguais a zero.

Na escala transformada não houve violação grave ou prejudicial aos pressupostos do modelo. Pela estatística F foram significativas as interações entre densidade e cultivar, e entre experimento e cultivar. Será feito o estudo da interação.

Código
# Estudo do efeito das densidades dentro de cada cultivar.
tb_emm <-
    emmeans::emmeans(m0, ~densidade | cultivar) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
cultivar = Afrodite:
 densidade  emmean     SE df lower.CL upper.CL .group
 1/16       0.0172 0.0772 80   -0.136    0.171  a    
 1/4       -0.5026 0.0772 80   -0.656   -0.349   b   
 1         -0.5950 0.0772 80   -0.749   -0.441   b   
 4         -0.9072 0.0772 80   -1.061   -0.754    c  
 16        -0.9760 0.0772 80   -1.130   -0.822    c  

cultivar = Torena:
 densidade  emmean     SE df lower.CL upper.CL .group
 1/4        1.1615 0.0772 80    1.008    1.315  a    
 1/16       0.8183 0.0772 80    0.665    0.972   b   
 1          0.6353 0.0772 80    0.482    0.789   b   
 4          0.2999 0.0772 80    0.146    0.453    c  
 16        -0.3878 0.0772 80   -0.541   -0.234     d 

Results are averaged over the levels of: experimento 
Results are given on the log10(mu + 0.1) (not the response) scale. 
Confidence level used: 0.95 
Results are given on the log10 (not the response) scale. 
P value adjustment: tukey method for comparing a family of 5 estimates 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    mutate_at(vars(emmean, lower.CL, upper.CL),
              ~10^(.) - shift) |>
    ggplot(
        data = _,
        mapping = aes(
            x = densidade,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    facet_wrap(facets = ~cultivar, ncol = 1) +
    facet_wrap(facets = ~cultivar, ncol = 1, scales = "free_y") +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.1f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.075,
        size = 3.25) +
    labs(x = nema_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = cult_lab) +
    expand_limits(x = c(NA, nlevels(m0$model[["densidade"]]) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para o fator de reprodução dos nematoides nas raízes em função da densidade inicial de nematoides aplicada ao solo para cada cultivar.

Código
# Estudo do efeito das cultivares dentro de cada experimento.
tb_emm <-
    emmeans::emmeans(m0, ~cultivar | experimento) |>
    multcomp::cld(Letters = letters, reverse = TRUE)
tb_emm
experimento = 1:
 cultivar emmean     SE df lower.CL upper.CL .group
 Torena    0.326 0.0488 80    0.229    0.423  a    
 Afrodite -0.643 0.0488 80   -0.740   -0.546   b   

experimento = 2:
 cultivar emmean     SE df lower.CL upper.CL .group
 Torena    0.685 0.0488 80    0.588    0.782  a    
 Afrodite -0.543 0.0488 80   -0.640   -0.446   b   

Results are averaged over the levels of: densidade 
Results are given on the log10(mu + 0.1) (not the response) scale. 
Confidence level used: 0.95 
Results are given on the log10 (not the response) scale. 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 
Código
# Gráfico.
tb_emm |>
    as.data.frame() |>
    mutate(.group = trimws(.group)) |>
    # mutate_at(vars(emmean, lower.CL, upper.CL),
    #           ~10^(.) - shift) |>
    ggplot(
        data = _,
        mapping = aes(
            x = cultivar,
            y = emmean,
            ymin = lower.CL,
            ymax = upper.CL)) +
    # facet_wrap(facets = ~experimento, ncol = 1, scale = "free_y") +
    facet_wrap(facets = ~experimento, ncol = 1) +
    geom_pointrange() +
    geom_text(
        mapping = aes(label = sprintf("%0.2f %s", emmean, .group)),
        hjust = 0,
        nudge_x = 0.025,
        size = 3.25) +
    labs(x = cult_lab,
         y = resp_lab,
         title = title_lab,
         caption = note,
         color = exp_lab) +
    # expand_limits(x = c(NA, nlevels(tb$cultivar) + 0.95)) +
    theme(legend.position = "top")

Médias acompanhadas de intervalo de confiança (95%) para o fator de reprodução dos nematoides em função das cultivares para cada experimento.