(Keep working in the R script from Exercise 1 — you already have the prepared APAD data. The "Stuck?" box is in Exercise 1.)

  1. The APAD data contains a variable antidiscr_law. It asks respondents how good or bad they think it is for a country to have a law against ethnic discrimination in the workplace. The answer categories are: (1) Very bad, (2) Bad, (3) So/so, (4) Good, (5) Very good.
    Use the APAD survey experiment to estimate the causal effect of reading a news article about discrimination on support for anti-discrimination policy. Estimate z-standardized effects.
APAD <- APAD %>%
  mutate( # Standardize 'antidiscr_law' variable
    z_antidiscr_law = scale(antidiscr_law) %>% as.numeric())

zols <- lm_robust( # Weighted OLS on the survey experiment
  z_antidiscr_law ~ article,
  weights = gewFAKT,
  data = APAD
)

modelsummary( # Regression table with stars and fit statistics
  list("Anti-discr. law" = zols),
  stars = TRUE,
  gof_map = c("nobs", "r.squared")
)
Anti-discr. law
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
(Intercept) -0.140
(0.108)
articleTreat_1 -0.031
(0.156)
articleTreat_2 0.214
(0.139)
Num.Obs. 1060
R2 0.011
  1. What is the causal effect of reading news about discrimination on supporting anti-discrimination policy? The causal effect is: (three digits; point or comma is fine). What is the estimated standard error of this \(\hat{\beta}\)? . What do these two statistics suggest about a causal effect?

Reading the discrimination article increased support for anti-discrimination law by -0.03 standard deviations. That estimate is about -0.2 times its standard error (0.16) — much larger than chance alone would produce, so we take it as evidence of a real (and because of randomization: causal) effect.

  1. What is the causal effect of reading news about integration on supporting anti-discrimination policy? The causal effect is: . What is the estimated standard error of this \(\hat{\beta}\)? . What do these two statistics suggest about a causal effect?

The estimate (0.21 standard deviations) is only about 1.5 times its standard error (0.14) — a difference this small arises easily by chance, so the experiment gives no convincing evidence that the integration article changed support.

  1. Make a coefficient plot to visualize these results. Use an AI like ChatGPT or Google Gemini to help you if you get stuck.
(plotdata <- zols %>% # Prepare data for plotting
  tidy() %>% # Convert regression results to a tidy data frame
  filter(term != "(Intercept)") %>% # Remove the intercept term
  mutate( # Rename treatment variables for clarity
    term = case_when(
      term == "articleTreat_1" ~ "Discrimination",
      term == "articleTreat_2" ~ "Acculturation")))
#             term estimate std.error statistic p.value conf.low conf.high   df         outcome
# 1 Discrimination   -0.031      0.16      -0.2    0.84   -0.336      0.27 1057 z_antidiscr_law
# 2  Acculturation    0.214      0.14       1.5    0.12   -0.059      0.49 1057 z_antidiscr_law
# Create the plot
ggplot(data = plotdata, aes(y = estimate, x = term)) +
  geom_hline(yintercept = 0, color = "orange",
             lty = "dashed") + # Add a horizontal line at y=0
  # Plot point estimates and confidence intervals
  geom_pointrange(aes(min = conf.low, max = conf.high)) +
  coord_flip() + # Flip coordinates for horizontal display
  labs(title = "Causal effect of news articles",
       x = "Article on",
       y = "Comparison to control group (article on Venus)
    in standard deviations",
    caption = "Note: Results are based on a weighted OLS with robust standard errors.
    N = 1085, and R2 = 0.012.") +
  theme_minimal() # Use a minimal theme for clean appearance