R Econometrics Skill
Core Packages
library(data.table) # Data manipulation
library(fixest) # Fixed effects estimation
library(modelsummary) # Regression tables
library(ggplot2) # Visualization
library(sf) # Spatial data
library(here) # Project paths
Data Manipulation (data.table)
# Read and assign
dt <- fread(here("data", "raw", "file.csv"))
# Common operations
dt[, new_var := old_var * 100] # Create variable
dt[, mean_y := mean(y, na.rm = TRUE), by = group] # Group operations
dt[year >= 2000 & treated == 1] # Filter
dt[, .(mean_y = mean(y), n = .N), by = group] # Summarize
dt[other_dt, on = .(id, year)] # Merge
# Lag/lead within groups
setorder(dt, id, year)
dt[, lag_y := shift(y, 1), by = id]
dt[, lead_y := shift(y, -1), by = id]
Estimation (fixest)
Basic Fixed Effects
# Two-way fixed effects
est1 <- feols(y ~ treatment + controls | id + year, data = dt)
# Clustered standard errors (default: fixed effect groups)
est2 <- feols(y ~ treatment | id + year, data = dt, cluster = ~state)
# IV regression
est3 <- feols(y ~ controls | id + year | endog ~ instrument, data = dt)
Difference-in-Differences
# Classic 2x2 DiD
est_did <- feols(y ~ treated:post | id + year, data = dt)
# Event study / dynamic effects
dt[, rel_time := year - treatment_year]
dt[, rel_time := fifelse(is.na(rel_time), -1000, rel_time)] # Never-treated
est_es <- feols(y ~ i(rel_time, ref = -1) | id + year, data = dt)
iplot(est_es) # Coefficient plot
Sun-Abraham / Callaway-Sant'Anna
# Sun-Abraham (requires cohort variable)
est_sa <- feols(y ~ sunab(cohort, year) | id + year, data = dt)
# Multiple estimators comparison
library(did) # Callaway-Sant'Anna
Tables Output
modelsummary
models <- list(
"OLS" = est1,
"With FE" = est2,
"IV" = est3
)
modelsummary(models,
stars = c('*' = 0.1, '**' = 0.05, '***' = 0.01),
coef_omit = "Intercept",
gof_omit = "AIC|BIC|Log",
output = here("output", "tables", "main_results.tex")
)