# 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))
}
}
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")
}
}
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