# Importar o banco de dados
library(readxl)
data <- read_excel("Downloads/obesity_marcio.xlsx", sheet = "Data")

# Carregando bibliotecas necessárias
library(tidyverse)  # Já inclui ggplot2
library(naniar)     # Para análise de dados ausentes
library(corrplot)   # Para matrizes de correlação
library(lme4)       # Para modelos mistos
library(factoextra) # Para análise de componentes principais

# Corrigir problema do UPSIT3 (convertendo para numérico)
data <- data %>%
  mutate(
    # Tratamento mais robusto para conversão
    UPSIT3_numeric = case_when(
      UPSIT3 == "801/26=30,8" ~ 30.8,
      is.character(UPSIT3) & !is.na(UPSIT3) ~ as.numeric(as.character(UPSIT3)),
      TRUE ~ as.numeric(UPSIT3)  # Caso já seja numérico
    ),
    # Criar identificadores de tempo para as análises longitudinais
    Tempo1 = "Baseline",
    Tempo2 = "1 mês",
    Tempo3 = "6 meses"
  )
# Função corrigida para realizar testes estatísticos
realizar_testes <- function() {
  # Preparar dados em formato longo para UPSIT
  upsit_longo <- data %>%
    select(ID, Group, UPSIT1, UPSIT2, UPSIT3_numeric) %>%
    pivot_longer(
      cols = c(UPSIT1, UPSIT2, UPSIT3_numeric),
      names_to = "Tempo",
      values_to = "UPSIT"
    ) %>%
    mutate(Tempo = case_when(
      Tempo == "UPSIT1" ~ "Pre",
      Tempo == "UPSIT2" ~ "1_mes",
      Tempo == "UPSIT3_numeric" ~ "6_meses"
    )) %>%
    # Remover valores NA
    filter(!is.na(UPSIT)) %>%
    # Garantir que Group e Tempo sejam fatores
    mutate(
      Group = factor(Group),
      Tempo = factor(Tempo, levels = c("Pre", "1_mes", "6_meses"))
    )
  
  # Verificar se temos dados suficientes para ANOVA
  group_tempo_counts <- upsit_longo %>%
    group_by(Group, Tempo) %>%
    summarise(n = n(), .groups = "drop")
  
  print("Contagem de dados para cada combinação de Grupo e Tempo (UPSIT):")
  print(group_tempo_counts)
  
  # Tabela de contingência para verificar células vazias
  contingency_table <- table(upsit_longo$Group, upsit_longo$Tempo)
  print("Tabela de contingência Group x Tempo (UPSIT):")
  print(contingency_table)
  
  # Executar ANOVA apenas se houver dados suficientes
  if(all(contingency_table > 0) && 
     length(unique(upsit_longo$Group)) > 1 && 
     length(unique(upsit_longo$Tempo)) > 1) {
    # ANOVA para UPSIT
    anova_upsit <- aov(UPSIT ~ Group * Tempo + Error(ID/Tempo), data = upsit_longo)
    print("Resultado da ANOVA para UPSIT:")
    print(summary(anova_upsit))
  } else {
    print("Dados insuficientes para análise ANOVA do UPSIT: algumas combinações Grupo-Tempo não têm dados")
    
    # Alternativa: usar modelo linear misto que lida melhor com dados desbalanceados
    if(requireNamespace("lmerTest", quietly = TRUE)) {
      library(lmerTest)
      print("Tentando modelo linear misto para UPSIT:")
      tryCatch({
        modelo_upsit <- lmer(UPSIT ~ Group * Tempo + (1|ID), data = upsit_longo)
        print(summary(modelo_upsit))
        print(anova(modelo_upsit))
      }, error = function(e) {
        print(paste("Erro no modelo misto:", e$message))
      })
    } else {
      print("Instale o pacote 'lmerTest' para usar modelos lineares mistos como alternativa")
    }
  }
  
  # Similar para Multiscent
  multiscent_longo <- data %>%
    select(ID, Group, Multicent1_Total, Multicent2_Total, Mlutiscent3) %>%
    pivot_longer(
      cols = c(Multicent1_Total, Multicent2_Total, Mlutiscent3),
      names_to = "Tempo",
      values_to = "Multiscent"
    ) %>%
    mutate(Tempo = case_when(
      Tempo == "Multicent1_Total" ~ "Pre",
      Tempo == "Multicent2_Total" ~ "1_mes",
      Tempo == "Mlutiscent3" ~ "6_meses"
    )) %>%
    # Remover valores NA
    filter(!is.na(Multiscent)) %>%
    # Garantir que Group e Tempo sejam fatores
    mutate(
      Group = factor(Group),
      Tempo = factor(Tempo, levels = c("Pre", "1_mes", "6_meses"))
    )
  
  # Verificar se temos dados suficientes para ANOVA
  multi_counts <- table(multiscent_longo$Group, multiscent_longo$Tempo)
  print("Tabela de contingência Group x Tempo (Multiscent):")
  print(multi_counts)
  
  # Executar ANOVA apenas se houver dados suficientes
  if(all(apply(multi_counts > 0, 1, all)) && 
     nrow(multi_counts) > 1 && ncol(multi_counts) > 1) {
    # ANOVA para Multiscent
    anova_multiscent <- aov(Multiscent ~ Group * Tempo + Error(ID/Tempo), data = multiscent_longo)
    print("Resultado da ANOVA para Multiscent:")
    print(summary(anova_multiscent))
  } else {
    print("Dados insuficientes para análise ANOVA do Multiscent: algumas combinações Grupo-Tempo não têm dados")
    
    # Tentar modelo misto como alternativa
    if(requireNamespace("lmerTest", quietly = TRUE)) {
      library(lmerTest)
      print("Tentando modelo linear misto para Multiscent:")
      tryCatch({
        modelo_multi <- lmer(Multiscent ~ Group * Tempo + (1|ID), data = multiscent_longo)
        print(summary(modelo_multi))
        print(anova(modelo_multi))
      }, error = function(e) {
        print(paste("Erro no modelo misto:", e$message))
      })
    }
  }
}

# Executar a função corrigida
realizar_testes()
## [1] "Contagem de dados para cada combinação de Grupo e Tempo (UPSIT):"
## # A tibble: 3 × 3
##   Group        Tempo       n
##   <fct>        <fct>   <int>
## 1 Intervention Pre        49
## 2 Intervention 1_mes      46
## 3 Intervention 6_meses    43
## [1] "Tabela de contingência Group x Tempo (UPSIT):"
##               
##                Pre 1_mes 6_meses
##   Intervention  49    46      43
## [1] "Dados insuficientes para análise ANOVA do UPSIT: algumas combinações Grupo-Tempo não têm dados"
## 
## Attaching package: 'lmerTest'
## The following object is masked from 'package:lme4':
## 
##     lmer
## The following object is masked from 'package:stats':
## 
##     step
## [1] "Tentando modelo linear misto para UPSIT:"
## [1] "Erro no modelo misto: contrasts can be applied only to factors with 2 or more levels"
## [1] "Tabela de contingência Group x Tempo (Multiscent):"
##               
##                Pre 1_mes 6_meses
##   Control       28    20       1
##   Intervention  42    43      41
## [1] "Resultado da ANOVA para Multiscent:"
## 
## Error: ID
##       Df Sum Sq Mean Sq
## Group  1  48.32   48.32
## 
## Error: ID:Tempo
##       Df Sum Sq Mean Sq
## Group  1  4.575   4.575
## Tempo  1  0.049   0.049
## 
## Error: Within
##              Df Sum Sq Mean Sq F value   Pr(>F)    
## Group         1  107.0  107.02  14.154 0.000233 ***
## Tempo         2    3.7    1.87   0.247 0.781177    
## Group:Tempo   2   12.4    6.18   0.817 0.443335    
## Residuals   166 1255.1    7.56                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Primeiro, definir todos os testes t necessários
# Filtrar apenas o grupo de intervenção para testes pareados
dados_intervencao <- data %>% 
  filter(Group == "Intervention")

# 1. Teste t para UPSIT (pré vs 1 mês)
t_upsit_pre_1mes <- tryCatch({
  dados_intervencao %>%
    filter(!is.na(UPSIT1) & !is.na(UPSIT2)) %>%
    with(t.test(UPSIT1, UPSIT2, paired = TRUE))
}, error = function(e) {
  message("Erro no teste UPSIT pré vs 1 mês: ", e$message)
  # Retornar um objeto simulando resultado do teste t
  list(p.value = 1, statistic = 0, parameter = 0,
       estimate = 0, conf.int = c(0, 0),
       method = "Erro - dados insuficientes")
})

# 2. Teste t para Multiscent (pré vs 1 mês)
t_multi_int_pre_1mes <- tryCatch({
  dados_intervencao %>%
    filter(!is.na(Multicent1_Total) & !is.na(Multicent2_Total)) %>%
    with(t.test(Multicent1_Total, Multicent2_Total, paired = TRUE))
}, error = function(e) {
  message("Erro no teste Multiscent pré vs 1 mês: ", e$message)
  list(p.value = 1)
})

# 3. Testes para dimensões do OPF (pré vs 1 mês)
# Pleasantness
t_pleasant_int_pre_1mes <- tryCatch({
  dados_intervencao %>%
    filter(!is.na(Pleasantness1) & !is.na(Pleasantness2)) %>%
    with(t.test(Pleasantness1, Pleasantness2, paired = TRUE))
}, error = function(e) {
  message("Erro no teste Pleasantness pré vs 1 mês: ", e$message)
  list(p.value = 1)
})

# Intensity
t_intensity_int_pre_1mes <- tryCatch({
  dados_intervencao %>%
    filter(!is.na(Intensity1) & !is.na(Intensity2)) %>%
    with(t.test(Intensity1, Intensity2, paired = TRUE))
}, error = function(e) {
  message("Erro no teste Intensity pré vs 1 mês: ", e$message)
  list(p.value = 1)
})

# Familiarity
t_familiar_int_pre_1mes <- tryCatch({
  dados_intervencao %>%
    filter(!is.na(Familiarity1) & !is.na(Familiarity2)) %>%
    with(t.test(Familiarity1, Familiarity2, paired = TRUE))
}, error = function(e) {
  message("Erro no teste Familiarity pré vs 1 mês: ", e$message)
  list(p.value = 1)
})

# Edibility
t_edible_int_pre_1mes <- tryCatch({
  dados_intervencao %>%
    filter(!is.na(Edibility1) & !is.na(Edibility2)) %>%
    with(t.test(Edibility1, Edibility2, paired = TRUE))
}, error = function(e) {
  message("Erro no teste Edibility pré vs 1 mês: ", e$message)
  list(p.value = 1)
})

# Irritating
t_irritating_int_pre_1mes <- tryCatch({
  dados_intervencao %>%
    filter(!is.na(Irritating1) & !is.na(Irritating2)) %>%
    with(t.test(Irritating1, Irritating2, paired = TRUE))
}, error = function(e) {
  message("Erro no teste Irritating pré vs 1 mês: ", e$message)
  list(p.value = 1)
})

# Imprimir resultados dos testes para verificação
cat("\nResultados dos testes t pareados (pré vs 1 mês):\n")
## 
## Resultados dos testes t pareados (pré vs 1 mês):
cat("UPSIT: p =", round(t_upsit_pre_1mes$p.value, 4), "\n")
## UPSIT: p = 0.7389
cat("Multiscent: p =", round(t_multi_int_pre_1mes$p.value, 4), "\n")
## Multiscent: p = 0.8433
cat("Pleasantness: p =", round(t_pleasant_int_pre_1mes$p.value, 4), "\n")
## Pleasantness: p = 0.9319
cat("Intensity: p =", round(t_intensity_int_pre_1mes$p.value, 4), "\n")
## Intensity: p = 0.8621
cat("Familiarity: p =", round(t_familiar_int_pre_1mes$p.value, 4), "\n")
## Familiarity: p = 0.995
cat("Edibility: p =", round(t_edible_int_pre_1mes$p.value, 4), "\n")
## Edibility: p = 0.6786
cat("Irritating: p =", round(t_irritating_int_pre_1mes$p.value, 4), "\n")
## Irritating: p = 0.8585
# Agora podemos criar a tabela de verificação de hipótese
verifica_hipotese <- data.frame(
  Medida = c("UPSIT", "Multiscent", "OPF (média das dimensões)"),
  Mudança_Significativa = c(
    t_upsit_pre_1mes$p.value < 0.05,
    t_multi_int_pre_1mes$p.value < 0.05,
    # Verificar se pelo menos 3 das 5 dimensões do OPF são significativas
    sum(c(t_pleasant_int_pre_1mes$p.value, 
          t_intensity_int_pre_1mes$p.value,
          t_familiar_int_pre_1mes$p.value,
          t_edible_int_pre_1mes$p.value,
          t_irritating_int_pre_1mes$p.value) < 0.05) >= 3
  ),
  Conclusão = c(
    ifelse(t_upsit_pre_1mes$p.value < 0.05, "Rejeita H0", "Não rejeita H0"),
    ifelse(t_multi_int_pre_1mes$p.value < 0.05, "Rejeita H0", "Não rejeita H0"),
    ifelse(sum(c(t_pleasant_int_pre_1mes$p.value, 
                 t_intensity_int_pre_1mes$p.value,
                 t_familiar_int_pre_1mes$p.value,
                 t_edible_int_pre_1mes$p.value,
                 t_irritating_int_pre_1mes$p.value) < 0.05) >= 3, 
           "Rejeita H0", "Não rejeita H0")
  ),
  Valor_p = c(
    round(t_upsit_pre_1mes$p.value, 4),
    round(t_multi_int_pre_1mes$p.value, 4),
    paste(c(
      paste("Pleasant:", round(t_pleasant_int_pre_1mes$p.value, 4)),
      paste("Intensity:", round(t_intensity_int_pre_1mes$p.value, 4)),
      paste("Familiar:", round(t_familiar_int_pre_1mes$p.value, 4)),
      paste("Edible:", round(t_edible_int_pre_1mes$p.value, 4)),
      paste("Irritating:", round(t_irritating_int_pre_1mes$p.value, 4))
    ), collapse = "; ")
  )
)

# Adicionar interpretação mais clara
verifica_hipotese$Interpretação <- ifelse(
  verifica_hipotese$Mudança_Significativa,
  "Houve mudança significativa após a intervenção (p<0.05)",
  "Não houve mudança significativa após a intervenção (p≥0.05)"
)

# Mostrar tabela final
print(verifica_hipotese)
##                      Medida Mudança_Significativa      Conclusão
## 1                     UPSIT                 FALSE Não rejeita H0
## 2                Multiscent                 FALSE Não rejeita H0
## 3 OPF (média das dimensões)                 FALSE Não rejeita H0
##                                                                                    Valor_p
## 1                                                                                   0.7389
## 2                                                                                   0.8433
## 3 Pleasant: 0.9319; Intensity: 0.8621; Familiar: 0.995; Edible: 0.6786; Irritating: 0.8585
##                                                 Interpretação
## 1 Não houve mudança significativa após a intervenção (p≥0.05)
## 2 Não houve mudança significativa após a intervenção (p≥0.05)
## 3 Não houve mudança significativa após a intervenção (p≥0.05)
# Criar visualização gráfica das alterações
# UPSIT: Pré vs 1 mês
upsit_plot <- dados_intervencao %>%
  select(ID, UPSIT1, UPSIT2) %>%
  filter(!is.na(UPSIT1) & !is.na(UPSIT2)) %>%
  pivot_longer(cols = c(UPSIT1, UPSIT2),
               names_to = "Tempo",
               values_to = "UPSIT") %>%
  mutate(Tempo = factor(Tempo, 
                        levels = c("UPSIT1", "UPSIT2"),
                        labels = c("Pré-operatório", "1 mês"))) %>%
  ggplot(aes(x = Tempo, y = UPSIT, group = ID)) +
  geom_line(alpha = 0.3) +
  geom_point() +
  stat_summary(fun = mean, geom = "point", color = "red", size = 4) +
  stat_summary(fun = mean, geom = "line", color = "red", group = 1, size = 1) +
  labs(title = "Mudança no UPSIT: Pré-operatório vs 1 mês",
       subtitle = paste("p =", round(t_upsit_pre_1mes$p.value, 4)),
       y = "Pontuação UPSIT",
       x = "") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Mostrar o gráfico
print(upsit_plot)

## Correção de Análises e Adaptações
realizar_testes <- function() {
  # Preparar dados em formato longo para UPSIT
  upsit_longo <- data %>%
    select(ID, Group, UPSIT1, UPSIT2, UPSIT3_numeric) %>%
    pivot_longer(
      cols = c(UPSIT1, UPSIT2, UPSIT3_numeric),
      names_to = "Tempo",
      values_to = "UPSIT"
    ) %>%
    mutate(
      Tempo = case_when(
        Tempo == "UPSIT1" ~ "Pre",
        Tempo == "UPSIT2" ~ "1_mes",
        Tempo == "UPSIT3_numeric" ~ "6_meses"
      ),
      # Converter Tempo para fator
      Tempo = factor(Tempo, levels = c("Pre", "1_mes", "6_meses"))
    ) %>%
    # Remover linhas com NA
    filter(!is.na(UPSIT))
  
  # Diagnóstico: Verificar níveis disponíveis após filtragem
  cat("Diagnóstico para UPSIT:\n")
  cat("- Número de observações após filtragem:", nrow(upsit_longo), "\n")
  cat("- Contagem por Tempo:\n")
  print(table(upsit_longo$Tempo))
  cat("- Contagem por Group:\n")
  print(table(upsit_longo$Group))
  cat("- Tabela cruzada Group x Tempo:\n")
  print(table(upsit_longo$Group, upsit_longo$Tempo))
  
  # Análise adaptativa baseada nos dados disponíveis
  n_grupos <- length(unique(upsit_longo$Group))
  n_tempos <- length(unique(upsit_longo$Tempo))
  
  if(n_grupos > 1 && n_tempos > 1) {
    # Caso ideal: ANOVA mista
    cat("\nExecutando ANOVA mista para UPSIT...\n")
    tryCatch({
      anova_upsit <- aov(UPSIT ~ Group * Tempo + Error(ID/Tempo), data = upsit_longo)
      print(summary(anova_upsit))
    }, error = function(e) {
      cat("Erro na ANOVA:", e$message, "\n")
    })
  } else if(n_grupos == 1 && n_tempos > 1) {
    # Apenas um grupo, múltiplos tempos: ANOVA de medidas repetidas
    cat("\nApenas um grupo disponível. Executando ANOVA de medidas repetidas...\n")
    tryCatch({
      anova_upsit <- aov(UPSIT ~ Tempo + Error(ID/Tempo), data = upsit_longo)
      print(summary(anova_upsit))
    }, error = function(e) {
      cat("Erro na ANOVA:", e$message, "\n")
    })
  } else if(n_grupos > 1 && n_tempos == 1) {
    # Múltiplos grupos, apenas um tempo: t-test entre grupos
    cat("\nApenas um tempo disponível. Executando t-test entre grupos...\n")
    print(t.test(UPSIT ~ Group, data = upsit_longo))
  } else {
    # Apenas um grupo e um tempo: estatísticas descritivas
    cat("\nApenas um grupo e um tempo disponíveis. Mostrando estatísticas descritivas...\n")
    print(summary(upsit_longo$UPSIT))
  }
  
  # Preparar dados em formato longo para Multiscent
  multiscent_longo <- data %>%
    select(ID, Group, Multicent1_Total, Multicent2_Total, Mlutiscent3) %>%
    pivot_longer(
      cols = c(Multicent1_Total, Multicent2_Total, Mlutiscent3),
      names_to = "Tempo",
      values_to = "Multiscent"
    ) %>%
    mutate(
      Tempo = case_when(
        Tempo == "Multicent1_Total" ~ "Pre",
        Tempo == "Multicent2_Total" ~ "1_mes",
        Tempo == "Mlutiscent3" ~ "6_meses"
      ),
      # Converter Tempo para fator
      Tempo = factor(Tempo, levels = c("Pre", "1_mes", "6_meses"))
    ) %>%
    # Remover linhas com NA
    filter(!is.na(Multiscent))
  
  # Diagnóstico: Verificar níveis disponíveis após filtragem
  cat("\n\nDiagnóstico para Multiscent:\n")
  cat("- Número de observações após filtragem:", nrow(multiscent_longo), "\n")
  cat("- Contagem por Tempo:\n")
  print(table(multiscent_longo$Tempo))
  cat("- Contagem por Group:\n")
  print(table(multiscent_longo$Group))
  cat("- Tabela cruzada Group x Tempo:\n")
  print(table(multiscent_longo$Group, multiscent_longo$Tempo))
  
  # Mesma lógica adaptativa para Multiscent
  n_grupos <- length(unique(multiscent_longo$Group))
  n_tempos <- length(unique(multiscent_longo$Tempo))
  
  if(n_grupos > 1 && n_tempos > 1) {
    cat("\nExecutando ANOVA mista para Multiscent...\n")
    tryCatch({
      anova_multiscent <- aov(Multiscent ~ Group * Tempo + Error(ID/Tempo), data = multiscent_longo)
      print(summary(anova_multiscent))
    }, error = function(e) {
      cat("Erro na ANOVA:", e$message, "\n")
    })
  } else if(n_grupos == 1 && n_tempos > 1) {
    cat("\nApenas um grupo disponível. Executando ANOVA de medidas repetidas...\n")
    tryCatch({
      anova_multiscent <- aov(Multiscent ~ Tempo + Error(ID/Tempo), data = multiscent_longo)
      print(summary(anova_multiscent))
    }, error = function(e) {
      cat("Erro na ANOVA:", e$message, "\n")
    })
  } else if(n_grupos > 1 && n_tempos == 1) {
    cat("\nApenas um tempo disponível. Executando t-test entre grupos...\n")
    print(t.test(Multiscent ~ Group, data = multiscent_longo))
  } else {
    cat("\nApenas um grupo e um tempo disponíveis. Mostrando estatísticas descritivas...\n")
    print(summary(multiscent_longo$Multiscent))
  }
}

Alternativa: Testes Pareados Específicos

Se não for possível executar a ANOVA, você pode fazer análises mais focadas em comparações específicas:

Comparações pareadas específicas para períodos com maior quantidade de dados

testes_pareados <- function() {
  # UPSIT: Pré vs 1 mês (apenas grupo Intervenção)
  cat("UPSIT: Comparação Pré vs 1 mês (Intervenção)\n")
  upsit_pre_1mes <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(UPSIT1) & !is.na(UPSIT2))
  
  if(nrow(upsit_pre_1mes) > 5) {
    print(t.test(upsit_pre_1mes$UPSIT1, upsit_pre_1mes$UPSIT2, paired = TRUE))
  } else {
    cat("Dados insuficientes (N <", nrow(upsit_pre_1mes), ")\n")
  }
  
  # Multiscent: Pré vs 1 mês (grupo Intervenção)
  cat("\nMultiscent: Comparação Pré vs 1 mês (Intervenção)\n")
  multi_pre_1mes <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Multicent1_Total) & !is.na(Multicent2_Total))
  
  if(nrow(multi_pre_1mes) > 5) {
    print(t.test(multi_pre_1mes$Multicent1_Total, multi_pre_1mes$Multicent2_Total, paired = TRUE))
  } else {
    cat("Dados insuficientes (N <", nrow(multi_pre_1mes), ")\n")
  }
  
  # Testar também componentes do OPF
  cat("\nPleasantness: Comparação Pré vs 1 mês (Intervenção)\n")
  pleasant_pre_1mes <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Pleasantness1) & !is.na(Pleasantness2))
  
  if(nrow(pleasant_pre_1mes) > 5) {
    print(t.test(pleasant_pre_1mes$Pleasantness1, pleasant_pre_1mes$Pleasantness2, paired = TRUE))
  } else {
    cat("Dados insuficientes (N <", nrow(pleasant_pre_1mes), ")\n")
  }
}

Verificação da Hipótese Principal

Para verificar sua hipótese principal, é melhor fazer os testes t pareados individuais primeiro e depois compilar os resultados:

# Executar e armazenar resultados dos testes pareados
executar_testes_pareados <- function() {
  # Estrutura para armazenar resultados
  resultados <- list()
  
  # UPSIT (Intervenção)
  upsit_int <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(UPSIT1) & !is.na(UPSIT2))
  
  if(nrow(upsit_int) > 5) {
    resultados$t_upsit_pre_1mes <- t.test(upsit_int$UPSIT1, upsit_int$UPSIT2, paired = TRUE)
  }
  
  # Multiscent (Intervenção)
  multi_int <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Multicent1_Total) & !is.na(Multicent2_Total))
  
  if(nrow(multi_int) > 5) {
    resultados$t_multi_int_pre_1mes <- t.test(multi_int$Multicent1_Total, multi_int$Multicent2_Total, paired = TRUE)
  }
  
  # OPF componentes (Intervenção)
  pleasant_int <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Pleasantness1) & !is.na(Pleasantness2))
  
  if(nrow(pleasant_int) > 5) {
    resultados$t_pleasant_int_pre_1mes <- t.test(pleasant_int$Pleasantness1, pleasant_int$Pleasantness2, paired = TRUE)
  }
  
  # Repita para outros componentes do OPF
  
  # Retornar todos os resultados
  return(resultados)
}

# Verificar hipótese principal usando os resultados dos testes
verificar_hipotese <- function() {
  # Executar testes
  resultados <- executar_testes_pareados()
  
  # Verificar se temos resultados para todos os testes necessários
  if(!is.null(resultados$t_upsit_pre_1mes) && 
     !is.null(resultados$t_multi_int_pre_1mes) && 
     !is.null(resultados$t_pleasant_int_pre_1mes)) {
    
    # Criar tabela de resultados
    hipotese_df <- data.frame(
      Medida = c("UPSIT", "Multiscent", "OPF-Pleasant"),
      p_valor = c(
        resultados$t_upsit_pre_1mes$p.value,
        resultados$t_multi_int_pre_1mes$p.value,
        resultados$t_pleasant_int_pre_1mes$p.value
      ),
      Significativo = c(
        resultados$t_upsit_pre_1mes$p.value < 0.05,
        resultados$t_multi_int_pre_1mes$p.value < 0.05,
        resultados$t_pleasant_int_pre_1mes$p.value < 0.05
      )
    )
    
    print(hipotese_df)
  } else {
    cat("Dados insuficientes para verificar a hipótese principal.")
  }
}
# Função para criar tabelas de resultados
tabela_resultados <- function() {
  # Calcular tamanho do efeito (d de Cohen para medidas pareadas)
  calcular_d_cohen <- function(t_value, n) {
    return(t_value / sqrt(n))
  }
  
  # Criar dataframe para armazenar resultados
  resultados <- data.frame(
    Medida = character(),
    N = numeric(),
    Media_Pre = numeric(),
    DP_Pre = numeric(),
    Media_1mes = numeric(),
    DP_1mes = numeric(),
    Diferenca = numeric(),
    t_valor = numeric(),
    p_valor = numeric(),
    d_Cohen = numeric(),
    Significativo = character(),
    stringsAsFactors = FALSE
  )
  
  # ----- TESTE 1: UPSIT (Intervenção) -----
  df_upsit <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(UPSIT1) & !is.na(UPSIT2))
  
  if(nrow(df_upsit) >= 5) {
    t_upsit <- t.test(df_upsit$UPSIT1, df_upsit$UPSIT2, paired = TRUE)
    
    resultados <- rbind(resultados, data.frame(
      Medida = "UPSIT",
      N = nrow(df_upsit),
      Media_Pre = mean(df_upsit$UPSIT1, na.rm = TRUE),
      DP_Pre = sd(df_upsit$UPSIT1, na.rm = TRUE),
      Media_1mes = mean(df_upsit$UPSIT2, na.rm = TRUE),
      DP_1mes = sd(df_upsit$UPSIT2, na.rm = TRUE),
      Diferenca = mean(df_upsit$UPSIT2 - df_upsit$UPSIT1, na.rm = TRUE),
      t_valor = t_upsit$statistic,
      p_valor = t_upsit$p.value,
      d_Cohen = calcular_d_cohen(t_upsit$statistic, nrow(df_upsit)),
      Significativo = ifelse(t_upsit$p.value < 0.05, "Sim", "Não")
    ))
  }
  
  # ----- TESTE 2: Multiscent (Intervenção) -----
  df_multi <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Multicent1_Total) & !is.na(Multicent2_Total))
  
  if(nrow(df_multi) >= 5) {
    t_multi <- t.test(df_multi$Multicent1_Total, df_multi$Multicent2_Total, paired = TRUE)
    
    resultados <- rbind(resultados, data.frame(
      Medida = "Multiscent",
      N = nrow(df_multi),
      Media_Pre = mean(df_multi$Multicent1_Total, na.rm = TRUE),
      DP_Pre = sd(df_multi$Multicent1_Total, na.rm = TRUE),
      Media_1mes = mean(df_multi$Multicent2_Total, na.rm = TRUE),
      DP_1mes = sd(df_multi$Multicent2_Total, na.rm = TRUE),
      Diferenca = mean(df_multi$Multicent2_Total - df_multi$Multicent1_Total, na.rm = TRUE),
      t_valor = t_multi$statistic,
      p_valor = t_multi$p.value,
      d_Cohen = calcular_d_cohen(t_multi$statistic, nrow(df_multi)),
      Significativo = ifelse(t_multi$p.value < 0.05, "Sim", "Não")
    ))
  }
  
  # ----- TESTES 3-7: OPF Componentes (Intervenção) -----
  # Pleasantness
  df_pleasant <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Pleasantness1) & !is.na(Pleasantness2))
  
  if(nrow(df_pleasant) >= 5) {
    t_pleasant <- t.test(df_pleasant$Pleasantness1, df_pleasant$Pleasantness2, paired = TRUE)
    
    resultados <- rbind(resultados, data.frame(
      Medida = "OPF-Pleasantness",
      N = nrow(df_pleasant),
      Media_Pre = mean(df_pleasant$Pleasantness1, na.rm = TRUE),
      DP_Pre = sd(df_pleasant$Pleasantness1, na.rm = TRUE),
      Media_1mes = mean(df_pleasant$Pleasantness2, na.rm = TRUE),
      DP_1mes = sd(df_pleasant$Pleasantness2, na.rm = TRUE),
      Diferenca = mean(df_pleasant$Pleasantness2 - df_pleasant$Pleasantness1, na.rm = TRUE),
      t_valor = t_pleasant$statistic,
      p_valor = t_pleasant$p.value,
      d_Cohen = calcular_d_cohen(t_pleasant$statistic, nrow(df_pleasant)),
      Significativo = ifelse(t_pleasant$p.value < 0.05, "Sim", "Não")
    ))
  }
  
  # Intensity
  df_intensity <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Intensity1) & !is.na(Intensity2))
  
  if(nrow(df_intensity) >= 5) {
    t_intensity <- t.test(df_intensity$Intensity1, df_intensity$Intensity2, paired = TRUE)
    
    resultados <- rbind(resultados, data.frame(
      Medida = "OPF-Intensity",
      N = nrow(df_intensity),
      Media_Pre = mean(df_intensity$Intensity1, na.rm = TRUE),
      DP_Pre = sd(df_intensity$Intensity1, na.rm = TRUE),
      Media_1mes = mean(df_intensity$Intensity2, na.rm = TRUE),
      DP_1mes = sd(df_intensity$Intensity2, na.rm = TRUE),
      Diferenca = mean(df_intensity$Intensity2 - df_intensity$Intensity1, na.rm = TRUE),
      t_valor = t_intensity$statistic,
      p_valor = t_intensity$p.value,
      d_Cohen = calcular_d_cohen(t_intensity$statistic, nrow(df_intensity)),
      Significativo = ifelse(t_intensity$p.value < 0.05, "Sim", "Não")
    ))
  }
  
  # Familiarity
  df_familiar <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Familiarity1) & !is.na(Familiarity2))
  
  if(nrow(df_familiar) >= 5) {
    t_familiar <- t.test(df_familiar$Familiarity1, df_familiar$Familiarity2, paired = TRUE)
    
    resultados <- rbind(resultados, data.frame(
      Medida = "OPF-Familiarity",
      N = nrow(df_familiar),
      Media_Pre = mean(df_familiar$Familiarity1, na.rm = TRUE),
      DP_Pre = sd(df_familiar$Familiarity1, na.rm = TRUE),
      Media_1mes = mean(df_familiar$Familiarity2, na.rm = TRUE),
      DP_1mes = sd(df_familiar$Familiarity2, na.rm = TRUE),
      Diferenca = mean(df_familiar$Familiarity2 - df_familiar$Familiarity1, na.rm = TRUE),
      t_valor = t_familiar$statistic,
      p_valor = t_familiar$p.value,
      d_Cohen = calcular_d_cohen(t_familiar$statistic, nrow(df_familiar)),
      Significativo = ifelse(t_familiar$p.value < 0.05, "Sim", "Não")
    ))
  }
  
  # Edibility
  df_edible <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Edibility1) & !is.na(Edibility2))
  
  if(nrow(df_edible) >= 5) {
    t_edible <- t.test(df_edible$Edibility1, df_edible$Edibility2, paired = TRUE)
    
    resultados <- rbind(resultados, data.frame(
      Medida = "OPF-Edibility",
      N = nrow(df_edible),
      Media_Pre = mean(df_edible$Edibility1, na.rm = TRUE),
      DP_Pre = sd(df_edible$Edibility1, na.rm = TRUE),
      Media_1mes = mean(df_edible$Edibility2, na.rm = TRUE),
      DP_1mes = sd(df_edible$Edibility2, na.rm = TRUE),
      Diferenca = mean(df_edible$Edibility2 - df_edible$Edibility1, na.rm = TRUE),
      t_valor = t_edible$statistic,
      p_valor = t_edible$p.value,
      d_Cohen = calcular_d_cohen(t_edible$statistic, nrow(df_edible)),
      Significativo = ifelse(t_edible$p.value < 0.05, "Sim", "Não")
    ))
  }
  
  # Irritating
  df_irritating <- data %>%
    filter(Group == "Intervention") %>%
    filter(!is.na(Irritating1) & !is.na(Irritating2))
  
  if(nrow(df_irritating) >= 5) {
    t_irritating <- t.test(df_irritating$Irritating1, df_irritating$Irritating2, paired = TRUE)
    
    resultados <- rbind(resultados, data.frame(
      Medida = "OPF-Irritating",
      N = nrow(df_irritating),
      Media_Pre = mean(df_irritating$Irritating1, na.rm = TRUE),
      DP_Pre = sd(df_irritating$Irritating1, na.rm = TRUE),
      Media_1mes = mean(df_irritating$Irritating2, na.rm = TRUE),
      DP_1mes = sd(df_irritating$Irritating2, na.rm = TRUE),
      Diferenca = mean(df_irritating$Irritating2 - df_irritating$Irritating1, na.rm = TRUE),
      t_valor = t_irritating$statistic,
      p_valor = t_irritating$p.value,
      d_Cohen = calcular_d_cohen(t_irritating$statistic, nrow(df_irritating)),
      Significativo = ifelse(t_irritating$p.value < 0.05, "Sim", "Não")
    ))
  }
  
  # Formatar tabela para exibição
  resultados_formatados <- resultados %>%
    mutate(
      Media_Pre = round(Media_Pre, 2),
      DP_Pre = round(DP_Pre, 2),
      Media_1mes = round(Media_1mes, 2),
      DP_1mes = round(DP_1mes, 2),
      Diferenca = round(Diferenca, 2),
      t_valor = round(t_valor, 2),
      p_valor = round(p_valor, 3),
      d_Cohen = round(d_Cohen, 2)
    )
  
  # Melhorar apresentação de p-valores muito pequenos
  resultados_formatados$p_valor[resultados_formatados$p_valor < 0.001] <- "<0.001"
  
  # Separar em duas tabelas: testes tradicionais e OPF
  tradicionais <- resultados_formatados %>%
    filter(Medida %in% c("UPSIT", "Multiscent"))
  
  opf <- resultados_formatados %>%
    filter(grepl("OPF", Medida))
  
  # Imprimir as tabelas
  cat("\n=====================================================================\n")
  cat("TABELA 1: RESULTADOS DOS TESTES OLFATIVOS TRADICIONAIS (INTERVENÇÃO)\n")
  cat("=====================================================================\n\n")
  
  print(tradicionais, row.names = FALSE)
  
  cat("\n=====================================================================\n")
  cat("TABELA 2: RESULTADOS DO OPF - OLFACTORY PERCEPTUAL FINGERPRINT (INTERVENÇÃO)\n")
  cat("=====================================================================\n\n")
  
  print(opf, row.names = FALSE)
  
  # Resumo da hipótese
  cat("\n=====================================================================\n")
  cat("RESUMO DA HIPÓTESE PRINCIPAL\n")
  cat("=====================================================================\n\n")
  
  # Contar quantos testes OPF foram significativos
  n_opf_sig <- sum(opf$Significativo == "Sim")
  tradicionais_sig <- sum(tradicionais$Significativo == "Sim")
  
  hipotese_df <- data.frame(
    "Tipo_de_Teste" = c("Testes Tradicionais", "OPF"),
    "Total_Testes" = c(nrow(tradicionais), nrow(opf)),
    "Testes_Significativos" = c(tradicionais_sig, n_opf_sig),
    "Porcentagem" = c(
      round(tradicionais_sig/nrow(tradicionais)*100, 1),
      round(n_opf_sig/nrow(opf)*100, 1)
    ),
    "Conclusão" = c(
      ifelse(tradicionais_sig > 0, "Mudança detectada", "Sem mudança detectada"),
      ifelse(n_opf_sig >= 3, "Mudança robusta detectada", 
             ifelse(n_opf_sig > 0, "Alguma mudança detectada", "Sem mudança detectada"))
    )
  )
  
  print(hipotese_df, row.names = FALSE)
  
  # Retornar resultados invisíveis para possível uso posterior
  invisible(list(
    tradicionais = tradicionais,
    opf = opf,
    resumo_hipotese = hipotese_df
  ))
}

# Para ver os resultados, basta executar:
tabela_resultados()
## 
## =====================================================================
## TABELA 1: RESULTADOS DOS TESTES OLFATIVOS TRADICIONAIS (INTERVENÇÃO)
## =====================================================================
## 
##      Medida  N Media_Pre DP_Pre Media_1mes DP_1mes Diferenca t_valor p_valor
##       UPSIT 46     31.09   4.16      30.91    3.55     -0.17    0.34   0.739
##  Multiscent 37     15.32   2.67      15.41    2.18      0.08   -0.20   0.843
##  d_Cohen Significativo
##     0.05           Não
##    -0.03           Não
## 
## =====================================================================
## TABELA 2: RESULTADOS DO OPF - OLFACTORY PERCEPTUAL FINGERPRINT (INTERVENÇÃO)
## =====================================================================
## 
##            Medida  N Media_Pre DP_Pre Media_1mes DP_1mes Diferenca t_valor
##  OPF-Pleasantness 44      0.19  14.51          0   14.89     -0.19    0.09
##     OPF-Intensity 44      0.39  17.24          0   14.63     -0.39    0.17
##   OPF-Familiarity 44      0.02  17.90          0   13.82     -0.02    0.01
##     OPF-Edibility 44     -1.06  15.15          0   12.53      1.06   -0.42
##    OPF-Irritating 44      0.50  19.87          0   18.90     -0.50    0.18
##  p_valor d_Cohen Significativo
##    0.932    0.01           Não
##    0.862    0.03           Não
##    0.995    0.00           Não
##    0.679   -0.06           Não
##    0.858    0.03           Não
## 
## =====================================================================
## RESUMO DA HIPÓTESE PRINCIPAL
## =====================================================================
## 
##        Tipo_de_Teste Total_Testes Testes_Significativos Porcentagem
##  Testes Tradicionais            2                     0           0
##                  OPF            5                     0           0
##              Conclusão
##  Sem mudança detectada
##  Sem mudança detectada