tab_order <- summary_df |> arrange(ate_std) |> pull(tab)
plot_df <- item_df |>
left_join(summary_df |> select(tab, ate_std, sig_il_hte), by = "tab") |>
mutate(
y_pos = as.integer(factor(tab, levels = tab_order)),
sig_label = if_else(sig_il_hte, "Significant", "Not significant"),
color_val = if_else(sig_il_hte, irw_blue, irw_red)
)
ate_df <- summary_df |>
mutate(
y_pos = as.integer(factor(tab, levels = tab_order)),
sig_label = if_else(sig_il_hte, "Significant", "Not significant"),
color_val = if_else(sig_il_hte, irw_blue, irw_red),
hover_text = paste0(
"<b>", tab, "</b><br>",
"ATE: ", round(ate_std, 3), " SD<br>",
"σζ: ", round(sigma_zeta_std, 3), " SD<br>",
"ρ: ", round(rho, 2), "<br>",
"Items: ", n_items, "<br>",
"N: ", n_persons, "<br>",
"Sig. IL-HTE: ", sig_il_hte
)
)
fig <- plot_ly() |>
add_trace(
data = plot_df,
x = ~total_std,
y = ~y_pos,
type = "scatter",
mode = "markers",
marker = list(size = 4, opacity = 0.4),
color = ~sig_label,
colors = c("Significant" = irw_blue, "Not significant" = irw_red),
hoverinfo = "none",
showlegend = TRUE
) |>
add_trace(
data = ate_df,
x = ~ate_std,
y = ~y_pos,
type = "scatter",
mode = "markers",
marker = list(size = 10, line = list(width = 1, color = "white")),
color = ~sig_label,
colors = c("Significant" = irw_blue, "Not significant" = irw_red),
text = ~hover_text,
hoverinfo = "text",
showlegend = FALSE
) |>
layout(
height = max(400, nrow(summary_df) * 14),
xaxis = list(title = "Item-specific treatment effect (SDs)",
zeroline = TRUE, zerolinecolor = "#aaa", zerolinewidth = 1),
yaxis = list(title = "", showticklabels = FALSE, showgrid = FALSE),
legend = list(orientation = "h", x = 0, y = -0.05),
margin = list(l = 20)
)
fig