E5 — GLM I: verossimilhança, binomial e Poisson

Máxima verossimilhança. Regressão logística e de Poisson. Escala do preditor linear versus escala da resposta. DAGs e raciocínio causal na escolha de covariáveis.

Quarta, 23 de setembro de 2026 · manhã · 4,5 h

O primeiro encontro com modelos cuja resposta não é contínua e ilimitada — e com a pergunta que decide a qualidade de qualquer análise observacional: que covariáveis entram no modelo, e por quê?

Slides

Abrir slides

Conteúdo

  1. Máxima verossimilhança — a ideia, com uma superfície de verossimilhança desenhada em R. Deviance e teste de razão de verossimilhanças.
  2. GLM binomial — proporções e dados binários; odds, log-odds, razão de chances versus risco relativo; separação completa e a correção de Firth.
  3. GLM Poisson — contagens; o log como ligação canônica; offset para esforço amostral desigual.
  4. Interpretar na escala certa — o coeficiente está em log; a biologia está na escala da resposta. ggeffects e marginaleffects.
  5. DAGs e raciocínio causal (60 min) — dagitty, critério backdoor, confounders (controlar) versus colisores (não controlar). Por que seleção estatística de variáveis não substitui pensar sobre causalidade.

Antes da aula de quarta, 23/09

ImportanteComeçaremos com uma atividade, não com teoria

Nas primeiras 2 h de quarta estarei em reunião. São duas tarefas, nesta ordem, mais uma de reserva: uma lição do swirl em português, que treina no console o GLM de Poisson do bloco 3, e depois o bloco 5 deste encontro — “Que covariáveis entram” —, que é o único autocontido e o que mais rende feito em vez de assistido: cada um precisa desenhar o DAG do próprio sistema. A teoria dos blocos 1 a 4 eu dou quando chegar — e vou mais rápido no 3, que vocês já terão praticado.

Tarefa 1 — GLM de Poisson no swirl (~35 min)

Comecem por aqui, porque é mecânico, corrige sozinho e não depende de mim estar na sala. A última lição do curso Regression Models da Johns Hopkins, que traduzimos para o português, chama-se Respostas de Contagem e é quase o roteiro do bloco 3 deste encontro: o log de lambda como função linear das preditoras, glm(y ~ x, poisson, dados), o intervalo na escala multiplicativa com exp(confint()) e o offset para esforço amostral desigual. No fim ela ainda calcula deviance(mdl)/df.residual(mdl) e discute sobredispersão — que é por onde a aula da tarde começa.

A instalação está em Instalação › swirl. Depois: library(swirl), swirl(), curso Modelos de Regressão, lição Respostas de Contagem.

Três coisas para trazer anotadas:

  1. A lição estima que as visitas crescem entre 0,2192 % e 0,2399 % por dia. De onde sai esse intervalo, e por que ele é multiplicativo e não aditivo?
  2. A razão deviance/gl do modelo dá cerca de 4,3. O que isso diz sobre os erros-padrão que o summary() tinha imprimido duas telas antes?
  3. O offset entra como log(visits + 1), com coeficiente fixado em 1. Qual seria o offset no seu conjunto de dados — ou por que não há nenhum?

Tarefa 2 — o DAG do seu sistema

Leitura. Comecem pelo fluxograma conectando variáveis, no cap. 2 de Análises Ecológicas no R — é este mesmo raciocínio, em português e com exemplo ecológico. Quem quiser ir além, Arif & MacNeil (2023), Applying the structural causal model framework for observational causal inference in ecology, Ecological Monographs 93:e1554.

Leiam com três perguntas sobre o próprio trabalho em mente:

  1. Qual é a variável cujo efeito vocês querem estimar? Uma só.
  2. Que outras vocês mediram porque “é bom controlar”? Listem.
  3. Para cada uma: ela causa a preditora de interesse, é causada por ela, ou as duas são causadas por um terceiro fator?

Exercício. Abram os slides na seção Que covariáveis entram e sigam o exemplo com dagitty. Depois façam o de vocês:

library(dagitty)

g <- dagitty('dag {
  SuaPreditora -> SuaResposta
  Confundidor  -> SuaPreditora
  Confundidor  -> SuaResposta
}')

adjustmentSets(g, exposure = "SuaPreditora", outcome = "SuaResposta")

A pergunta que interessa: o conjunto que a função devolveu é igual à lista de covariáveis que vocês pretendiam pôr no modelo? Se não for, qual entrou, qual saiu, e por quê.

Me mandem por e-mail, antes do fim da reunião: o código do DAG, a saída do adjustmentSets(), uma frase dizendo que covariável vocês iam incluir e não vão mais — ou o contrário — e onde travaram, se travaram. É com isso que eu começo quando chegar.

Tarefa 3 — reserva, se eu demorar

Se a reunião esticar e vocês terminarem as duas primeiras, sigam para a lição Respostas Binárias, no mesmo curso do swirl (~30 min). Ela é o bloco 2 deste encontro, com o exemplo mais leve que existe: a chance de o Baltimore Ravens vencer, em função dos pontos que o time marca.

O que ela treina, quase na ordem em que veremos na aula:

  • chance como \(p/(1-p)\), e por que várias maneiras de escrever a mesma razão são a mesma coisa;
  • glm(ravenWinNum ~ ravenScore, binomial, ravenData);
  • que predict() devolve log da chance, não probabilidade — a conversão com exp(lodds)/(1 + exp(lodds)) é o bloco 4 em miniatura;
  • exp(confint(mdl)): o intervalo construído na escala do link e só depois exponenciado, que é a ordem em que eu vou insistir;
  • anova(mdl), qchisq(0.95, 1) e pchisq(3.5398, 1, lower.tail = FALSE) — o teste de razão de verossimilhanças do bloco 1, feito à mão.

Uma pergunta para trazer: o modelo dá aos Ravens 33 % de chance de vitória com 9 pontos, e nos dados não existe jogo com menos que isso. Onde fica a região equivalente no conjunto de vocês — aquela em que o modelo responde com toda a confiança sobre o que vocês nunca observaram?

Prática

Os enunciados estão no fim do deck e pedem que você use os seus próprios dados. Para acompanhar em sala, o mesmo roteiro rodado nos dados do curso, com um take-home por item:

Dados

Leituras

Obrigatória

Complementar

Recursos externos


Volta para o índice do curso.