Vamos iniciar carregando os pacotes que serão utilizados. Em seguida, utilizaremos a ferramenta set.seed para garantir a replicabilidade exata dos testes.

library(mediation) 
## Loading required package: MASS
## Loading required package: Matrix
## Loading required package: mvtnorm
## Loading required package: sandwich
## mediation: Causal Mediation Analysis
## Version: 4.5.1
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ tidyr::expand() masks Matrix::expand()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ tidyr::pack()   masks Matrix::pack()
## ✖ dplyr::select() masks MASS::select()
## ✖ tidyr::unpack() masks Matrix::unpack()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(tibble)
library(tinytex)

# Definir Reprodutibilidade
set.seed(123)

# Tamanho da amostra
n = 300

Criando a variável de tratamento (T)

É uma Variável binária (0/1) que representa o tratamento.

‘rbinom’ cria 300 observações com probabilidade 0.5 de receber o tratamento (um sorteio de moeda honesta).

T = rbinom(n, 1, 0.5)

Criando a variável Moderador (Z) - Pré-tratamento

Variável contínua, pré-tratamento, com média 0 e desvio-padrão 1.

Ex.: nível de escolaridade, predisposição política. # É chamada de moderador porque pode alterar o efeito do tratamento.

O moderador explica para quem, quando ou em que condições o tratamento é mais ou menos eficaz.

Z = rnorm(n, 0, 1)

Mediador (M) — afetado por T

Variável intermediária afetada pelo tratamento.

É o canal causal: o tratamento muda M, que pode, por sua vez, afetar Y.

A equação 0.5 * T + erro garante que, em média, T aumenta M em 0.5 unidades.

O mediador explica porque o tratamento funciona;

M = 0.5 * T + rnorm(n, 0, 1)

Simular resultado (Y) — afetado por T, M e interação T * Z

Os termos que irão influenciar Y são arbitrariamente definidos para cada variável (M, T e Z)

Y = 1 + 0.7 * T + 0.6 * M + 0.4 * T * Z + rnorm(n, 0, 1)

Aqui está o “experimento” central:

Contruindo a BASE (data frame)

df = data.frame(T = T, Z = Z, M = M, Y = Y)

Resumo conceitual

O script cria, de forma controlada, um “mundo” onde sabemos a verdade do processo gerador.

Depois, podemos aplicar modelos de mediação (para decompor efeitos diretos e indiretos) e de moderação (para ver como o efeito do tratamento muda de acordo com Z) e verificar se a estatística recupera os parâmetros que definimos.

Esse tipo de simulação é ideal para:

Análise de Moderação (X e Z)

Dividir Z em 3 grupos (baixo, médio, alto)

df = df %>%
  mutate(Z_group = cut(Z,breaks = quantile(Z, probs = c(0, 1/3, 2/3, 1), na.rm = TRUE),
                       labels = c("Z baixo", "Z médio", "Z alto"),
                       include.lowest = TRUE))

O que foi feito?

Ele “fez isso” para estratificar o moderador contínuo Z em três faixas (baixo/médio/alto) e, assim, estimar/visualizar efeitos do tratamento por subgrupos (CATEs). É um passo comum em análises de moderação quando queremos gráficos e comparações simples.

O que cada parte faz:

Por que fazer isso?

Resumo:
Se discretizou Z em tercis para facilitar a análise/visualização de moderação por subgrupos; é útil didaticamente, mas, quando possível, prefira modelar a interação com Z contínuo e visualizar os efeitos marginais.

E o que é o CATE?

É o efeito causal médio do tratamento em um subconjunto específico da população, definido por uma condição ou característica observável.

“Qual é o efeito médio do tratamento para indivíduos com X = x?”

Qual a relação com o ATE?

ATE (Average Treatment Effect) é a média geral sobre toda a amostra.

CATE é mais detalhado: Calcula esse efeito condicionado em um valor ou gurpo de X.

Ex:
- ATE - Impacto médio de uma campanha de incentivo ao voto em todos os eleitores.
- CATE - Impacto médio entre eleitores com alta escolaridade ou entre municípios com alta renda.

No exercício de moderação, o moderador Z foi dividido em Z baixo, Z médio e Z alto.

Para cada grupo, calcula-se a diferença média de Y entre tratados (T=1) e controles (Y=0).

Essa diferença é o CATE para cada faixa de Z

Por que é Importante?

  1. Heterogeneidade: políticas raramente têm efeito igual para todos.
  2. Targeting: ajuda a direcionar programas para quem mais se beneficia.
  3. Validade externa: mostra se o efeito encontrado em um grupo se repete em outros.

Em síntese: O CATE é o efeito médio do tratametno para um grupo ou condição específica, revelando como o impacto da intervenção varia entre diferentes pefis da população.

Agora, vamos criar o gráfico para visualizar o efeito do moderado (Z) sobre o tratamento (T)

moderation_graph = 
  ggplot(df, aes(x = factor(T), y = Y, fill = Z_group)) +
  geom_boxplot(alpha = 0.6) +
  labs(
    title = "Efeito Moderador de Z sobre o Tratamento T - Dados Simulados",
    x = "Tratamento (T)",
    y = "Resultado (Y)",
    fill = "") +
  theme_minimal(base_size = 14) + 
  theme(axis.text.x = element_text(size = 10), 
        axis.text.y = element_text(size = 12),
        axis.title = element_text(size = 14), 
        plot.title = element_text(size = 14), 
        plot.subtitle = element_text(size = 13), 
        strip.text.x = element_text(size = 10), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"), 
        legend.text = element_text(size = 14), 
        legend.position = "bottom") 

moderation_graph

Interpretação do Resultado:

Com T = 0 (controle):

Com T = 1 (tratamento):

O tratamento tem maior efeito nos indivíduos com Z alto.

Isso reproduz a moderação programada no modelo:

O termo 0.4 * T * Z faz com que, quando Z é maior, o impacto de T em Y seja mais forte.

Em resumo

O Gráfico mostra, de maneira visual, que o efeito do tratamento T em Y depende do nível de Z, exatamente a definição de moderação em inferência causal.

ANÁLISE DE MEDIAÇÃO

A. Modelo do mediador

Esse trecho ajusta e resume um modelo de regressão linear que representa a primeira etapa da análise de mediação.

med_model = lm(M ~ T, data = df) 
summary(med_model)
## 
## Call:
## lm(formula = M ~ T, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.77887 -0.68880  0.04473  0.73693  2.62219 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.03091    0.08034  -0.385    0.701    
## T            0.60043    0.11556   5.196 3.79e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1 on 298 degrees of freedom
## Multiple R-squared:  0.08307,    Adjusted R-squared:  0.07999 
## F-statistic:    27 on 1 and 298 DF,  p-value: 3.785e-07
  • lm() = linear model (modelo de regressão linear).

  • M ~ T = fórmula dizendo que o mediador M é a variável dependente e o tratamento T é a explicativa.

  • data = df = usa os dados do data frame df.

  • O resultado (lm object) é guardado em med_model.

Interpretação substantiva

Modelo estimado

Mi= alpha + betaTi + erroi

  • Intercepto (alpha): valor médio de M no grupo de controle (T=0).

  • Coeficiente de T (beta): diferença média de M entre os tratados (T=1) e os controles.

    → É o efeito do tratamento sobre o mediador.

Conexão com mediação causal

Na análise de mediação, o primeiro passo é estimar como o tratamento afeta o mediador.

  • Se beta for estatisticamente diferente de 0, significa que T realmente influencia M.

  • Essa relação é necessária para que M possa mediar o efeito de T sobre Y.

Exemplo

Se summary(med_model) der:

(Intercept)   0.02
T            0.48

→ Em média, o tratamento aumenta M em cerca de 0.48 unidades.

Resumo em uma frase

Esse código ajusta a regressão M ~ T, que mede quanto o tratamento T altera o mediador M, sendo o primeiro passo para decompor o efeito causal total em direto e indireto.

O que podemos interpretar do resultado?

O que o modelo estima

A equação ajustada é:

M^i=−0.0309+0.6004 Ti

Coeficientes

Termo Estimativa Interpretação
(Intercept) –0.03 (p = 0.70) Valor médio de M no grupo de controle. Estatisticamente igual a zero: em quem não recebeu o tratamento, M fica em torno de 0.
T 0.60 (p ≈ 3.8e-07) Diferença média de M entre tratados e controles. Ou seja, receber o tratamento aumenta M em ≈ 0.6 unidades. Esse é o efeito do tratamento sobre o mediador.

O p-valor muito baixo (p < 0.001) indica que esse aumento de ~0.6 é altamente significativo.

Ajuste do modelo

Interpretação substantiva na análise de mediação

Em palavras:

Em média, receber o tratamento aumenta o mediador M em aproximadamente 0,6 unidades, diferença que não se deve ao acaso.

Resumo em uma frase

O tratamento aumenta significativamente o mediador M em ~0,6 unidades, confirmando que existe um caminho causal T → M — o pré-requisito essencial para identificar um efeito indireto na análise de mediação.

Detalhando o modelo

  1. O que é o intercepto nesse modelo

O modelo é

Mi= alpha + betaTi + erroi

onde:

  • Mi: valor do mediador para a observação i

  • Ti: 0 (controle) ou 1 (tratamento)

Quando T = 0, a equação vira:

Mi= alpha+ erroi

Logo, alpha (o intercepto) é a média esperada de M no grupo de controle, ou seja, quando não há tratamento.

No seu resultado:

(Intercept) = -0.0309
p-value = 0.701
  1. Interpretação prática
  • Valor: –0.03 é muito próximo de 0.
  • Significância: p=0.701 indica que não há evidência de que a média de M no controle seja diferente de 0.

Então podemos dizer:

Em quem não recebeu o tratamento, o mediador M tem valor médio praticamente zero (diferença tão pequena que pode ser atribuída ao acaso).

  1. Por que é útil saber isso
  • Serve como referência: o efeito de T é medido em relação a esse nível “baseline”.

  • Simplifica a interpretação de \beta:

    → O coeficiente 0.60 de T significa que o grupo tratado tem, em média, M = –0.03 + 0.60 ≈ 0.57, ou seja, cerca de 0.6 pontos a mais que o controle.

Resumo:

  • O intercepto é a média do mediador M quando não há tratamento.

  • Como –0.03 não difere de 0 de forma significativa, concluímos que sem tratamento M fica em torno de zero.

  • O intercepto α é o valor médio de M quando T = 0, ou seja, quando a unidade está no grupo de controle.

  • O coeficiente beta mostra quanto M muda em média quando passamos de T = 0 (controle) para T = 1 (tratamento).

  • Portanto:

    M não é o controle; é o resultado (variável dependente) do modelo de mediação.

    O grupo de controle é identificado por T = 0.

B. Modelo do Resultado

out_model = lm(Y ~ T + M, data = df) 
summary(out_model) # Y, X e M são arbitrariamente definidos
## 
## Call:
## lm(formula = Y ~ T + M, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.76979 -0.69241 -0.01046  0.59424  3.10311 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.08333    0.08535  12.692  < 2e-16 ***
## T            0.60413    0.12818   4.713 3.76e-06 ***
## M            0.65196    0.06153  10.596  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.062 on 297 degrees of freedom
## Multiple R-squared:  0.3748, Adjusted R-squared:  0.3706 
## F-statistic: 89.03 on 2 and 297 DF,  p-value: < 2.2e-16
  1. O que faz o código?

Ajusta um modelo de regressão linear em que:

2. Por que incluímos T e M juntos

Queremos separar:

3. Como interpretar os coeficientes

Termo O que mede Interpretação conceitual
(Intercept) Valor médio de Y quando T=0 e M=0. É apenas a linha de base.
T Efeito direto de T sobre Y, mantendo M constante. Mostra se T afeta Y por caminhos que não passam por M.
M Efeito de M sobre Y, mantendo T constante. Indica se M transmite o efeito de T para Y.

Importante:

O efeito indireto é obtido multiplicando:

4. Conexão com a etapa anterior

5. Exemplo com números hipotéticos

Suponha que summary(out_model) mostre:

Coefficients:
(Intercept)  1.0
T            0.3
M            0.7

Ou seja, grande parte do efeito do tratamento sobre Y se dá via M.

Resumo em uma frase

O modelo Y ~ T + M estima o efeito direto de T e o efeito de M sobre o desfecho Y, permitindo calcular a parte do impacto do tratamento que é mediada por M e a parte que é direta, completando a análise de mediação.

Vamos interpretar esse resultado em etapas, ligando com a lógica de mediação causal.

  1. Modelo estimado

Y^=1.083+0.604 T+0.652 M

  1. O que dizem os coeficientes
Coeficiente Valor
Intercepto (1.083) Valor médio de Y quando T = 0 e M = 0. É a linha de base do desfecho.
T (0.604) Efeito direto do tratamento sobre Y controlando M. Ou seja, mesmo quando o mediador M é mantido constante, o tratamento aumenta Y em ≈0.6 unidades.
M (0.652) Efeito do mediador sobre Y, para um dado nível de T. Cada aumento de 1 unidade em M está associado a um aumento de ≈0.65 unidades em Y.

Todos os coeficientes são altamente significativos (p < 0.001).

  1. Efeito indireto (via M)

Da etapa anterior (M ~ T):

Agora:

Efeito indireto = 0.60 × 0.65 ≈ 0.39

  1. Efeito direto e total

Isso significa que:

  1. Qualidade do ajuste

Em resumo

O tratamento tem um efeito total de aproximadamente 1 unidade sobre Y.

Esse impacto se decompõe em:

Em termos causais: T influencia M, que por sua vez influencia Y, e boa parte do impacto de T em Y acontece através desse mecanismo mediador.

Cenário ilustrativo

Suponha que:

  • T (tratamento) = participação de um eleitor em um debate público on-line promovido por um partido.

  • M (mediador) = interesse político do eleitor, medido em uma escala padronizada.

  • Y (desfecho) = intenção de comparecer às urnas (por exemplo, 0 a 10).

O que a análise sugere:

Efeito Interpretação prática
Efeito de T sobre M (≈0.60) Participar do debate aumenta o interesse político em ~0,6 ponto.
Efeito de M sobre Y (≈0.65) Cada 1 ponto a mais de interesse político aumenta a intenção de votar em ~0,65 ponto.
Efeito indireto T→M→Y (≈0.39) Parte do efeito de participar do debate sobre a intenção de votar vem porque a participação elevou o interesse político.
Efeito direto de T sobre Y (≈0.60) Mesmo sem considerar a mudança de interesse, o simples fato de participar do debate eleva a intenção de voto em ~0,6 ponto (ex.: por criar compromissos sociais, aumentar confiança no processo etc.).
Efeito total (≈1.0) Somando tudo, quem participa do debate apresenta, em média, um ponto a mais na intenção de votar em comparação a quem não participa.

Como contar em poucas linhas

Participar de um debate on-line aumenta em cerca de 1 ponto a intenção de votar.

Aproximadamente 40 % desse efeito se dá indiretamente, porque o debate eleva o interesse político; os 60 % restantes vêm de mecanismos diretos, como maior confiança e engajamento imediato.

Resumo geral

  • Esse exemplo mostra, de maneira substantiva, o que o seu modelo de mediação revelou:

  • O tratamento atua de dois modos — diretamente sobre o resultado e indiretamente, ao modificar um mediador-chave que também influencia o resultado.

C. Mediação

Agora, você vai integrar as duas regressões que estimou (med_model e out_model) em uma única análise de mediação causal.

# Mediação
med_out = mediate(med_model, out_model, treat = "T", mediator = "M", boot = TRUE)
## Running nonparametric bootstrap
summary(med_out)
## 
## Causal Mediation Analysis 
## 
## Nonparametric Bootstrap Confidence Intervals with the Percentile Method
## 
##                Estimate 95% CI Lower 95% CI Upper   p-value    
## ACME            0.39146      0.23509      0.58208 < 2.2e-16 ***
## ADE             0.60413      0.34938      0.86663 < 2.2e-16 ***
## Total Effect    0.99558      0.71972      1.26602 < 2.2e-16 ***
## Prop. Mediated  0.39319      0.25287      0.59097 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 300 
## 
## 
## Simulations: 1000

Vamos entender cada parte:

  1. O que o código faz
med_out = mediate(med_model, out_model, treat = "T", mediator = "M", boot = TRUE)
summary(med_out)
  • mediate() (do pacote mediation) combina:

    • med_model : modelo do mediador (M ~ T)

    • out_model : modelo do desfecho (Y ~ T + M)

  • treat = "T" : identifica a variável de tratamento.

  • mediator = "M" : identifica o mediador.

  • boot = TRUE : usa bootstrap para calcular intervalos de confiança robustos (recomendado).

O objeto med_out guarda as estimativas; summary(med_out) imprime os resultados.

  1. Quais estimativas você vai ver

O summary(med_out) mostra (nomes em inglês padrão):

Quantidade Significado Interpretação
ACME (Average Causal Mediation Effect) Efeito indireto (T → M → Y) Quanto do efeito total de T em Y passa via M.
ADE (Average Direct Effect) Efeito direto (T → Y, mantendo M fixo) Parte do efeito de T que não passa por M.
Total Effect ACME + ADE Impacto total de T em Y.
Prop. Mediated ACME ÷ Total Proporção do efeito total explicada pelo mediador.

Ele também traz:

  • Erros-padrão,

  • Intervalos de confiança (por bootstrap),

  • p-valores.

  1. Conexão com seus resultados anteriores

Você já tinha:

Caminho Valor aproximado
Efeito de T em M 0.60
Efeito de M em Y 0.65
Efeito direto de T em Y (controlando M) 0.60

Da conta manual:

  • Indireto ≈ 0.60 × 0.65 ≈ 0.39

  • Direto ≈ 0.60

  • Total ≈ 0.99.

O mediate() fará exatamente essa decomposição de forma formal e com intervalos de confiança.

  1. Como interpretar o summary(med_out)

Você vai encontrar algo parecido com:

Causal Mediation Analysis 

ACME (indirect effect): 0.39   95% CI [0.30, 0.48]
ADE (direct effect):    0.60   95% CI [0.42, 0.78]
Total Effect:           0.99   95% CI [0.83, 1.15]
Prop. Mediated:        0.40

Isso significa:

  • 0.39 unidades (≈40 %) do efeito total do tratamento em Y acontecem porque T aumenta M, que por sua vez aumenta Y.

  • 0.60 unidades (≈60 %) do efeito total vêm de mecanismos diretos, que não passam pelo mediador.

Resumo em uma frase

Essa etapa aplica o método mediate() para estimar formalmente o efeito direto, o efeito indireto (mediação) e a proporção mediada, fornecendo intervalos de confiança e p-valores que consolidam toda a análise causal.

Vamos interpretar esse relatório final de mediação em duas etapas:

explicando os números e trazendo um exemplo substantivo em Ciência Política.

  1. O que significam as estimativas
Medida Valor Interpretação
ACME (Average Causal Mediation Effect) 0.39 Efeito indireto: quanto do impacto do tratamento (T) em Y se dá por meio do mediador M.
ADE (Average Direct Effect) 0.60 Efeito direto: quanto do impacto de T em Y não passa pelo mediador M.
Total Effect 0.99 Soma de ACME + ADE: efeito total do tratamento sobre Y.
Prop. Mediated 0.39 Proporção do efeito total que é explicada pela via mediadora M.

As colunas de intervalo de confiança (95 %) mostram a incerteza das estimativas, e os p-valores muito pequenos (<2.2e-16) indicam que todos os efeitos são estatisticamente diferentes de zero.

Em palavras:

  1. Exemplo substantivo em Ciência Política

Imagine um estudo sobre participação política on-line:

Aplicando a interpretação dos números:

Efeito Explicação prática
ACME ≈ 0.39 Participar do debate aumenta o interesse político, e esse maior interesse leva a um acréscimo de ~0.4 ponto na intenção de votar.
ADE ≈ 0.60 Mesmo mantendo o interesse político fixo, a simples participação no debate gera um aumento direto de ~0.6 ponto na intenção de voto (por exemplo, por criar compromissos sociais, aumentar confiança no processo eleitoral ou dar maior visibilidade ao eleitor).
Total Effect ≈ 0.99 No conjunto, quem participa do debate tem, em média, um ponto a mais na intenção de votar do que quem não participa.
Prop. Mediated ≈ 0.39 Cerca de 40 % do impacto total decorre da via T → M → Y.
  1. Conclusão

O tratamento funciona de dois modos:

  1. Diretamente, gerando engajamento imediato.

  2. Indiretamente, ao aumentar o interesse político, que por sua vez eleva a intenção de votar.

Em termos de desenho de políticas públicas, isso mostra que uma intervenção voltada a despertar interesse político é uma peça importante (responde por 40 % do impacto), mas não esgota todo o caminho causal: o próprio ato de participar do debate também exerce um efeito direto e relevante.

Esse é exatamente o tipo de evidência que a análise de mediação busca: quais mecanismos explicam a eficácia de uma intervenção e em que proporção cada um contribui para o resultado final.

D. Usando o Mediation

O ‘mediate()’ possui comandos que permintem trazer o resultado de do ACE, ADE, Total Effect e Prob. mediated, caso não queira analisar pela tabela da regrassão.

Excelente ponto — o professor está mostrando como ligar os cálculos manuais com os resultados formais do mediate().

  1. NDE — Natural Direct Effect (ou ADE no mediate)
coef(out_model)["T"] ### isso corresponde ao NDE (efeito direto), que não passa pelo mecanismo
##         T 
## 0.6041279
summary(med_out)$z.avg ### Prova (ADE no mediate)
## [1] 0.6041279

No out_model (Y ~ T + M):

Esse é o coeficiente de T em Y quando controlamos M.

  • Interpretação: é o efeito de T sobre Y não passando pelo mediador.

  • No mediate(), esse mesmo número aparece como ADE (Average Direct Effect), acessado por: summary(med_out)$z.avg

  1. NIE — Natural Indirect Effect (ou ACME no mediate)
coef(med_model)["T"] * coef(out_model)["M"] 
##         T 
## 0.3914552
### isso correspondeo ao NIE (efeito indireto, que passa pelo mecanismo causal)
### reparem que é a porção de T que explica M com a porção de M que explica Y
summary(med_out)$d.avg ### Prova (ACME no mediate)
## [1] 0.3914552

É calculado como: coef(med_model)[“T”] * coef(out_model)[“M”]

  • coef(med_model)["T"]: efeito de T sobre M (primeiro modelo).

  • coef(out_model)["M"]: efeito de M sobre Y (segundo modelo).

  • O produto é o efeito indireto: quanto T aumenta M, que por sua vez aumenta Y.

  • No mediate(), esse valor aparece como ACME (Average Causal Mediation Effect): summary(med_out)$d.avg

  1. Por que fazer isso?
  • Para provar que a intuição “manual” bate com a estatística formal do pacote mediation.

  • O mediate() é mais robusto porque gera ICs via bootstrap e lida com não-linearidades, mas a essência está nessa conta simples.

  1. Em resumo
  • O professor está comparando:

    • NDE ≈ coef(T em Y | M) ↔︎ ADE no mediate()

    • NIE ≈ coef(T em M) × coef(M em Y) ↔︎ ACME no mediate()

  • Isso mostra que o modelo de mediação é, no fundo, uma decomposição de efeitos:

    Efeito Total = NDE+ NIE

Efeito Total

É o efeito total estimado do tratamento (T) sobre o resultado (Y), que combina tanto a parte direta quanto a indireta.

summary(med_out)$tau.coef
## [1] 0.9955831
#### OU melhor, NDE + NIE
coef(out_model)["T"] + coef(med_model)["T"] * coef(out_model)["M"] 
##         T 
## 0.9955831

Por que isso é importante?

Estamos mostrando que os três números fundamentais se encadeiam:

  • NDE / ADE = impacto direto de T em Y, não passando por M.

  • NIE / ACME = impacto indireto, via M.

  • Total Effect = soma dos dois.

Ou seja, o mediate() só formaliza aquilo que já está implícito nos dois modelos lineares (M ~ T e Y ~ T + M).

Resumo:

O efeito total pode ser obtido de duas maneiras:

  1. Diretamente com tau.coef do mediate().

  2. Ou decompondo como NDE + NIE.


    Essa é a prova de que a decomposição da mediação está funcionando corretamente.

E. Colocando os Coeficientes em um gráfico

ade.1 = coef(out_model)["T"]
ade.2 = summary(med_out)$z.avg
acme.1 = coef(med_model)["T"] * coef(out_model)["M"] 
acme.2 = summary(med_out)$d.avg
et.1 = summary(med_out)$tau.coef
et.2 = coef(out_model)["T"] + coef(med_model)["T"] * coef(out_model)["M"] 

df_est = tibble(
  Tipo = rep(c("NDE", "NIE", "Efeito Total"), each = 2),
  Estimativa = c(ade.1, ade.2, acme.1, acme.2, et.1, et.2),
  Método = rep(c("Regressão", "Mediação"), times = 3))

# Data frame
mediation_graph = ggplot(df_est, aes(x = Tipo, y = Estimativa, fill = Método)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.6), width = 0.5) +
  scale_fill_manual(values = c("Regressão" = "#0072B2", "Mediação" = "#D55E00")) + 
  labs(title = "Comparação entre estimativas de efeitos causais",
       x = "Tipo de Efeito",
       y = "Estimativa", 
       fill = "") +
  theme_minimal(base_size = 14) + 
  theme(axis.text.x = element_text(size = 10),
        axis.text.y = element_text(size = 12),
        axis.title = element_text(size = 14),
        plot.title = element_text(size = 14),
        plot.subtitle = element_text(size = 13),
        strip.text.x = element_text(size = 10),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        legend.text = element_text(size = 14),
        legend.position = "bottom")

mediation_graph


O que vemos no gráfico

  1. Efeito Total

    • As duas barras (laranja e azul) são praticamente idênticas, em torno de 1.

    • Isso mostra que tanto o método da mediação quanto o cálculo direto de regressão dão o mesmo efeito global do tratamento em Y.

  2. NDE (Natural Direct Effect)

    • Também coincidem (~0.6).

    • Indica que o efeito direto estimado pelo mediate() e pelo coeficiente de T no out_model são equivalentes.

  3. NIE (Natural Indirect Effect)

    • De novo, praticamente iguais (~0.39).

    • Ou seja, o efeito indireto (T→M→Y) é consistente tanto pelo cálculo manual (produto dos coeficientes) quanto pelo método formal de mediação.

Interpretação substantiva

  • Robustez: o gráfico demonstra que os resultados obtidos manualmente (regressões) e pelo pacote mediation convergem. Isso reforça que a decomposição em efeitos direto e indireto está correta.

  • Confiança: como os dois caminhos dão a mesma resposta, você pode interpretar os efeitos sabendo que não dependem do “jeito” de calcular.

  • Substantivamente:

    • O tratamento aumenta Y em ~1 unidade no total.

    • Desse total, ~0.6 vem de efeito direto, e ~0.39 via mediador.

    • Cerca de 40% do efeito total é explicado pelo mecanismo mediador.

Resumo em uma frase

O gráfico mostra que os efeitos total, direto e indireto estimados pelo modelo de mediação formal e pelo cálculo manual via regressão são praticamente idênticos — confirmando a validade da decomposição causal e dando mais confiança na interpretação dos mecanismos.