# 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
# 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
# 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
1. Interpretação dos Modelos (Marginal vs. Condicional)
2. Comparação entre Grupos (Interação Tempo x Grupo)
Grupo 1 (Biopump) vs Grupo 0 (Rolete): Ambos os modelos detectaram que o uso de Biopump reduz significativamente a velocidade da resposta inflamatória (interação significativa e negativa).
Grupo 2 (Válvula) vs Grupo 0 (Rolete): Aqui reside a principal diferença. O GEE não detectou diferença estatística (p > 0.05). Porém, o LMM, por ser mais sensível e controlar a heterogeneidade individual, detectou que o grupo Válvula TAMBÉM apresenta um crescimento inflamatório menor que o grupo Rolete (p < 0.05).
3. Conclusão
A análise revelou que controlar a heterogeneidade biológica foi o fator decisivo. O modelo GEE foca na média da população e, por isso, não conseguiu lidar bem com a alta variabilidade inicial dos pacientes, o que acabou mascarando efeitos sutis. Já o Modelo Misto (LMM) ajustou a análise para cada indivíduo, removendo o ruído entre os sujeitos e aumentando a sensibilidade do teste.
Essa diferença técnica alterou a conclusão clínica. Enquanto ambos os modelos confirmaram que o Biopump reduz a inflamação comparado ao Rolete, apenas o Modelo Misto conseguiu detectar a eficácia da cirurgia de Válvula. O GEE indicou que a Válvula não tinha efeito significativo (\(p=0.18\)), mas o LMM corrigiu isso e mostrou que ela reduz, sim, a inflamação (\(p=0.03\)).
Conclui-se, portanto, que tanto o Biopump quanto a Válvula geram uma resposta inflamatória menos agressiva que o Rolete. O estudo prova que o uso de Modelos Mistos foi essencial para evitar um ‘falso negativo’: sem ele, teríamos ignorado injustamente os benefícios estatísticos da cirurgia de Válvula.