1. Leitura & limpeza dos dados

# Ler o arquivo de dados
dados <- read.table("RevivarReduzido.txt", header = TRUE, stringsAsFactors = FALSE)

# CORREÇÃO DE ERRO
# "Na sexta linha, n56hpo deveria ser 1630 ao invés de 1130"
dados[6, "n56hpo"] <- 1630 

# Criar ID único para cada paciente, necessário para análise longitudinal
dados$id_paciente <- 1:nrow(dados)

# SELEÇÃO DE VARIÁVEIS [cite: 11, 19, 33, 40]
# Resposta: t (t1 a t6)
# Covariáveis: grupo, sexo, idade, imc (ao invés de peso/altura), nyha, euroes
# Tempos: n1anest a n624hpo
cols_interesse <- c("id_paciente", "grupo", "sexo", "idade", "imc", "nyha", "euroes", 
                    "n1anest", "n2despin", "n3final", "n42hpo", "n56hpo", "n624hpo",
                    "t1", "t2", "t3", "t4", "t5", "t6")

df <- dados[, cols_interesse]

# Renomear colunas para facilitar a transformação (Wide -> Long)
names(df)[8:13]  <- paste0("tempo_raw_", 1:6) # n1..n6
names(df)[14:19] <- paste0("resp_", 1:6)      # t1..t6

2. Transformação e tratamento do tempo

# Pivotar para formato longo (uma linha por medição)
df_long <- df %>%
  pivot_longer(
    cols = starts_with("tempo_raw_") | starts_with("resp_"),
    names_to = c(".value", "momento"),
    names_pattern = "(.*)_(\\d)"
  )

# Função auxiliar: Converter HHMM para Horas Decimais
hhmm_to_hours <- function(x) {
  horas <- floor(x / 100)
  minutos <- x %% 100
  return(horas + (minutos / 60))
}

df_long <- df_long %>%
  mutate(
    hora_decimal = hhmm_to_hours(tempo_raw),
    # Converter variáveis categóricas em Fatores [cite: 35, 36, 37]
    grupo = factor(grupo, levels = c(0, 1, 2), labels = c("Rolete", "Biopump", "Válvula")),
    sexo = factor(sexo),
    nyha = factor(nyha)
  )

# Calcular o Tempo Decorrido (Delta T)
# Lógica: Tempo atual - Tempo basal. Se der negativo (virou o dia), soma 24h.
df_long <- df_long %>%
  group_by(id_paciente) %>%
  mutate(
    hora_basal = hora_decimal[momento == 1],
    tempo_decorrido = hora_decimal - hora_basal,
    tempo_decorrido = ifelse(tempo_decorrido < 0, tempo_decorrido + 24, tempo_decorrido)
  ) %>%
  ungroup() %>%
  filter(!is.na(resp)) # Remove NAs na resposta, se houver

3. Ajuste dos modelos

# A. Modelo Marginal (GEE)
# Interpretação: Efeito na MÉDIA da POPULAÇÃO.
# Correlação: AR1 (Auto-regressiva), pois medidas próximas no tempo são mais correlacionadas.
# Covariáveis incluídas: sexo e nyha (históricas importantes) 
modelo_gee <- geeglm(resp ~ tempo_decorrido * grupo + idade + imc + euroes + sexo + nyha,
                     id = id_paciente,
                     data = df_long,
                     family = gaussian,
                     corstr = "ar1")

print(summary(modelo_gee))
## 
## Call:
## geeglm(formula = resp ~ tempo_decorrido * grupo + idade + imc + 
##     euroes + sexo + nyha, family = gaussian, data = df_long, 
##     id = id_paciente, corstr = "ar1")
## 
##  Coefficients:
##                              Estimate  Std.err   Wald Pr(>|W|)    
## (Intercept)                  1004.912  896.027  1.258   0.2621    
## tempo_decorrido                86.178   15.900 29.375 5.96e-08 ***
## grupoBiopump                 -231.328  189.905  1.484   0.2232    
## grupoVálvula                  171.073  283.449  0.364   0.5461    
## idade                          11.779    8.621  1.867   0.1719    
## imc                           -11.144   25.856  0.186   0.6665    
## euroes                          7.141   74.429  0.009   0.9236    
## sexo2                        -171.608  218.402  0.617   0.4320    
## nyha2                         188.534  222.320  0.719   0.3964    
## nyha3                           2.786  233.933  0.000   0.9905    
## nyha4                        -105.604  267.157  0.156   0.6926    
## tempo_decorrido:grupoBiopump  -48.702   19.123  6.486   0.0109 *  
## tempo_decorrido:grupoVálvula  -29.720   22.458  1.751   0.1857    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation structure = ar1 
## Estimated Scale Parameters:
## 
##             Estimate Std.err
## (Intercept)   686864   64824
##   Link = identity 
## 
## Estimated Correlation Parameters:
##       Estimate Std.err
## alpha   0.6669  0.0518
## Number of clusters:   62  Maximum cluster size: 6
# B. Modelo Misto (LMM)
# Interpretação: Efeito no INDIVÍDUO (Condicional).
# Efeito Aleatório: Intercepto por paciente (1 | id_paciente) para controlar a variabilidade basal.
modelo_lmm <- lmer(resp ~ tempo_decorrido * grupo + idade + imc + euroes + sexo + nyha + (1 | id_paciente),
                   data = df_long)

print(summary(modelo_lmm))
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: resp ~ tempo_decorrido * grupo + idade + imc + euroes + sexo +  
##     nyha + (1 | id_paciente)
##    Data: df_long
## 
## REML criterion at convergence: 5791
## 
## Scaled residuals: 
##    Min     1Q Median     3Q    Max 
## -2.386 -0.597 -0.113  0.550  3.217 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  id_paciente (Intercept) 371626   610     
##  Residual                358374   599     
## Number of obs: 372, groups:  id_paciente, 62
## 
## Fixed effects:
##                              Estimate Std. Error     df t value Pr(>|t|)    
## (Intercept)                    777.22     865.82  52.31    0.90     0.37    
## tempo_decorrido                148.56      16.56 308.57    8.97  < 2e-16 ***
## grupoBiopump                   -88.65     225.99  65.74   -0.39     0.70    
## grupoVálvula                   330.89     301.66  59.34    1.10     0.28    
## idade                           14.30       9.29  51.97    1.54     0.13    
## imc                            -12.87      24.39  51.99   -0.53     0.60    
## euroes                         -18.52      65.34  51.97   -0.28     0.78    
## sexo2                          -86.08     234.32  52.00   -0.37     0.71    
## nyha2                          200.27     228.88  51.97    0.88     0.39    
## nyha3                           22.57     293.04  51.96    0.08     0.94    
## nyha4                          -80.70     400.32  52.10   -0.20     0.84    
## tempo_decorrido:grupoBiopump   -88.00      20.24 310.34   -4.35  1.9e-05 ***
## tempo_decorrido:grupoVálvula   -50.05      22.97 309.75   -2.18     0.03 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation matrix not shown by default, as p = 13 > 12.
## Use print(summary(modelo_lmm), correlation=TRUE)  or
##     vcov(summary(modelo_lmm))        if you need it

4. Conclusões & Discussão

1. Interpretação dos Modelos (Marginal vs. Condicional)

2. Comparação entre Grupos (Interação Tempo x Grupo)

3. Conclusão