Modelos Lineares Generalizados

Apostila — Regressão de Poisson com Ligação Log: Casos de AIDS na Austrália

Autor

Prof. Dr. Dennison Carvalho - Baseado em Dobson & Barnett (2018)

Data de Publicação

15 de junho de 2026


Sobre anexo. Este documento implementa passo a passo a regressão de Poisson com ligação log aplicada aos dados de casos de AIDS na Austrália (1984–1988), conforme o Exercício 4.1 de Dobson & Barnett (2018). O objetivo é apresentar de forma didática o contexto do problema, a justificativa do modelo, o ajuste via glm(), a interpretação completa da saída e a avaliação da qualidade do ajuste.

Este material foi produzido em Quarto Markdown, com apoio de ferramentas de inteligência artificial na organização e síntese do conteúdo, tendo sido integralmente revisado e validado pelo autor.


1 Contexto do Problema

1.1 Os Dados

Os dados (Tabela 4.5 do livro) registram o número de casos de AIDS diagnosticados na Austrália em cada trimestre entre 1984 e 1988, na fase inicial da epidemia, quando os casos pareciam crescer de forma exponencial.

Variáveis:

  • \(y_i\): número de casos de AIDS no trimestre \(i\)variável resposta (contagem)
  • \(i\): índice do trimestre (\(i = 1, \ldots, 20\)) — variável explicativa
  • \(x_i = \log(i)\): transformação logarítmica do período — covariável usada no modelo

Estamos interessados em verificar se o número de casos de AIDS aumentou ao longo do tempo. Como os dados foram registrados em períodos consecutivos, usamos o período i=1,2,…,20 como variável explicativa para representar a passagem do tempo.

O período é usado como variável explicativa porque ele representa o tempo. Já o logaritmo do período é usado porque o crescimento dos casos parece não ser linear na escala original, mas pode ser aproximadamente linear na escala logarítmica.

# Contagens trimestrais — Tabela 4.5 do livro
y <- c(
    1,   6,  16,  23,   # 1984: T1, T2, T3, T4
   27,  39,  31,  30,   # 1985
   43,  51,  63,  70,   # 1986
   88,  97,  91, 104,   # 1987
  110, 113, 149, 159    # 1988
)

i_seq <- 1:20
x     <- log(i_seq)           # covariavel: log do periodo
ano   <- rep(1984:1988, each = 4)
trim  <- rep(1:4, times = 5)

dados <- data.frame(periodo = i_seq, ano = ano,
                    trimestre = trim, y = y, x = round(x, 4))
**Tabela 4.5** — Casos de AIDS na Australia por trimestre (1984-1988).
Ano T1 T2 T3 T4 Total anual
1984 1984 1 6 16 23 46
1985 1985 27 39 31 30 127
1986 1986 43 51 63 70 227
1987 1987 88 97 91 104 380
1988 1988 110 113 149 159 531
**Estatisticas descritivas** dos casos de AIDS.
Estatistica Valor
N (trimestres) 20.0
Total de casos 1311.0
Minimo 1.0
Maximo 159.0
Media 65.6

2 Por que Usar a Distribuição de Poisson?

A distribuição de Poisson é adequada quando a variável resposta satisfaz três condições:

1. É uma contagem de eventos (inteiro \(\geq 0\))
\(y_i\) = número de casos de AIDS no trimestre \(i\) — por definição um inteiro não-negativo.
2. Os eventos ocorrem de forma independente
Cada diagnóstico não influencia diretamente a ocorrência de outro (na fase inicial da epidemia, sem grandes efeitos de rede).
3. A média e a variância são da mesma ordem de magnitude
A propriedade fundamental da Poisson é \(E(Y_i) = \text{var}(Y_i) = \lambda_i\). Verificamos empiricamente:
**Verificacao empirica** da propriedade media ~ variancia da Poisson.
Ano Media Variancia Variancia / Media
1984 1984 11.50 97.67 8.49
1985 1985 31.75 26.25 0.83
1986 1986 56.75 145.58 2.57
1987 1987 95.00 50.00 0.53
1988 1988 132.75 620.25 4.67
Razao proxima de 1 sustenta o uso da Poisson. Valores maiores indicam possivel superdispersao.

Observacao: As razoes variancia/media variam bastante entre anos (grupos de apenas 4 observacoes). Isso e esperado — com grupos tao pequenos, a estimativa de variancia e instavel. A verificacao formal de superdispersao sera feita apos o ajuste do modelo (Secao 7).


3 Por que Usar a Ligação Log?

O modelo especifica \(g(\lambda_i) = \log(\lambda_i)\). Ha três motivos para esta escolha:

Motivo 1 — Positividade garantida
O numero de casos é sempre positivo: \(\lambda_i > 0\). Com a ligação log, \(\lambda_i = e^{\eta_i} > 0\) qualquer que seja o valor do preditor linear \(\eta_i\). A ligação identidade (\(\lambda_i = b_1 + b_2 x_i\)) poderia gerar valores negativos.
Motivo 2 — Ligacao canonica da Poisson
Do Capítulo 3, o parâmetro natural da Poisson e \(\log(\lambda)\). Usar a ligação canônica simplifica o algoritmo IRLS e garante as melhores propriedades assintóticas dos estimadores.
Motivo 3 — Interpretabilidade multiplicativa
Com a ligação log, os coeficientes tem interpretação multiplicativa — \(e^{b_j}\) e o fator pelo qual a contagem média e multiplicada por unidade de aumento em \(x_j\). Isso é natural para dados com crescimento exponencial.

O modelo proposto pelo livro usa \(x_i = \log(i)\):

\[ \log(\lambda_i) = \beta_1 + \beta_2 \log(i) \quad \Longleftrightarrow \quad \lambda_i = e^{\beta_1} \cdot i^{\beta_2} \]

Este é um modelo de potência: os casos crescem proporcionalmente a \(i\) elevado ao expoente \(\beta_2\).


4 Analise Exploratoria

4.1 Graficos de dispersão

g1 <- ggplot(dados, aes(x = periodo, y = y)) +
  geom_line(color = "blue4", linewidth = 0.9) +
  geom_point(color = "blue4", size = 3) +
  scale_x_continuous(breaks = c(1,5,9,13,17),
    labels = c("1984-T1","1985-T1","1986-T1","1987-T1","1988-T1")) +
  labs(title    = "Serie temporal — escala original",
       subtitle = "Crescimento claramente nao-linear",
       x = "Periodo", y = "Numero de casos (y)") +
  tema


g2 <- ggplot(dados, aes(x = x, y = log(y))) +
  geom_point(color = "red4", size = 3) +
  geom_smooth(method = "lm", se = TRUE,
              color = "red4", fill = "red4", alpha = 0.15) +
  labs(title    = "Escala log-log — verificacao do modelo",
       subtitle = "log(y) vs. log(i): relacao linear confirma modelo de potencia",
       x = "x = log(periodo)", y = "log(casos)") +
  tema

g1 + g2 +
  plot_annotation(title    = "Analise exploratoria — AIDS Australia (1984-1988)",
                  subtitle = "Esquerda: escala original | Direita: escala log-log")

Analise exploratoria. Esquerda: série temporal original — crescimento claramente não-linear. Direita: escala log-log — relação aproximadamente linear, sugerindo que o modelo de potência é adequado.

4.2 Verificacao numerica

# Regressao linear de log(y) em x = log(i)
lm_explorat <- lm(log(y) ~ x, data = dados)
cf_exp      <- coef(lm_explorat)
r2_exp      <- summary(lm_explorat)$r.squared
print(r2_exp)
[1] 0.9528825

A regressão linear de \(\log(y)\) em \(x = \log(i)\) fornece \(R^2 = 0.9529\) — a relação log-log e quase perfeitamente linear, confirmando que o modelo de potência e adequado para estes dados.


5 Ajuste do Modelo via glm()

5.1 Especificação

\[ Y_i \sim \text{Poisson}(\lambda_i), \qquad \log(\lambda_i) = \beta_1 + \beta_2 x_i, \qquad x_i = \log(i) \]

modelo <- glm(
  y ~ x,                          # formula: y em funcao de x = log(i)
  family = poisson(link = "log"), # distribuicao Poisson, ligacao log
  data   = dados
)

5.2 Saida completa do summary()

summary(modelo)

Call:
glm(formula = y ~ x, family = poisson(link = "log"), data = dados)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.99601    0.16971   5.869 4.39e-09 ***
x            1.32661    0.06463  20.525  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 677.264  on 19  degrees of freedom
Residual deviance:  21.757  on 18  degrees of freedom
AIC: 138.06

Number of Fisher Scoring iterations: 4

6 Interpretacao da Saida do summary()

6.1 Os coeficientes

A saida do summary() mostra uma tabela de coeficientes com quatro colunas: estimativa, erro padrao, estatistica \(z\) e p-valor. Veja o que cada uma significa:

**Tabela de coeficientes** — modelo Poisson-log (AIDS Australia).
Parametro Estimativa Erro Padrao z (Wald) p-valor exp(b)
(Intercept) b1 (Intercept) 0.99601 0.16971 5.869 0.0000 2.7075
x b2 (x = log i) 1.32661 0.06463 20.525 1.29e-93 3.7682

6.1.1 Interpretação do intercepto \(b_1\)

Quando \(x = \log(i) = 0\), ou seja, quando \(i = 1\) (primeiro trimestre de 1984):

\[ \log(\hat\lambda_1) = b_1 \quad \Rightarrow \quad \hat\lambda_1 = e^{b_1} = e^{0.99601} = 2.7075 \]

O modelo estima em média \(2.71\) casos no primeiro trimestre. O valor observado foi \(y_1 = 1\) — a proximidade confirma um bom ponto de partida.

6.1.2 Interpretação da inclinação \(b_2\)

O modelo na forma multiplicativa é \(\lambda_i = e^{b_1} \cdot i^{b_2}\). O coeficiente \(b_2\) e o expoente da potência: os casos crescem como \(i\) elevado a \(b_2 = 1.32661\). Para cada aumento de 1 unidade em log(i), o logaritmo da média esperada de casos aumenta aproximadamente 1,32661 unidades

Interpretação prática: quando o periodo dobra (\(i \to 2i\)), os casos são multiplicados por:

\[ 2^{b_2} = 2^{1.32661} = 2.5081 \]

Ou seja, dobrar o tempo é associado a um aumento de aproximadamente 150.8% no número esperado de casos.

6.1.3 Estatística \(z\) de Wald

A estatística \(z\) testa \(H_0: \beta_j = 0\):

\[ z = \frac{\hat\beta_j}{\text{EP}(\hat\beta_j)} \;\overset{\text{assint.}}{\sim}\; N(0,1) \]

  • \(|z| > 1{,}96 \Rightarrow p < 0{,}05\) (significativo ao nível de 5%)
  • Para \(b_2\): \(z = 20.525\), \(|z| \gg 1{,}96\), \(p = 1.29e-93\)b2 é fortemente significativo.

6.2 Deviance nula e deviance residual

A saida do summary() reporta duas deviances que tem papeis distintos:

**As duas deviances** reportadas pelo summary() e sua diferenca.
Nome Formula Valor gl Significado
Null deviance (deviance nula) D(M0) = 2[l(M_sat) - l(M0)] 677.2640 19 Quao mal M0 (sem x) descreve os dados. Quanto maior, mais x pode ajudar.
Residual deviance (deviance residual) D(M1) = 2[l(M_sat) - l(M1)] 21.7573 18 Quao mal M1 (com x) descreve os dados. Quanto menor, melhor o ajuste.
Diferenca deltaD D(M0) - D(M1) 655.5068 1 Melhoria ao incluir x. Testa H0: b2 = 0.

A covariavel \(x = \log(i)\) explica:

\[ \frac{\Delta D}{D(M_0)} = \frac{655.51}{677.26} = 96.8\% \text{ da deviance nula} \]


7 Qualidade e Bondade de Ajuste

7.1 Criterio 1 — Deviance residual vs. \(\chi^2(\text{gl})\)

Sob o modelo correto, \(D(M_1) \sim \chi^2(N - p)\). Portanto \(E[D(M_1)] = N - p = \text{gl}\).

**Criterio 1** — Bondade de ajuste via deviance residual.
Item Valor
Deviance residual D(M1) 21.7573
Graus de liberdade (gl = N-p) 18
Valor esperado E[chi2(gl)] 18
D(M1) / gl (regra pratica) 1.2087
p-valor P(chi2(gl) >= D) 0.2429

Regra pratica: \(D/\text{gl} \approx 1\) indica bom ajuste. Aqui \(D/\text{gl} = 1.2087\) — proximo de 1, sem sinal de falta de ajuste.

Teste formal: \(p = 0.2429 > 0{,}05\)nao ha evidencia de falta de ajuste.

Distribuicao chi2(gl) com a deviance observada marcada. A deviance (linha verde) esta bem abaixo do valor critico (linha pontilhada vermelha), indicando bom ajuste.

7.2 Criterio 2 — Necessidade do preditor (\(\Delta D\))

mod_nulo <- glm(y ~ 1, family = poisson(link = "log"), data = dados)
av       <- anova(mod_nulo, modelo, test = "Chisq")
**ANOVA de deviances** — anova(mod_nulo, modelo, test = 'Chisq').
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
19 677.2640 NA NA NA
18 21.7573 1 655.5068 0

\(\Delta D = 655.5068\), gl \(= 1\), \(p = 1.42e-144\): forte evidência de que o preditor \(x = \log(i)\) é indispensável.

7.3 Criterio 3 — Superdispersao

Para a Poisson, a variância teórica é \(\text{var}(Y_i) = \lambda_i\). O parametro de dispersao é:

\[ \hat\phi = \frac{D(M_1)}{\text{gl}} = \frac{21.7573}{18} = 1.2087 \]

**Criterio 3** — Verificacao de superdispersao.
Item Resultado
phi_hat = D/gl 1.2087
Interpretacao phi ~ 1: sem superdispersao relevante
Acao recomendada Manter family = poisson (adequado)

7.4 Criterio 4 — Valores ajustados e residuos

lambda_hat  <- fitted(modelo)
residuo_pad <- residuals(modelo, type = "pearson")
residuo_dev <- residuals(modelo, type = "deviance")

tab_res <- data.frame(
  periodo    = i_seq,
  ano_trim   = paste0(ano, "-T", trim),
  y          = y,
  lambda_hat = round(lambda_hat, 2),
  res_bruto  = round(y - lambda_hat, 2),
  res_pearson= round(residuo_pad, 3),
  res_dev    = round(residuo_dev, 3)
)

kable(tab_res,
      caption = "**Tabela de ajuste** — observados, ajustados e residuos.",
      col.names = c("i","Periodo","y","lambda_hat",
                    "y - lambda_hat","Pearson ri","Deviance di"),
      align = "c") |>
  kable_styling(bootstrap_options = c("striped","hover","condensed"),
                full_width = FALSE, font_size = 11) |>
  row_spec(which(abs(residuo_pad) > 2), background = "#FFF3CD") |>
  footnote(
    general = sprintf(
      "X2 de Pearson = sum(ri^2) = %.4f  |  Deviance D = %.4f  (devem ser proximos)",
      sum(residuo_pad^2), D_res),
    general_title = "", footnote_as_chunk = TRUE
  )
**Tabela de ajuste** — observados, ajustados e residuos.
i Periodo y lambda_hat y - lambda_hat Pearson ri Deviance di
1 1984-T1 1 2.71 -1.71 -1.038 -1.193
2 1984-T2 6 6.79 -0.79 -0.303 -0.309
3 1984-T3 16 11.63 4.37 1.282 1.212
4 1984-T4 23 17.03 5.97 1.446 1.372
5 1985-T1 27 22.90 4.10 0.857 0.833
6 1985-T2 39 29.17 9.83 1.821 1.731
7 1985-T3 31 35.78 -4.78 -0.799 -0.818
8 1985-T4 30 42.72 -12.72 -1.946 -2.056
9 1986-T1 43 49.94 -6.94 -0.982 -1.006
10 1986-T2 51 57.44 -6.44 -0.849 -0.866
11 1986-T3 63 65.18 -2.18 -0.269 -0.271
12 1986-T4 70 73.15 -3.15 -0.368 -0.371
13 1987-T1 88 81.34 6.66 0.739 0.729
14 1987-T2 97 89.75 7.25 0.765 0.755
15 1987-T3 91 98.36 -7.36 -0.742 -0.751
16 1987-T4 104 107.14 -3.14 -0.304 -0.305
17 1988-T1 110 116.11 -6.11 -0.567 -0.572
18 1988-T2 113 125.27 -12.27 -1.096 -1.115
19 1988-T3 149 134.57 14.43 1.244 1.223
20 1988-T4 159 144.05 14.95 1.246 1.225
X2 de Pearson = sum(ri^2) = 21.6679 | Deviance D = 21.7573 (devem ser proximos)

7.5 Criterio 5 — Graficos de diagnostico

df_diag <- data.frame(
  i           = i_seq,
  y           = y,
  lambda_hat  = lambda_hat,
  res_pearson = residuo_pad,
  res_dev     = residuo_dev
)

# A: observados vs. ajustados no tempo
gA <- ggplot(df_diag, aes(x = i)) +
  geom_point(aes(y = y), color = "blue4", size = 3, alpha = 0.85) +
  geom_line(aes(y = lambda_hat), color = "red4", linewidth = 1.1) +
  scale_x_continuous(breaks = c(1,5,9,13,17),
    labels = c("1984-T1","1985-T1","1986-T1","1987-T1","1988-T1")) +
  labs(title    = "A) Observados vs. Ajustados",
       subtitle = "Pontos: y obs. | Curva: lambda ajustado",
       x = "Periodo", y = "Casos") +
  theme_minimal(base_size = 11) +
  theme(plot.title = element_text(face = "bold"))

# B: residuos de Pearson vs. periodo
gB <- ggplot(df_diag, aes(x = i, y = res_pearson)) +
  geom_point(color = "blue4", size = 3, alpha = 0.85) +
  geom_hline(yintercept = c(-2,0,2),
             linetype = c("dashed","solid","dashed"),
             color    = c("red4","gray50","red4"),
             linewidth= c(0.8, 0.7, 0.8)) +
  scale_x_continuous(breaks = c(1,5,9,13,17),
    labels = c("1984-T1","1985-T1","1986-T1","1987-T1","1988-T1")) +
  labs(title    = "B) Residuos de Pearson vs. Periodo",
       subtitle = "Sem padrao sistematico = bom ajuste",
       x = "Periodo", y = "Residuo de Pearson") +
  theme_minimal(base_size = 11) +
  theme(plot.title = element_text(face = "bold"))

# C: residuos vs. valores ajustados
gC <- ggplot(df_diag, aes(x = lambda_hat, y = res_pearson)) +
  geom_point(color = "blue4", size = 3, alpha = 0.85) +
  geom_hline(yintercept = c(-2,0,2),
             linetype = c("dashed","solid","dashed"),
             color    = c("red4","gray50","red4"),
             linewidth= c(0.8, 0.7, 0.8)) +
  labs(title    = "C) Residuos de Pearson vs. Ajustados",
       subtitle = "Padrao em leque = heterocedasticidade",
       x = "Valores ajustados (lambda_hat)", y = "Residuo de Pearson") +
  theme_minimal(base_size = 11) +
  theme(plot.title = element_text(face = "bold"))

# D: QQ-plot dos residuos de deviance
df_qq <- data.frame(
  teorico   = qnorm(ppoints(length(residuo_dev))),
  observado = sort(residuo_dev)
)

gD <- ggplot(df_qq, aes(x = teorico, y = observado)) +
  geom_point(color = "blue4", size = 3, alpha = 0.85) +
  geom_abline(intercept = 0, slope = 1,
              color = "red4", linetype = "dashed", linewidth = 0.9) +
  labs(title    = "D) QQ-plot dos residuos de deviance",
       subtitle = "Pontos proximos a reta = residuos ~ N(0,1)",
       x = "Quantis teoricos N(0,1)", y = "Residuos de deviance") +
  theme_minimal(base_size = 11) +
  theme(plot.title = element_text(face = "bold"))

(gA + gB) / (gC + gD) +
  plot_annotation(
    title    = "Diagnosticos do modelo Poisson-log — AIDS Australia",
    subtitle = "A: ajuste no tempo | B: residuos no tempo | C: residuos vs mu | D: normalidade"
  )

Graficos de diagnostico — modelo Poisson-log (AIDS Australia). A: ajuste no tempo. B: residuos de Pearson vs. periodo. C: residuos vs. valores ajustados. D: QQ-plot dos residuos de deviance.

Leitura dos graficos:

  • A) A curva ajustada acompanha bem os pontos — o modelo captura o crescimento exponencial.
  • B) Sem padrao sistematico no tempo e sem residuos alem de \(\pm 2\) — bom sinal.
  • C) Sem padrao em leque — nao ha evidencia de heterocedasticidade nem superdispersao.
  • D) Pontos proximos a diagonal — residuos de deviance aproximadamente \(N(0,1)\).

7.6 Criterio 6 — AIC

aic_nulo  <- AIC(mod_nulo)
aic_model <- AIC(modelo)
**Criterio 6** — AIC (Criterio de Informacao de Akaike).
Modelo AIC Delta AIC vs. nulo
M0: nulo (sem preditor) 791.5620 0.0
M1: com x = log(i) 138.0552 -653.5

\(\Delta\text{AIC} = -653.5\): o modelo com \(x\) e muito superior ao modelo nulo em termos de equilibrio ajuste/parcimonia.


8 Resumo dos Criterios de Qualidade

**Resumo da qualidade e bondade de ajuste** — modelo Poisson-log (AIDS Australia).
Criterio Valor Diagnostico
1. D(M1)/gl (regra pratica) 1.2087 Bom (proximo de 1)
2. p-valor bondade de ajuste 0.2429 Bom (p > 0.05)
3. Necessidade de x (deltaD) 1.42e-144 x fortemente necessario
4. Superdispersao (phi_hat) 1.2087 Sem superdispersao
5. Residuos fora de +/-2 0 de 20 Nenhum (ideal)
6. AIC (vs. modelo nulo) 138.1 (delta = -653.5) M1 muito melhor que M0

9 Interpretacao Final

9.1 Modelo ajustado

\[ \log(\hat\lambda_i) = 0.99601 + 1.32661 \log(i) \quad \Longleftrightarrow \quad \hat\lambda_i = 2.7075 \times i^{1.32661} \]

9.2 Resumo dos resultados

**Resumo final** do modelo Poisson-log ajustado aos dados de AIDS.
Item Resultado
Intercepto b1 0.99601 (EP = 0.16971, p = 0.0000)
Inclinacao b2 1.32661 (EP = 0.06463, p = 1.29e-93)
Numero esperado de casos em i=1 exp(b1) = exp(0.99601) = 2.7075
Fator de multiplicacao ao dobrar i 2^b2 = 2^1.32661 = 2.5081 (+150.8%)
Percentual da deviance nula explicado por x 96.8%
Deviance residual D(M1) 21.7573 (gl = 18)
D(M1)/gl (bondade de ajuste) 1.2087 (proximo de 1 = bom)
p-valor (D(M1) ~ chi2(gl)) 0.2429 (> 0.05 = sem falta de ajuste)
Superdispersao phi_hat 1.2087 (< 1.5 = sem superdispersao)
AIC 138.0552 (vs. 791.5620 do modelo nulo)

9.3 Conclusão

O modelo de Poisson com ligacao log e covariavel \(x_i = \log(i)\) descreve muito bem o crescimento dos casos de AIDS na Australia no periodo 1984–1988:

  • O crescimento e consistente com um modelo de potência \(\hat\lambda_i = 2.7075 \times i^{1.32661}\)
  • O preditor \(x = \log(i)\) e fortemente necessário (\(\Delta D = 655.51\), \(p \approx 0\)) e explica 96.8% da deviance nula
  • O modelo ajusta bem os dados (\(D/\text{gl} = 1.2087\), \(p = 0.2429\)) sem evidência de falta de ajuste
  • Nâo há superdispersão relevante (\(\hat\phi = 1.2087\)), justificando o uso da Poisson padrão

9.4 Referencias

Dobson, A. J. & Barnett, A. G. (2018). An Introduction to Generalized Linear Models (4ª ed.). CRC Press / Chapman & Hall.