Capítulo 5 — Estudo principal e validação independente
Mapa da aula
Aula 05 publicada. Mapa, exemplo, EX027.
flowchart TD
N0["5.1 Executando a análise"]
N1["Laboratório — Diferença em diferenças da mediana da"]
N2["5.2 Resultados"]
N3["5.3 Interpretando com honestidade"]
N4["5.4 Validação independente"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX027"]
Desenho lógico
flowchart LR
N0["5.1 Executando a análise"]
N1["Laboratório — Diferença em diferenças da mediana da"]
N2["5.2 Resultados"]
N3["5.3 Interpretando com honestidade"]
N4["5.4 Validação independente"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX027"]
[5.1 Executando a análise]
|
v
[Laboratório — Diferença em diferenças da mediana da]
|
v
[5.2 Resultados]
|
v
[5.3 Interpretando com honestidade]
|
v
[5.4 Validação independente]
|
v
[Exemplo resolvido] --> [Exercício EX027]
Objetivos de aprendizagem
Você vai (1) executar uma análise de diferença em diferenças pré-registrada; (2) interpretar um intervalo que inclui o zero; (3) providenciar a validação independente da análise.
5.1 Executando a análise
Com o pré-registro congelado, Yusuf extrai registros sintéticos de correção para trezentas instâncias de vulnerabilidades críticas em cada um de quatro grupos: os departamentos adotantes antes e depois da correção ordenada pelo risco, e os departamentos de comparação nos mesmos dois períodos. Ele calcula a mediana da latência em cada grupo, a diferença em diferenças das medianas e um intervalo de confiança bootstrap, reamostrando cada grupo mil vezes com uma semente aleatória fixa. O script usa apenas os módulos statistics e random do Python, para que os revisores possam executá-lo de novo sem software especial. Os quatro grupos usam a mesma regra de extração.
Laboratório — Diferença em diferenças da mediana da latência de correção crítica com intervalo bootstrap
"""Difference-in-differences of median critical-patch latency with bootstrap interval (stdlib only)."""
import random, statistics as st
random.seed(23)
def gen(n, m): return [random.expovariate(1/m) for _ in range(n)]
t_pre, t_post = gen(300, 21), gen(300, 12) # departments using risk-ranked patching
c_pre, c_post = gen(300, 20), gen(300, 18) # comparison departments
did = (st.median(t_post) - st.median(t_pre)) - (st.median(c_post) - st.median(c_pre))
bs = []
for _ in range(1000):
r = lambda x: [random.choice(x) for _ in x]
bs.append((st.median(r(t_post)) - st.median(r(t_pre))) - (st.median(r(c_post)) - st.median(r(c_pre))))
bs.sort()
print(f"medians days: treated {st.median(t_pre):.1f} -> {st.median(t_post):.1f}; comparison {st.median(c_pre):.1f} -> {st.median(c_post):.1f}")
print(f"difference-in-differences {did:.1f} days; 95% bootstrap CI {bs[25]:.1f} to {bs[974]:.1f}")
Execute com python3 lab_patch.py. Saída verificada:
medians days: treated 14.6 -> 10.1; comparison 12.6 -> 11.6
difference-in-differences -3.4 days; 95% bootstrap CI -7.4 to 1.2
5.2 Resultados
Nos departamentos adotantes, a mediana da latência cai de 14,6 para 10,1 dias. Nos departamentos de comparação, cai de 12,6 para 11,6 dias. A diferença em diferenças é de menos 3,4 dias, o que sugere que os adotantes melhoraram cerca de três dias e meio a mais que os departamentos de comparação. No entanto, o intervalo bootstrap de 95 por cento vai de menos 7,4 a mais 1,2 dia, então inclui o zero. Os dados são compatíveis com uma melhora útil, mas também com nenhum efeito. Yusuf apresenta as medianas dos grupos e o intervalo numa única tabela, para que os leitores vejam as mudanças brutas além da estimativa-resumo. Ele evita arredondar o intervalo para esconder seu limite superior.
5.3 Interpretando com honestidade
Yusuf resiste à tentação de descrever o resultado como prova de que a correção ordenada pelo risco funciona. Seguindo seu pré-registro, ele relata a estimativa, o intervalo e o fato de que a hipótese não é confirmada no nível de confiança planejado. Ele também relata as medianas anteriores à adoção, que mostram os adotantes começando mais lentos que os departamentos de comparação, o que levanta a possibilidade de que parte da queda reflita uma recuperação do atraso. A Prof.ª Hald observa que um resultado inconclusivo honesto é uma contribuição, porque diz aos profissionais que o efeito é incerto.
5.4 Validação independente
Yusuf envia seu script congelado, os dados sintéticos e o pré-registro a uma pesquisadora de outra universidade que não tem interesse no resultado. Ela executa a análise de novo e obtém números idênticos, depois tenta uma alternativa razoável, comparando médias do logaritmo da latência, e encontra a mesma direção e um intervalo que também inclui o zero. Seu relatório escrito confirma que a conclusão não depende de uma única escolha analítica. Yusuf inclui o relatório no apêndice da tese, com a permissão dela. O relatório dela nomeia cada arquivo que ela conferiu.
Exemplo resolvido
Yusuf executa a análise pré-registrada, encontra medianas que caem de 14,6 para 10,1 nos adotantes e de 12,6 para 11,6 nas comparações, uma diferença de menos 3,4 dias com intervalo de menos 7,4 a 1,2, relata o resultado como inconclusivo e o faz reproduzir de forma independente.
Caso sintético. Os registros são sintéticos; as saídas vêm de lab_patch.py.
Erros e limites
Descrever um intervalo que inclui o zero como prova de um efeito engana os profissionais.
Exercícios
-
EX027 — Medianas dos adotantes. Como mudou a mediana da latência dos adotantes? Rubrica: 3 = de 14,6 para 10,1 dias;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
-
EX028 — Estimativa DiD. Qual é a estimativa da diferença em diferenças? Rubrica: 3 = menos 3,4 dias;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
-
EX029 — Limites do intervalo. Qual é o intervalo bootstrap de 95%? Rubrica: 3 = de menos 7,4 a mais 1,2 dia;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
-
EX030 — Significado do zero. O que significa o intervalo incluir o zero? Rubrica: 3 = os dados são compatíveis com nenhum efeito;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
-
EX031 — Preocupação com a recuperação. Por que parte da queda pode ser recuperação do atraso? Rubrica: 3 = os adotantes começaram mais lentos que as comparações;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
-
EX032 — Alternativa da validadora. Que análise alternativa a validadora tentou? Rubrica: 3 = médias do logaritmo da latência;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
Continue estudando — aula 05 (capítulo 05 de 08)
← Capítulo 04 · Índice das aulas · Capítulo 06 →
Continue para a próxima aula já escrita.