Modelos de efeitos aleatórios

Autor

Caio & Manoel

Data de Publicação

7 de novembro de 2024

1 Bibliotecas e letura dos dados

# libraries
library(tidyverse)

set.seed(1234)

df_raw <- read_csv("../data/raw/Banco 07 11 V3.csv")

# df_raw |> glimpse()

# date adjust
df <- df_raw |>
  mutate(DT_NASC_GERAL = dmy(DT_NASC_GERAL),
         Data1ano = dmy(Data1ano),
         DT_SIN_PRI = dmy(DT_SIN_PRI),
         DT_FIM2 = dmy(DT_FIM2),
         )

# df |> glimpse()


# renomear categorias das variáveis
df <- df %>%
  mutate(SEXO2 = case_when(SEXO2 == 0 ~ "Fem",
                                  SEXO2 == 1 ~ "Masc"),

         Raca3 = case_when(Raca3 == 1 ~ "Branca",
                            Raca3 == 2 ~ "Negra",
                            Raca3 == 3 ~ "Amarela",
                            Raca3 == 4 ~ "Parda",
                            Raca3 == 5 ~ "Indígena",
                            Raca3 == 9 ~ "Ignorado"),

        GidadeMae = case_when(GidadeMae == 1 ~ "11-19",
                               GidadeMae == 2 ~ "20-34",
                               GidadeMae == 3 ~ "35+"),
                               
        Gescola3 = case_when(Gescola3 == 1 ~ "0-7",
                              Gescola3 == 2 ~ "8-11",
                              Gescola3 == 3 ~ "12+",
                              Gescola3 == 4 ~ "Ignorado"),
                              
        Gpeso = case_when(Gpeso == 0 ~ "2500+",
                           Gpeso == 1 ~ "<2500"),

        Gtermo = case_when(Gtermo == 0 ~ "37+",
                            Gtermo == 1 ~ "19-31",
                            Gtermo == 2 ~ "23-36"),
        
        Irmao = case_when(Irmao == 0 ~ "Não",
                           Irmao == 1 ~ "Sim",
                           Irmao == 9 ~ "Ignorado"),
        
        PARTO = case_when(PARTO == 1 ~ "Vaginal",
                           PARTO == 2 ~ "Cesáreo",
                           PARTO == 9 ~ "Ignorado"),
        
        Trimestre = case_when(Trimestre == 1 ~ "Jan-Mar",
                              Trimestre == 2 ~ "Abr-Jun",
                              Trimestre == 3 ~ "Jul-Set",
                              Trimestre == 4 ~ "Out-Dez")) %>%
    select(rsv1, SEXO2, Raca3, GidadeMae, Gescola3, Gpeso, Gtermo, Irmao, PARTO, Trimestre)

# filtrar excluindo 'ignorado'
df <- df |> 
  filter(Raca3 != "Ignorado",
         Gescola3 != "Ignorado",
         Irmao != "Ignorado",
         PARTO != "Ignorado")

# df |> glimpse()

2 Pergunta de pesquisa

Os fatores acossiados sofrem influencia da sazonalidade?

3 Modelos

Iremos rodar alguns modelos da classe Binomial Negativo com a exponeciação dos coeficientes para que o output seja um IRR (Incidence Rate Ratio), para uma melhor interpretação dos resultados.

3.1 Variáveis

Variável desfecho: rsv1 - casos que ocorreram dureante 1 ano

Variável de efeito aleatório: Trimestre - trimestre de nascimento

obs. Temporada de virus sincissial é entre março a julho

Variáveis de efeito fixo:
- SEXO2 - sexo biológico - Raca3 - raça - GidadeMae2 - idade da mãe - Gescola3 - grau de escolaridade da mãe - Gpeso - peso ao nascer - Gtermo2 - pre-termo extremo, pre-termo, termo normal, pós-termo - Irmao - se tem irmão - PARTO - tipo de parto

library(lme4)
library(lmerTest)
library(MASS)
library(glmmTMB)
library(parameters)
library(performance)
library(gtsummary)

3.2 Modelo 1

Modelo de efeitos fixos, sem considerar a sazonalidade.

# modelo binomial negativo - MASS
modelo1_nb <- glm.nb(rsv1 ~ SEXO2 + Raca3 + GidadeMae + Gescola3 + Gpeso + Gtermo + Irmao + PARTO,
                 data = df)

parameters(modelo1_nb, ci_method="wald", exp = TRUE)
model_performance(modelo1_nb)

Testando interações

  • Sexo e Peso ao Nascer (SEXO2 * Gpeso): O efeito do peso ao nascer pode variar dependendo do sexo do bebê. Por exemplo, peso baixo pode impactar diferentemente meninos e meninas.
modelo1a_nb <- glm.nb(rsv1 ~ SEXO2 * Gpeso + Raca3 + GidadeMae + Gescola3 + Gtermo + Irmao + PARTO,
                 data = df)

parameters(modelo1a_nb, ci_method="wald", exp = TRUE)
  • Idade Materna e Escolaridade (GidadeMae * Gescola3): O impacto da idade da mãe pode ser influenciado pelo nível de escolaridade, já que escolaridade pode afetar o acesso e cuidados pré-natais.
modelo1b_nb <- glm.nb(rsv1 ~ GidadeMae * Gescola3 + SEXO2 + Raca3 + Gpeso + Gtermo + Irmao + PARTO,
                 data = df)

parameters(modelo1b_nb, ci_method="wald", exp = TRUE)
  • Peso ao Nascer e Termo de Gestação (Gpeso * Gtermo): Bebês nascidos a termo e prematuros podem ter diferentes desfechos dependendo do peso ao nascer, então essa interação pode capturar a interação entre maturidade e peso.
modelo1c_nb <- glm.nb(rsv1 ~ Gpeso * Gtermo + SEXO2 + Raca3 + GidadeMae + Gescola3 + Irmao + PARTO,
                 data = df)

parameters(modelo1c_nb, ci_method="wald", exp = TRUE)
  • Raça e Escolaridade (Raca3 * Gescola3): Em alguns contextos, o impacto da escolaridade no desfecho pode variar entre diferentes grupos raciais.
modelo1d_nb <- glm.nb(rsv1 ~ Raca3 * Gescola3 + SEXO2 + GidadeMae + Gpeso + Gtermo + Irmao + PARTO,
                 data = df)

parameters(modelo1d_nb, ci_method="wald", exp = TRUE)

Conclusão sobre as interações

Nenhuma das interações foi significativa.

3.3 Modelo 2

Modelo de efeitos fixos, considerando a sazonalidade como dummy.

modelo2_nb <- glm.nb(rsv1 ~ SEXO2 + Raca3 + GidadeMae + Gescola3 + Gpeso + Gtermo + Irmao + PARTO + Trimestre,
                 data = df)

parameters(modelo2_nb, ci_method="wald", exp = TRUE)
model_performance(modelo2_nb)

A razão de incidência (IRR) de 1.31 indica que a taxa de incidência do desfecho é 31% maior no trimestre de Janeiro a Março em comparação com o trimestre de referência (Abr-Jun). Esse efeito é estatisticamente significativo (p = 0.002), sugerindo que há um aumento no desfecho durante o início do ano.

3.4 Modelo 3

Modelo binomial negativo nulo com efeitos aleatórios para o trimestre.

df_modelo3 <- df |> 
  mutate(Trimestre = case_when(Trimestre == "Jan-Mar" ~ 1,
                              Trimestre == "Abr-Jun" ~ 2,
                              Trimestre == "Jul-Set" ~ 3,
                              Trimestre == "Out-Dez" ~ 4))


modelo3_nb <- glmmTMB(rsv1 ~ 1 + (1 | Trimestre),
                      family = nbinom1,
                      data = df_modelo3)

parameters(modelo3_nb, ci_method="wald", exp = TRUE)
icc(modelo3_nb)

3.5 Modelo 4

Modelo binomial negativo com efeitos fixos e aleatórios para o trimestre.

modelo4_nb <- glmmTMB(rsv1 ~ SEXO2 + Raca3 + GidadeMae + Gescola3 + Gpeso + Gtermo + Irmao + PARTO + (1 | Trimestre),
                      family = nbinom1,
                      data = df_modelo3)

parameters(modelo4_nb, ci_method="wald", exp = TRUE)
icc(modelo4_nb)
model_performance(modelo4_nb)

Efeitos Fixos

  1. Variáveis Significativas:
    • SEXO2 [Masc]: A IRR de 1.35 indica que a taxa de incidência do desfecho é 35% maior para o sexo masculino em comparação com o feminino, sendo estatisticamente significativa (p < 0.001).
    • Gescola3 [12+]: A IRR de 2.79 sugere que a taxa de incidência é 179% maior para mães com 12+ anos de escolaridade em comparação com o grupo de referência (0-7 anos), também com significância (p < 0.001).
    • Gpeso [2500+]: A IRR de 0.69 mostra que a taxa de incidência é 31% menor para bebês com peso de 2500g ou mais, o que é estatisticamente significativo (p = 0.001).
    • Irmao [Sim]: A IRR de 1.79 indica que a taxa de incidência é 79% maior para aqueles que têm irmãos, com significância (p < 0.001).
  2. Variáveis Não Significativas:
    • Raça (Raca3): Nenhuma das categorias de raça (Branca, Indígena, Negra, Parda) é significativa, sugerindo que não há uma associação clara entre raça e o desfecho no modelo ajustado.
    • GidadeMae (Idade da Mãe): Nenhuma das categorias de idade é estatisticamente significativa, sugerindo que a idade materna não influencia significativamente o desfecho.
    • Gtermo (Semanas de Gestação): A categoria 37+ semanas está quase no limite da significância (p = 0.064), indicando uma possível associação protetora, mas não é conclusiva.

Efeito Aleatório

  1. Desvio Padrão do Intercepto para Trimestre (SD: 0.11): Esse desvio padrão representa a variação entre os trimestres na taxa de incidência do desfecho. Como o valor é relativamente pequeno, a variabilidade sazonal entre trimestres é limitada. Esse valor está em linha com o modelo nulo, indicando uma leve influência da sazonalidade, mas não muito expressiva.

  2. Intraclass Correlation Coefficient (ICC):

    • O ICC ajustado de 0.001 indica que apenas 0.1% da variância total no desfecho é atribuível à variabilidade entre os trimestres. Esse valor é muito baixo, sugerindo que a sazonalidade (Trimestre) não explica de forma significativa a variabilidade do desfecho quando outros fatores estão no modelo.

Conclusão

  • Sazonalidade (Trimestre): Com um ICC de 0.001 e uma baixa variância do efeito aleatório, a sazonalidade tem um efeito muito pequeno na variação do desfecho, especialmente após ajustar para outros fatores significativos. Esse resultado indica que a variabilidade sazonal entre trimestres é mínima.
  • Interpretação Geral: A inclusão de Trimestre como efeito aleatório ajuda a capturar uma pequena variação sazonal, mas não adiciona uma explicação significativa ao modelo. Os efeitos fixos, especialmente Sexo, Escolaridade e Peso ao Nascer, são os principais fatores associados ao desfecho.

Esse modelo sugere que, embora a sazonalidade tenha uma influência mínima, outros fatores demográficos e socioeconômicos desempenham um papel mais relevante na explicação do desfecho.

3.6 Comparação entre modelos

compare_performance(modelo1_nb, modelo2_nb, modelo4_nb)
test_performance(modelo1_nb, modelo2_nb, modelo4_nb)
  1. AIC e AICc:
    • modelo2_nb tem o menor valor de AIC (15162.1) e, consequentemente, a maior weight (0.927), indicando que ele é o modelo mais bem ajustado entre os três.
    • modelo4_nb apresenta o segundo melhor AIC (15167.3) com uma weight de 0.067. Esse modelo inclui o efeito aleatório para Trimestre, mas a melhora no ajuste é mínima em comparação com modelo2_nb.
    • modelo1_nb tem o AIC mais alto (15171.9) e, portanto, o pior ajuste entre os modelos.
  2. BIC:
    • O BIC penaliza modelos mais complexos, e o modelo1_nb possui o menor BIC, indicando que ele é o modelo preferido quando se leva em conta a penalização por complexidade.
    • Como modelo4_nb tem um BIC mais alto, isso indica que a inclusão do efeito aleatório para Trimestre torna o modelo mais complexo, sem grande benefício em termos de ajuste.
  3. Nagelkerke’s R² e R² Condicional e Marginal:
    • modelo4_nb tem o maior R² condicional e marginal (0.035), que reflete a variância explicada tanto pelos efeitos fixos quanto pelo efeito aleatório de Trimestre. Isso sugere que a inclusão do efeito aleatório para Trimestre no modelo4_nb adiciona uma pequena quantidade de variância explicada ao modelo.
    • Os modelos modelo1_nb e modelo2_nb não possuem R² condicional ou marginal apresentados, pois não incluem efeitos aleatórios.
  4. Comparação de Bayes Factor (BF):
    • O Bayes Factor (BF) mostra a comparação com o modelo1_nb como referência:
      • modelo2_nb tem um BF próximo de zero em comparação com o modelo1_nb, indicando que modelo2_nb é fortemente preferido ao modelo1_nb.
      • modelo4_nb tem um BF de 0.025 em comparação ao modelo1_nb, o que indica uma preferência menor por modelo4_nb.

Conclusão e Recomendação

  • modelo2_nb é o modelo preferido com base no AIC e nos Bayes Factors, indicando que ele é o mais ajustado entre os três.
  • modelo4_nb, que inclui o efeito aleatório para Trimestre, explica ligeiramente mais variância (como indicado pelo R² condicional), mas esse ganho em variância explicada é pequeno e não compensa a complexidade adicional, conforme indicado pelo BIC e pelo Bayes Factor.
  • Recomendação: O modelo2_nb é a melhor escolha em termos de equilíbrio entre ajuste e simplicidade, especialmente se o efeito aleatório de Trimestre (presente no modelo4_nb) não for essencial para responder à pergunta de pesquisa.