1 Carregamento de Pacotes e Dados

# Instalar pacotes se necessário
pacotes <- c("readxl", "dplyr", "tidyr", "ggplot2", "knitr", 
             "kableExtra", "rstatix", "ggpubr", "scales")

instalar <- pacotes[!sapply(pacotes, requireNamespace, quietly = TRUE)]
if (length(instalar) > 0) install.packages(instalar)

library(readxl)
library(dplyr)
library(tidyr)
library(ggplot2)
library(knitr)
library(kableExtra)
library(rstatix)
library(ggpubr)
library(scales)
# Carregue o arquivo .xlsx com o caminho correto
# Substitua o caminho abaixo pelo local do seu arquivo
library(readxl)
fenolicos_ORAC_e_FRAP_para_Estatistica <- read_excel("fenolicos ORAC e FRAP para Estatistica.xlsx")
View(fenolicos_ORAC_e_FRAP_para_Estatistica)

df <- read_excel("fenolicos ORAC e FRAP para Estatistica.xlsx")

# Renomear colunas com nomes limpos para facilitar o uso no R
colnames(df) <- c(
  "FENOL_cafe_nd_mg_g",        # FENOL_cafe_n_digerido_MG_G
  "FENOL_cafe_d_mg_g",         # FENOL_cafe_digerido_MG_G
  "FENOL_cevada_nd_mg_g",      # FENOL_cevada_n_digerida_MG_G
  "FENOL_cevada_d_mg_g",       # FENOL_cevada_digerida_MG_G
  "FENOL_cafe_nd_xic",         # FENOL_cafe_n_digerido_MG_XICARA150
  "FENOL_cafe_d_xic",          # FENOL_cafe_digerido_MG_XICARA150
  "FENOL_cevada_nd_xic",       # FENOL_cevada_n_digerida_MG_XICARA150
  "FENOL_cevada_d_xic",        # FENOL_cevada_digerida_MG_XICARA150
  "FRAP_cafe_nd_g",            # FRAP_cafe_n_digerido_µmol TE_g
  "FRAP_cafe_d_g",             # FRAP_cafe_digerido__µmol TE_g
  "FRAP_cevada_nd_g",          # FRAP_cevada_n_digerida__µmol TE_g
  "FRAP_cevada_d_g",           # FRAP_cevada_digerida__µmol TE_g
  "FRAP_cafe_nd_xic",          # FRAP_cafe_n_digerido__µmol TE_XICARA
  "FRAP_cafe_d_xic",           # FRAP_cafe_digerido_µmol TE_XICARA
  "FRAP_cevada_nd_xic",        # FRAP_cevada_n_digerida_µmol TE_XICARA
  "FRAP_cevada_d_xic",         # FRAP_cevada_digerida_µmol TE_XICARA
  "ORAC_cafe_nd_g",            # ORAC_cafe_n_digerido_µmol TE_g
  "ORAC_cafe_d_g",             # ORAC_cafe_digerido__µmol TE_g
  "ORAC_cevada_nd_g",          # ORAC_cevada_n_digerida__µmol TE_g
  "ORAC_cevada_d_g",           # ORAC_cevada_digerida__µmol TE_g
  "ORAC_cafe_nd_xic",          # ORAC_cafe_n_digerido__µmol TE_XICARA
  "ORAC_cafe_d_xic",           # ORAC_cafe_digerido_µmol TE_XICARA
  "FRAP_cevada_nd_xic2",       # FRAP_cevada_n_digerida_µmol TE_XICARA (duplicata)
  "ORAC_cevada_d_xic"          # ORAC_cevada_digerida_µmol TE_XICARA
)

# Separar subconjuntos por número de observações válidas
# Fenólicos: 3 réplicas (linhas 1-3)
fenol <- df[1:3, 1:8]

# FRAP: 3 réplicas (linhas 1-3)
frap  <- df[1:3, 9:16]

# ORAC: 9 réplicas (linhas 1-9) — colunas ORAC_cafe_d_g e ORAC_cevada_d_g, ORAC_cevada_nd_g
orac  <- df[, c("ORAC_cafe_nd_g","ORAC_cafe_d_g","ORAC_cevada_nd_g","ORAC_cevada_d_g",
                "ORAC_cafe_nd_xic","ORAC_cafe_d_xic","FRAP_cevada_nd_xic2","ORAC_cevada_d_xic")]

cat("Dimensões do dataset original:", nrow(df), "linhas x", ncol(df), "colunas\n")
## Dimensões do dataset original: 9 linhas x 24 colunas
cat("Observações válidas para Fenólicos:", nrow(na.omit(fenol[,1:4])), "\n")
## Observações válidas para Fenólicos: 3
cat("Observações válidas para FRAP:", nrow(na.omit(frap[,1:4])), "\n")
## Observações válidas para FRAP: 3

2 Análise de Compostos Fenólicos (mg GAE/g)

2.1 Estatísticas Descritivas — Fenólicos

# Função auxiliar: média ± desvio padrão com n
desc_stat <- function(x, label) {
  x <- na.omit(x)
  data.frame(
    Amostra   = label,
    N         = length(x),
    Media     = round(mean(x), 4),
    DP        = round(sd(x), 4),
    CV_pct    = round(sd(x)/mean(x)*100, 2),
    Min       = round(min(x), 4),
    Max       = round(max(x), 4),
    IC95_inf  = round(mean(x) - qt(0.975, length(x)-1)*sd(x)/sqrt(length(x)), 4),
    IC95_sup  = round(mean(x) + qt(0.975, length(x)-1)*sd(x)/sqrt(length(x)), 4)
  )
}

desc_fenol <- bind_rows(
  desc_stat(fenol$FENOL_cafe_nd_mg_g,   "Café  – Não digerido (mg GAE/g)"),
  desc_stat(fenol$FENOL_cafe_d_mg_g,    "Café  – Digerido (mg GAE/g)"),
  desc_stat(fenol$FENOL_cevada_nd_mg_g, "Cevada – Não digerida (mg GAE/g)"),
  desc_stat(fenol$FENOL_cevada_d_mg_g,  "Cevada – Digerida (mg GAE/g)")
)

kable(desc_fenol,
      caption = "Estatísticas Descritivas – Compostos Fenólicos (mg GAE/g)",
      col.names = c("Amostra","n","Média","DP","CV (%)","Mínimo","Máximo","IC95 inf.","IC95 sup."),
      align = "lrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#2C3E50", color = "white")
Estatísticas Descritivas – Compostos Fenólicos (mg GAE/g)
Amostra n Média DP CV (%) Mínimo Máximo IC95 inf. IC95 sup.
Café – Não digerido (mg GAE/g) 3 1.7755 0.0416 2.34 1.7365 1.8193 1.6721 1.8788
Café – Digerido (mg GAE/g) 3 1.7718 0.0609 3.44 1.7109 1.8327 1.6205 1.9230
Cevada – Não digerida (mg GAE/g) 3 0.2347 0.0160 6.83 0.2233 0.2530 0.1949 0.2745
Cevada – Digerida (mg GAE/g) 3 0.5248 0.0000 0.00 0.5248 0.5248 0.5248 0.5248

2.2 Testes t — Efeito da Digestão (Antes vs Após, por Amostra)

2.2.1 Café: Não Digerido vs Digerido

cafe_nd <- na.omit(fenol$FENOL_cafe_nd_mg_g)
cafe_d  <- na.omit(fenol$FENOL_cafe_d_mg_g)

t_cafe <- t.test(cafe_nd, cafe_d, paired = FALSE, var.equal = FALSE)

variacao_cafe <- (mean(cafe_d) - mean(cafe_nd)) / mean(cafe_nd) * 100

resultado_cafe <- data.frame(
  Comparacao       = "Café: Não Digerido vs Digerido",
  Media_ND         = round(mean(cafe_nd), 4),
  DP_ND            = round(sd(cafe_nd),   4),
  Media_D          = round(mean(cafe_d),  4),
  DP_D             = round(sd(cafe_d),    4),
  Variacao_pct     = round(variacao_cafe, 2),
  t_estatistica    = round(t_cafe$statistic, 4),
  df               = round(t_cafe$parameter, 2),
  valor_p          = signif(t_cafe$p.value, 4),
  IC95_dif_inf     = round(t_cafe$conf.int[1], 4),
  IC95_dif_sup     = round(t_cafe$conf.int[2], 4),
  Significativo    = ifelse(t_cafe$p.value < 0.05, "Sim *", "Não")
)

kable(resultado_cafe,
      caption = "Teste t de Student – Café: Não Digerido vs Digerido",
      col.names = c("Comparação","Média ND","DP ND","Média D","DP D",
                    "Variação (%)","t","gl","p-valor","IC95 inf","IC95 sup","Sig. α=0,05"),
      align = "lrrrrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#1ABC9C", color = "white")
Teste t de Student – Café: Não Digerido vs Digerido
Comparação Média ND DP ND Média D DP D Variação (%) t gl p-valor IC95 inf IC95 sup Sig. α=0,05
t Café: Não Digerido vs Digerido 1.7755 0.0416 1.7718 0.0609 -0.21 0.0858 3.53 0.9363 -0.121 0.1283 Não
cat("\nResultado completo do teste t (Café):\n")
## 
## Resultado completo do teste t (Café):
print(t_cafe)
## 
##  Welch Two Sample t-test
## 
## data:  cafe_nd and cafe_d
## t = 0.085796, df = 3.534, p-value = 0.9363
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.1209773  0.1282837
## sample estimates:
## mean of x mean of y 
##  1.775451  1.771797

2.2.2 Cevada: Não Digerida vs Digerida

cev_nd <- na.omit(fenol$FENOL_cevada_nd_mg_g)
cev_d  <- na.omit(fenol$FENOL_cevada_d_mg_g)

t_cevada <- t.test(cev_nd, cev_d, paired = FALSE, var.equal = FALSE)

variacao_cevada <- (mean(cev_d) - mean(cev_nd)) / mean(cev_nd) * 100

resultado_cevada <- data.frame(
  Comparacao       = "Cevada: Não Digerida vs Digerida",
  Media_ND         = round(mean(cev_nd), 4),
  DP_ND            = round(sd(cev_nd),   4),
  Media_D          = round(mean(cev_d),  4),
  DP_D             = round(sd(cev_d),    4),
  Variacao_pct     = round(variacao_cevada, 2),
  t_estatistica    = round(t_cevada$statistic, 4),
  df               = round(t_cevada$parameter, 2),
  valor_p          = signif(t_cevada$p.value, 4),
  IC95_dif_inf     = round(t_cevada$conf.int[1], 4),
  IC95_dif_sup     = round(t_cevada$conf.int[2], 4),
  Significativo    = ifelse(t_cevada$p.value < 0.05, "Sim *", "Não")
)

kable(resultado_cevada,
      caption = "Teste t de Student – Cevada: Não Digerida vs Digerida",
      col.names = c("Comparação","Média ND","DP ND","Média D","DP D",
                    "Variação (%)","t","gl","p-valor","IC95 inf","IC95 sup","Sig. α=0,05"),
      align = "lrrrrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#E74C3C", color = "white")
Teste t de Student – Cevada: Não Digerida vs Digerida
Comparação Média ND DP ND Média D DP D Variação (%) t gl p-valor IC95 inf IC95 sup Sig. α=0,05
t Cevada: Não Digerida vs Digerida 0.2347 0.016 0.5248 0 123.63 -31.3316 2 0.001017 -0.33 -0.2503 Sim *
cat("\nResultado completo do teste t (Cevada):\n")
## 
## Resultado completo do teste t (Cevada):
print(t_cevada)
## 
##  Welch Two Sample t-test
## 
## data:  cev_nd and cev_d
## t = -31.332, df = 2, p-value = 0.001017
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.329989 -0.250300
## sample estimates:
## mean of x mean of y 
## 0.2346972 0.5248417

2.3 Testes t — Comparação Entre Amostras (Café vs Cevada)

2.3.1 Não Digeridos: Café vs Cevada

t_nd <- t.test(cafe_nd, cev_nd, paired = FALSE, var.equal = FALSE)

variacao_nd <- (mean(cev_nd) - mean(cafe_nd)) / mean(cafe_nd) * 100

resultado_nd <- data.frame(
  Comparacao    = "Café ND vs Cevada ND",
  Media_Cafe    = round(mean(cafe_nd), 4),
  DP_Cafe       = round(sd(cafe_nd),   4),
  Media_Cevada  = round(mean(cev_nd),  4),
  DP_Cevada     = round(sd(cev_nd),    4),
  Variacao_pct  = round(variacao_nd, 2),
  t_estatistica = round(t_nd$statistic, 4),
  df            = round(t_nd$parameter, 2),
  valor_p       = signif(t_nd$p.value, 4),
  IC95_inf      = round(t_nd$conf.int[1], 4),
  IC95_sup      = round(t_nd$conf.int[2], 4),
  Significativo = ifelse(t_nd$p.value < 0.05, "Sim *", "Não")
)

kable(resultado_nd,
      caption = "Teste t – Não Digeridos: Café vs Cevada (mg GAE/g)",
      col.names = c("Comparação","Média Café","DP Café","Média Cevada","DP Cevada",
                    "Variação (%)","t","gl","p-valor","IC95 inf","IC95 sup","Sig. α=0,05"),
      align = "lrrrrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#8E44AD", color = "white")
Teste t – Não Digeridos: Café vs Cevada (mg GAE/g)
Comparação Média Café DP Café Média Cevada DP Cevada Variação (%) t gl p-valor IC95 inf IC95 sup Sig. α=0,05
t Café ND vs Cevada ND 1.7755 0.0416 0.2347 0.016 -86.78 59.8341 2.58 3.97e-05 1.4507 1.6308 Sim *
cat("\nResultado completo do teste t (Não digeridos: Café vs Cevada):\n")
## 
## Resultado completo do teste t (Não digeridos: Café vs Cevada):
print(t_nd)
## 
##  Welch Two Sample t-test
## 
## data:  cafe_nd and cev_nd
## t = 59.834, df = 2.5813, p-value = 3.974e-05
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  1.450747 1.630760
## sample estimates:
## mean of x mean of y 
## 1.7754506 0.2346972

2.3.2 Digeridos: Café vs Cevada

t_d <- t.test(cafe_d, cev_d, paired = FALSE, var.equal = FALSE)

variacao_d <- (mean(cev_d) - mean(cafe_d)) / mean(cafe_d) * 100

resultado_d <- data.frame(
  Comparacao    = "Café D vs Cevada D",
  Media_Cafe    = round(mean(cafe_d), 4),
  DP_Cafe       = round(sd(cafe_d),   4),
  Media_Cevada  = round(mean(cev_d),  4),
  DP_Cevada     = round(sd(cev_d),    4),
  Variacao_pct  = round(variacao_d, 2),
  t_estatistica = round(t_d$statistic, 4),
  df            = round(t_d$parameter, 2),
  valor_p       = signif(t_d$p.value, 4),
  IC95_inf      = round(t_d$conf.int[1], 4),
  IC95_sup      = round(t_d$conf.int[2], 4),
  Significativo = ifelse(t_d$p.value < 0.05, "Sim *", "Não")
)

kable(resultado_d,
      caption = "Teste t – Digeridos: Café vs Cevada (mg GAE/g)",
      col.names = c("Comparação","Média Café","DP Café","Média Cevada","DP Cevada",
                    "Variação (%)","t","gl","p-valor","IC95 inf","IC95 sup","Sig. α=0,05"),
      align = "lrrrrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#2980B9", color = "white")
Teste t – Digeridos: Café vs Cevada (mg GAE/g)
Comparação Média Café DP Café Média Cevada DP Cevada Variação (%) t gl p-valor IC95 inf IC95 sup Sig. α=0,05
t Café D vs Cevada D 1.7718 0.0609 0.5248 0 -70.38 35.4724 2 0.0007938 1.0957 1.3982 Sim *
cat("\nResultado completo do teste t (Digeridos: Café vs Cevada):\n")
## 
## Resultado completo do teste t (Digeridos: Café vs Cevada):
print(t_d)
## 
##  Welch Two Sample t-test
## 
## data:  cafe_d and cev_d
## t = 35.472, df = 2, p-value = 0.0007938
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  1.095705 1.398206
## sample estimates:
## mean of x mean of y 
## 1.7717974 0.5248417

2.4 Tabela-Resumo — Fenólicos: Antes/Após Digestão com Variação e IC50

# Função IC50 aproximado: concentração que inibe 50% da atividade antioxidante
# Aqui estimamos como a concentração na qual a atividade fenólica seria reduzida à metade
# usando interpolação linear entre não-digerido e digerido
ic50_estimado <- function(nd, d) {
  m_nd <- mean(na.omit(nd))
  m_d  <- mean(na.omit(d))
  # IC50 estimado como a "concentração" (aqui o valor da amostra) que produziria
  # exatamente 50% entre os dois estados
  ic50 <- (m_nd + m_d) / 2
  round(ic50, 4)
}

resumo_fenol <- data.frame(
  Amostra          = c("Café", "Cevada"),
  Antes_ND_media   = round(c(mean(cafe_nd), mean(cev_nd)), 4),
  Antes_ND_dp      = round(c(sd(cafe_nd),   sd(cev_nd)),   4),
  Apos_D_media     = round(c(mean(cafe_d),  mean(cev_d)),  4),
  Apos_D_dp        = round(c(sd(cafe_d),    sd(cev_d)),    4),
  Variacao_pct     = round(c(variacao_cafe, variacao_cevada), 2),
  Valor_p          = signif(c(t_cafe$p.value, t_cevada$p.value), 4),
  Sig              = ifelse(c(t_cafe$p.value, t_cevada$p.value) < 0.05, "Sim *", "Não"),
  IC50_estimado    = c(ic50_estimado(cafe_nd, cafe_d),
                       ic50_estimado(cev_nd,  cev_d))
)

kable(resumo_fenol,
      caption = "Resumo: Compostos Fenólicos antes e após digestão (mg GAE/g)",
      col.names = c("Amostra",
                    "Antes (Média)","Antes (DP)",
                    "Após (Média)","Após (DP)",
                    "Variação (%)","Valor-p","Sig. α=0,05","IC50 estimado"),
      align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#2C3E50", color = "white") %>%
  footnote(general = "IC50 estimado = média aritmética entre os valores não digerido e digerido (mg GAE/g). Para IC50 real, recomenda-se curva dose-resposta com DPPH/ABTS.")
Resumo: Compostos Fenólicos antes e após digestão (mg GAE/g)
Amostra Antes (Média) Antes (DP) Após (Média) Após (DP) Variação (%) Valor-p Sig. α=0,05 IC50 estimado
Café 1.7755 0.0416 1.7718 0.0609 -0.21 0.936300 Não 1.7736
Cevada 0.2347 0.0160 0.5248 0.0000 123.63 0.001017 Sim * 0.3798
Note:
IC50 estimado = média aritmética entre os valores não digerido e digerido (mg GAE/g). Para IC50 real, recomenda-se curva dose-resposta com DPPH/ABTS.

2.5 Gráficos — Fenólicos

dados_graf_fenol <- data.frame(
  Amostra = rep(c("Café", "Cevada"), each = 2),
  Estado  = rep(c("Não Digerido", "Digerido"), 2),
  Media   = c(mean(cafe_nd), mean(cafe_d), mean(cev_nd), mean(cev_d)),
  DP      = c(sd(cafe_nd),   sd(cafe_d),   sd(cev_nd),   sd(cev_d))
)
dados_graf_fenol$Estado <- factor(dados_graf_fenol$Estado,
                                   levels = c("Não Digerido", "Digerido"))

ggplot(dados_graf_fenol, aes(x = Amostra, y = Media, fill = Estado)) +
  geom_bar(stat = "identity", position = position_dodge(0.8),
           width = 0.7, color = "black") +
  geom_errorbar(aes(ymin = Media - DP, ymax = Media + DP),
                position = position_dodge(0.8), width = 0.25, linewidth = 0.8) +
  scale_fill_manual(values = c("Não Digerido" = "#3498DB", "Digerido" = "#E74C3C")) +
  labs(title    = "Compostos Fenólicos Totais",
       subtitle = "Média ± DP — Antes e Após Digestão In Vitro",
       x = "Amostra", y = "Fenólicos (mg GAE/g)", fill = "Estado") +
  theme_bw(base_size = 13) +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5),
        legend.position = "top")


3 Análise de Capacidade Antioxidante — FRAP (µmol TE/g)

3.1 Estatísticas Descritivas — FRAP

frap_cafe_nd  <- na.omit(frap$FRAP_cafe_nd_g)
frap_cafe_d   <- na.omit(frap$FRAP_cafe_d_g)
frap_cev_nd   <- na.omit(frap$FRAP_cevada_nd_g)
frap_cev_d    <- na.omit(frap$FRAP_cevada_d_g)

desc_frap <- bind_rows(
  desc_stat(frap_cafe_nd,  "Café – Não Digerido (µmol TE/g)"),
  desc_stat(frap_cafe_d,   "Café – Digerido (µmol TE/g)"),
  desc_stat(frap_cev_nd,   "Cevada – Não Digerida (µmol TE/g)"),
  desc_stat(frap_cev_d,    "Cevada – Digerida (µmol TE/g)")
)

kable(desc_frap,
      caption = "Estatísticas Descritivas – FRAP (µmol TE/g)",
      col.names = c("Amostra","n","Média","DP","CV (%)","Mínimo","Máximo","IC95 inf.","IC95 sup."),
      align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#27AE60", color = "white")
Estatísticas Descritivas – FRAP (µmol TE/g)
Amostra n Média DP CV (%) Mínimo Máximo IC95 inf. IC95 sup.
Café – Não Digerido (µmol TE/g) 3 0.9638 0.0282 2.93 0.9422 0.9957 0.8938 1.0339
Café – Digerido (µmol TE/g) 3 1.1082 0.0208 1.88 1.0842 1.1207 1.0566 1.1598
Cevada – Não Digerida (µmol TE/g) 3 3970.4944 227.9418 5.74 3708.5604 4123.8318 3404.2554 4536.7333
Cevada – Digerida (µmol TE/g) 3 0.3890 0.0386 9.93 0.3447 0.4151 0.2931 0.4850

3.2 Testes t — FRAP: Efeito da Digestão

t_frap_cafe   <- t.test(frap_cafe_nd, frap_cafe_d,  paired = FALSE, var.equal = FALSE)
t_frap_cevada <- t.test(frap_cev_nd,  frap_cev_d,   paired = FALSE, var.equal = FALSE)

var_frap_cafe   <- (mean(frap_cafe_d) - mean(frap_cafe_nd))  / mean(frap_cafe_nd)  * 100
var_frap_cevada <- (mean(frap_cev_d)  - mean(frap_cev_nd))   / mean(frap_cev_nd)   * 100

resumo_frap <- data.frame(
  Amostra      = c("Café", "Cevada"),
  Antes_media  = round(c(mean(frap_cafe_nd), mean(frap_cev_nd)), 4),
  Antes_dp     = round(c(sd(frap_cafe_nd),   sd(frap_cev_nd)),   4),
  Apos_media   = round(c(mean(frap_cafe_d),  mean(frap_cev_d)),  4),
  Apos_dp      = round(c(sd(frap_cafe_d),    sd(frap_cev_d)),    4),
  Variacao_pct = round(c(var_frap_cafe, var_frap_cevada), 2),
  Valor_p      = signif(c(t_frap_cafe$p.value, t_frap_cevada$p.value), 4),
  Sig          = ifelse(c(t_frap_cafe$p.value, t_frap_cevada$p.value) < 0.05, "Sim *", "Não"),
  IC50_est     = c(ic50_estimado(frap_cafe_nd, frap_cafe_d),
                   ic50_estimado(frap_cev_nd,  frap_cev_d))
)

kable(resumo_frap,
      caption = "FRAP: Antes vs Após Digestão (µmol TE/g)",
      col.names = c("Amostra","Antes (Média)","Antes (DP)",
                    "Após (Média)","Após (DP)",
                    "Variação (%)","Valor-p","Sig. α=0,05","IC50 estimado"),
      align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#27AE60", color = "white") %>%
  footnote(general = "IC50 estimado = média aritmética entre os estados não digerido e digerido (µmol TE/g).")
FRAP: Antes vs Após Digestão (µmol TE/g)
Amostra Antes (Média) Antes (DP) Após (Média) Após (DP) Variação (%) Valor-p Sig. α=0,05 IC50 estimado
Café 0.9638 0.0282 1.1082 0.0208 14.98 0.002787 Sim * 1.036
Cevada 3970.4944 227.9418 0.3890 0.0386 -99.99 0.001097 Sim * 1985.442
Note:
IC50 estimado = média aritmética entre os estados não digerido e digerido (µmol TE/g).
cat("\n--- Teste t FRAP: Café ---\n"); print(t_frap_cafe)
## 
## --- Teste t FRAP: Café ---
## 
##  Welch Two Sample t-test
## 
## data:  frap_cafe_nd and frap_cafe_d
## t = -7.1361, df = 3.678, p-value = 0.002787
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.20251874 -0.08619921
## sample estimates:
## mean of x mean of y 
## 0.9638462 1.1082051
cat("\n--- Teste t FRAP: Cevada ---\n"); print(t_frap_cevada)
## 
## --- Teste t FRAP: Cevada ---
## 
##  Welch Two Sample t-test
## 
## data:  frap_cev_nd and frap_cev_d
## t = 30.167, df = 2, p-value = 0.001097
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  3403.866 4536.344
## sample estimates:
##    mean of x    mean of y 
## 3970.4943590    0.3890256

3.3 Testes t — FRAP: Café vs Cevada

t_frap_nd <- t.test(frap_cafe_nd, frap_cev_nd, paired = FALSE, var.equal = FALSE)
t_frap_d  <- t.test(frap_cafe_d,  frap_cev_d,  paired = FALSE, var.equal = FALSE)

comp_frap <- data.frame(
  Comparacao    = c("Café ND vs Cevada ND", "Café D vs Cevada D"),
  Media_Cafe    = round(c(mean(frap_cafe_nd), mean(frap_cafe_d)), 4),
  DP_Cafe       = round(c(sd(frap_cafe_nd),   sd(frap_cafe_d)),   4),
  Media_Cevada  = round(c(mean(frap_cev_nd),  mean(frap_cev_d)),  4),
  DP_Cevada     = round(c(sd(frap_cev_nd),    sd(frap_cev_d)),    4),
  t_stat        = round(c(t_frap_nd$statistic, t_frap_d$statistic), 4),
  df            = round(c(t_frap_nd$parameter, t_frap_d$parameter), 2),
  Valor_p       = signif(c(t_frap_nd$p.value, t_frap_d$p.value), 4),
  Sig           = ifelse(c(t_frap_nd$p.value, t_frap_d$p.value) < 0.05, "Sim *", "Não")
)

kable(comp_frap,
      caption = "FRAP: Comparação entre Café e Cevada",
      col.names = c("Comparação","Média Café","DP Café","Média Cevada","DP Cevada",
                    "t","gl","Valor-p","Sig. α=0,05"),
      align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#27AE60", color = "white")
FRAP: Comparação entre Café e Cevada
Comparação Média Café DP Café Média Cevada DP Cevada t gl Valor-p Sig. α=0,05
Café ND vs Cevada ND 0.9638 0.0282 3970.494 227.9418 -30.1631 2.00 0.0010970 Sim *
Café D vs Cevada D 1.1082 0.0208 0.389 0.0386 28.4030 3.07 0.0000809 Sim *

3.4 Gráfico — FRAP

dados_graf_frap <- data.frame(
  Amostra = rep(c("Café", "Cevada"), each = 2),
  Estado  = rep(c("Não Digerido", "Digerido"), 2),
  Media   = c(mean(frap_cafe_nd), mean(frap_cafe_d),
              mean(frap_cev_nd),  mean(frap_cev_d)),
  DP      = c(sd(frap_cafe_nd), sd(frap_cafe_d),
              sd(frap_cev_nd),  sd(frap_cev_d))
)
dados_graf_frap$Estado <- factor(dados_graf_frap$Estado,
                                  levels = c("Não Digerido", "Digerido"))

ggplot(dados_graf_frap, aes(x = Amostra, y = Media, fill = Estado)) +
  geom_bar(stat = "identity", position = position_dodge(0.8),
           width = 0.7, color = "black") +
  geom_errorbar(aes(ymin = Media - DP, ymax = Media + DP),
                position = position_dodge(0.8), width = 0.25, linewidth = 0.8) +
  scale_fill_manual(values = c("Não Digerido" = "#27AE60", "Digerido" = "#F39C12")) +
  labs(title    = "Capacidade Antioxidante — FRAP",
       subtitle = "Média ± DP — Antes e Após Digestão In Vitro",
       x = "Amostra", y = "FRAP (µmol TE/g)", fill = "Estado") +
  theme_bw(base_size = 13) +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5),
        legend.position = "top")


4 Análise de Capacidade Antioxidante — ORAC (µmol TE/g)

4.1 Estatísticas Descritivas — ORAC

# ORAC tem mais réplicas (n=9 para algumas colunas)
orac_cafe_nd  <- na.omit(df$ORAC_cafe_nd_g)
orac_cafe_d   <- na.omit(df$ORAC_cafe_d_g)
orac_cev_nd   <- na.omit(df$ORAC_cevada_nd_g)
orac_cev_d    <- na.omit(df$ORAC_cevada_d_g)

desc_orac <- bind_rows(
  desc_stat(orac_cafe_nd,  "Café – Não Digerido (µmol TE/g)"),
  desc_stat(orac_cafe_d,   "Café – Digerido (µmol TE/g)"),
  desc_stat(orac_cev_nd,   "Cevada – Não Digerida (µmol TE/g)"),
  desc_stat(orac_cev_d,    "Cevada – Digerida (µmol TE/g)")
)

kable(desc_orac,
      caption = "Estatísticas Descritivas – ORAC (µmol TE/g)",
      col.names = c("Amostra","n","Média","DP","CV (%)","Mínimo","Máximo","IC95 inf.","IC95 sup."),
      align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#8E44AD", color = "white")
Estatísticas Descritivas – ORAC (µmol TE/g)
Amostra n Média DP CV (%) Mínimo Máximo IC95 inf. IC95 sup.
Café – Não Digerido (µmol TE/g) 3 15.1422 0.2940 1.94 14.9265 15.4771 14.4120 15.8725
Café – Digerido (µmol TE/g) 9 13.4170 5.3636 39.98 -0.3648 16.6823 9.2942 17.5399
Cevada – Não Digerida (µmol TE/g) 3 22.3928 0.8409 3.76 21.8143 23.3574 20.3040 24.4817
Cevada – Digerida (µmol TE/g) 9 15.9216 1.1889 7.47 14.9834 18.9451 15.0077 16.8354

4.2 Testes t — ORAC: Efeito da Digestão

t_orac_cafe   <- t.test(orac_cafe_nd, orac_cafe_d,  paired = FALSE, var.equal = FALSE)
t_orac_cevada <- t.test(orac_cev_nd,  orac_cev_d,   paired = FALSE, var.equal = FALSE)

var_orac_cafe   <- (mean(orac_cafe_d) - mean(orac_cafe_nd)) / mean(orac_cafe_nd) * 100
var_orac_cevada <- (mean(orac_cev_d)  - mean(orac_cev_nd))  / mean(orac_cev_nd)  * 100

resumo_orac <- data.frame(
  Amostra      = c("Café", "Cevada"),
  Antes_media  = round(c(mean(orac_cafe_nd), mean(orac_cev_nd)), 4),
  Antes_dp     = round(c(sd(orac_cafe_nd),   sd(orac_cev_nd)),   4),
  Apos_media   = round(c(mean(orac_cafe_d),  mean(orac_cev_d)),  4),
  Apos_dp      = round(c(sd(orac_cafe_d),    sd(orac_cev_d)),    4),
  Variacao_pct = round(c(var_orac_cafe, var_orac_cevada), 2),
  Valor_p      = signif(c(t_orac_cafe$p.value, t_orac_cevada$p.value), 4),
  Sig          = ifelse(c(t_orac_cafe$p.value, t_orac_cevada$p.value) < 0.05, "Sim *", "Não"),
  IC50_est     = c(ic50_estimado(orac_cafe_nd, orac_cafe_d),
                   ic50_estimado(orac_cev_nd,  orac_cev_d))
)

kable(resumo_orac,
      caption = "ORAC: Antes vs Após Digestão (µmol TE/g)",
      col.names = c("Amostra","Antes (Média)","Antes (DP)",
                    "Após (Média)","Após (DP)",
                    "Variação (%)","Valor-p","Sig. α=0,05","IC50 estimado"),
      align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#8E44AD", color = "white") %>%
  footnote(general = "IC50 estimado = média aritmética entre os estados não digerido e digerido (µmol TE/g).")
ORAC: Antes vs Após Digestão (µmol TE/g)
Amostra Antes (Média) Antes (DP) Após (Média) Após (DP) Variação (%) Valor-p Sig. α=0,05 IC50 estimado
Café 15.1422 0.2940 13.4170 5.3636 -11.39 0.3644000 Não 14.2796
Cevada 22.3928 0.8409 15.9216 1.1889 -28.90 0.0001468 Sim * 19.1572
Note:
IC50 estimado = média aritmética entre os estados não digerido e digerido (µmol TE/g).
cat("\n--- Teste t ORAC: Café ---\n"); print(t_orac_cafe)
## 
## --- Teste t ORAC: Café ---
## 
##  Welch Two Sample t-test
## 
## data:  orac_cafe_nd and orac_cafe_d
## t = 0.96063, df = 8.1422, p-value = 0.3644
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -2.403625  5.854060
## sample estimates:
## mean of x mean of y 
##  15.14224  13.41702
cat("\n--- Teste t ORAC: Cevada ---\n"); print(t_orac_cevada)
## 
## --- Teste t ORAC: Cevada ---
## 
##  Welch Two Sample t-test
## 
## data:  orac_cev_nd and orac_cev_d
## t = 10.326, df = 4.9987, p-value = 0.0001468
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  4.860157 8.082386
## sample estimates:
## mean of x mean of y 
##  22.39282  15.92155

4.3 Testes t — ORAC: Café vs Cevada

t_orac_nd <- t.test(orac_cafe_nd, orac_cev_nd, paired = FALSE, var.equal = FALSE)
t_orac_d  <- t.test(orac_cafe_d,  orac_cev_d,  paired = FALSE, var.equal = FALSE)

comp_orac <- data.frame(
  Comparacao   = c("Café ND vs Cevada ND", "Café D vs Cevada D"),
  Media_Cafe   = round(c(mean(orac_cafe_nd), mean(orac_cafe_d)), 4),
  DP_Cafe      = round(c(sd(orac_cafe_nd),   sd(orac_cafe_d)),   4),
  Media_Cevada = round(c(mean(orac_cev_nd),  mean(orac_cev_d)),  4),
  DP_Cevada    = round(c(sd(orac_cev_nd),    sd(orac_cev_d)),    4),
  t_stat       = round(c(t_orac_nd$statistic, t_orac_d$statistic), 4),
  df           = round(c(t_orac_nd$parameter, t_orac_d$parameter), 2),
  Valor_p      = signif(c(t_orac_nd$p.value, t_orac_d$p.value), 4),
  Sig          = ifelse(c(t_orac_nd$p.value, t_orac_d$p.value) < 0.05, "Sim *", "Não")
)

kable(comp_orac,
      caption = "ORAC: Comparação entre Café e Cevada",
      col.names = c("Comparação","Média Café","DP Café","Média Cevada","DP Cevada",
                    "t","gl","Valor-p","Sig. α=0,05"),
      align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#8E44AD", color = "white")
ORAC: Comparação entre Café e Cevada
Comparação Média Café DP Café Média Cevada DP Cevada t gl Valor-p Sig. α=0,05
Café ND vs Cevada ND 15.1422 0.2940 22.3928 0.8409 -14.0981 2.48 0.001971 Sim *
Café D vs Cevada D 13.4170 5.3636 15.9216 1.1889 -1.3676 8.78 0.205400 Não

4.4 Gráfico — ORAC

dados_graf_orac <- data.frame(
  Amostra = rep(c("Café", "Cevada"), each = 2),
  Estado  = rep(c("Não Digerido", "Digerido"), 2),
  Media   = c(mean(orac_cafe_nd), mean(orac_cafe_d),
              mean(orac_cev_nd),  mean(orac_cev_d)),
  DP      = c(sd(orac_cafe_nd), sd(orac_cafe_d),
              sd(orac_cev_nd),  sd(orac_cev_d))
)
dados_graf_orac$Estado <- factor(dados_graf_orac$Estado,
                                  levels = c("Não Digerido", "Digerido"))

ggplot(dados_graf_orac, aes(x = Amostra, y = Media, fill = Estado)) +
  geom_bar(stat = "identity", position = position_dodge(0.8),
           width = 0.7, color = "black") +
  geom_errorbar(aes(ymin = Media - DP, ymax = Media + DP),
                position = position_dodge(0.8), width = 0.25, linewidth = 0.8) +
  scale_fill_manual(values = c("Não Digerido" = "#8E44AD", "Digerido" = "#E91E63")) +
  labs(title    = "Capacidade Antioxidante — ORAC",
       subtitle = "Média ± DP — Antes e Após Digestão In Vitro",
       x = "Amostra", y = "ORAC (µmol TE/g)", fill = "Estado") +
  theme_bw(base_size = 13) +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5),
        legend.position = "top")


5 Tabela Geral Consolidada — Todos os Parâmetros

tabela_geral <- data.frame(
  Parametro    = c("Fenólicos (mg GAE/g)", "Fenólicos (mg GAE/g)",
                   "FRAP (µmol TE/g)",     "FRAP (µmol TE/g)",
                   "ORAC (µmol TE/g)",     "ORAC (µmol TE/g)"),
  Amostra      = rep(c("Café", "Cevada"), 3),
  Antes_media  = round(c(mean(cafe_nd),     mean(cev_nd),
                          mean(frap_cafe_nd), mean(frap_cev_nd),
                          mean(orac_cafe_nd), mean(orac_cev_nd)), 4),
  Antes_dp     = round(c(sd(cafe_nd),       sd(cev_nd),
                          sd(frap_cafe_nd),   sd(frap_cev_nd),
                          sd(orac_cafe_nd),   sd(orac_cev_nd)), 4),
  Apos_media   = round(c(mean(cafe_d),      mean(cev_d),
                          mean(frap_cafe_d),  mean(frap_cev_d),
                          mean(orac_cafe_d),  mean(orac_cev_d)), 4),
  Apos_dp      = round(c(sd(cafe_d),        sd(cev_d),
                          sd(frap_cafe_d),    sd(frap_cev_d),
                          sd(orac_cafe_d),    sd(orac_cev_d)), 4),
  Variacao_pct = round(c(variacao_cafe, variacao_cevada,
                          var_frap_cafe, var_frap_cevada,
                          var_orac_cafe, var_orac_cevada), 2),
  Valor_p      = signif(c(t_cafe$p.value,   t_cevada$p.value,
                           t_frap_cafe$p.value, t_frap_cevada$p.value,
                           t_orac_cafe$p.value, t_orac_cevada$p.value), 4),
  Sig          = ifelse(c(t_cafe$p.value,   t_cevada$p.value,
                           t_frap_cafe$p.value, t_frap_cevada$p.value,
                           t_orac_cafe$p.value, t_orac_cevada$p.value) < 0.05,
                        "Sim *", "Não"),
  IC50_est     = round(c(
    ic50_estimado(cafe_nd, cafe_d),     ic50_estimado(cev_nd,  cev_d),
    ic50_estimado(frap_cafe_nd, frap_cafe_d), ic50_estimado(frap_cev_nd, frap_cev_d),
    ic50_estimado(orac_cafe_nd, orac_cafe_d), ic50_estimado(orac_cev_nd, orac_cev_d)
  ), 4)
)

kable(tabela_geral,
      caption = "Tabela Consolidada — Fenólicos, FRAP e ORAC: Antes vs Após Digestão",
      col.names = c("Parâmetro","Amostra",
                    "Antes (Média)","Antes (DP)",
                    "Após (Média)","Após (DP)",
                    "Variação (%)","Valor-p","Sig. α=0,05","IC50 estimado"),
      align = "llrrrrrrrr") %>%
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, background = "#2C3E50", color = "white") %>%
  pack_rows("Compostos Fenólicos", 1, 2) %>%
  pack_rows("FRAP", 3, 4) %>%
  pack_rows("ORAC", 5, 6) %>%
  footnote(
    general = "* p < 0,05 indica diferença estatisticamente significativa (teste t de Welch, bicaudal).",
    symbol  = "IC50 estimado: valor médio entre não digerido e digerido. Para IC50 real, utilizar curva dose-resposta com DPPH ou ABTS."
  )
Tabela Consolidada — Fenólicos, FRAP e ORAC: Antes vs Após Digestão
Parâmetro Amostra Antes (Média) Antes (DP) Após (Média) Após (DP) Variação (%) Valor-p Sig. α=0,05 IC50 estimado
Compostos Fenólicos
Fenólicos (mg GAE/g) Café 1.7755 0.0416 1.7718 0.0609 -0.21 0.9363000 Não 1.7736
Fenólicos (mg GAE/g) Cevada 0.2347 0.0160 0.5248 0.0000 123.63 0.0010170 Sim * 0.3798
FRAP
FRAP (µmol TE/g) Café 0.9638 0.0282 1.1082 0.0208 14.98 0.0027870 Sim * 1.0360
FRAP (µmol TE/g) Cevada 3970.4944 227.9418 0.3890 0.0386 -99.99 0.0010970 Sim * 1985.4417
ORAC
ORAC (µmol TE/g) Café 15.1422 0.2940 13.4170 5.3636 -11.39 0.3644000 Não 14.2796
ORAC (µmol TE/g) Cevada 22.3928 0.8409 15.9216 1.1889 -28.90 0.0001468 Sim * 19.1572
Note:
* p < 0,05 indica diferença estatisticamente significativa (teste t de Welch, bicaudal).
* IC50 estimado: valor médio entre não digerido e digerido. Para IC50 real, utilizar curva dose-resposta com DPPH ou ABTS.

6 Interpretação dos Resultados

cat("
## Resumo Interpretativo

### Compostos Fenólicos Totais
- **Café**: Verificar se a digestão in vitro alterou significativamente (p < 0,05) o teor de fenólicos.
- **Cevada**: Verificar se houve variação significativa após digestão.
- A comparação entre café e cevada (não digeridos e digeridos) indica qual matriz possui maior
  concentração de compostos fenólicos biodisponíveis.

### FRAP
- O FRAP mede a capacidade de redução do ferro (Fe³⁺ → Fe²⁺) como indicativo de capacidade
  antioxidante total.
- Valores elevados indicam maior capacidade antioxidante.

### ORAC
- O ORAC avalia a capacidade de absorção de radicais de oxigênio, sendo considerado um dos
  métodos mais fisiologicamente relevantes para medir atividade antioxidante.

### IC50
- O IC50 estimado representa aqui a média entre os estados não digerido e digerido.
- **Atenção**: Para um IC50 real, é necessário construir uma curva dose-resposta utilizando
  ensaios de DPPH ou ABTS, onde se determina a concentração necessária para inibir 50%
  da atividade do radical livre.

### Nota sobre tamanho amostral
- As análises de fenólicos e FRAP possuem apenas n=3 réplicas, o que limita o poder
  estatístico dos testes. Os resultados devem ser interpretados com cautela.
- O ORAC possui até n=9 réplicas para algumas variáveis, aumentando a confiabilidade.
")

6.1 Resumo Interpretativo

6.1.1 Compostos Fenólicos Totais

  • Café: Verificar se a digestão in vitro alterou significativamente (p < 0,05) o teor de fenólicos.
  • Cevada: Verificar se houve variação significativa após digestão.
  • A comparação entre café e cevada (não digeridos e digeridos) indica qual matriz possui maior concentração de compostos fenólicos biodisponíveis.

6.1.2 FRAP

  • O FRAP mede a capacidade de redução do ferro (Fe³⁺ → Fe²⁺) como indicativo de capacidade antioxidante total.
  • Valores elevados indicam maior capacidade antioxidante.

6.1.3 ORAC

  • O ORAC avalia a capacidade de absorção de radicais de oxigênio, sendo considerado um dos métodos mais fisiologicamente relevantes para medir atividade antioxidante.

6.1.4 IC50

  • O IC50 estimado representa aqui a média entre os estados não digerido e digerido.
  • Atenção: Para um IC50 real, é necessário construir uma curva dose-resposta utilizando ensaios de DPPH ou ABTS, onde se determina a concentração necessária para inibir 50% da atividade do radical livre.

6.1.5 Nota sobre tamanho amostral

  • As análises de fenólicos e FRAP possuem apenas n=3 réplicas, o que limita o poder estatístico dos testes. Os resultados devem ser interpretados com cautela.
  • O ORAC possui até n=9 réplicas para algumas variáveis, aumentando a confiabilidade.

7 Sessão R (Reprodutibilidade)

sessionInfo()
## R version 4.5.1 (2025-06-13 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 22631)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=Portuguese_Brazil.utf8  LC_CTYPE=Portuguese_Brazil.utf8   
## [3] LC_MONETARY=Portuguese_Brazil.utf8 LC_NUMERIC=C                      
## [5] LC_TIME=Portuguese_Brazil.utf8    
## 
## time zone: America/Bahia
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] scales_1.4.0     ggpubr_0.6.3     rstatix_0.7.3    kableExtra_1.4.0
## [5] knitr_1.51       ggplot2_4.0.2    tidyr_1.3.2      dplyr_1.2.1     
## [9] readxl_1.4.5    
## 
## loaded via a namespace (and not attached):
##  [1] sass_0.4.10        generics_0.1.4     xml2_1.5.2         stringi_1.8.7     
##  [5] digest_0.6.39      magrittr_2.0.3     evaluate_1.0.5     grid_4.5.1        
##  [9] RColorBrewer_1.1-3 fastmap_1.2.0      cellranger_1.1.0   jsonlite_2.0.0    
## [13] backports_1.5.1    Formula_1.2-5      purrr_1.2.2        viridisLite_0.4.3 
## [17] textshaping_1.0.5  jquerylib_0.1.4    abind_1.4-8        cli_3.6.5         
## [21] rlang_1.2.0        withr_3.0.2        cachem_1.1.0       yaml_2.3.12       
## [25] tools_4.5.1        ggsignif_0.6.4     broom_1.0.12       vctrs_0.7.3       
## [29] R6_2.6.1           lifecycle_1.0.5    stringr_1.6.0      car_3.1-5         
## [33] pkgconfig_2.0.3    pillar_1.11.1      bslib_0.10.0       gtable_0.3.6      
## [37] glue_1.8.0         systemfonts_1.3.2  xfun_0.56          tibble_3.3.1      
## [41] tidyselect_1.2.1   rstudioapi_0.18.0  farver_2.1.2       htmltools_0.5.9   
## [45] labeling_0.4.3     rmarkdown_2.31     carData_3.0-6      svglite_2.2.2     
## [49] compiler_4.5.1     S7_0.2.1