## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "figures/with-fixest-"
)
set.seed(1)

## ----message = FALSE----------------------------------------------------------
library(ivcheck)
library(fixest)

## -----------------------------------------------------------------------------
data(card1995)
head(card1995[, c("lwage", "educ", "college", "near_college",
                  "age", "black", "south")])

## -----------------------------------------------------------------------------
m_uncond <- feols(
  lwage ~ 1 | college ~ near_college,
  data = card1995
)
summary(m_uncond)

## -----------------------------------------------------------------------------
chk <- iv_check(m_uncond, n_boot = 500, parallel = FALSE)
print(chk)

## ----fig.width = 6, fig.height = 4--------------------------------------------
k <- iv_kitagawa(m_uncond, n_boot = 500, parallel = FALSE)
hist(k$boot_stats, breaks = 40,
     main = "Kitagawa bootstrap distribution (Card 1995, no controls)",
     xlab = "sqrt(n) * positive-part KS")
abline(v = k$statistic, col = "red", lwd = 2)

## -----------------------------------------------------------------------------
m_cond <- feols(
  lwage ~ age | college ~ near_college,
  data = card1995
)

## ----error = TRUE-------------------------------------------------------------
try({
iv_kitagawa(m_cond, n_boot = 100, parallel = FALSE)
})

## -----------------------------------------------------------------------------
mw <- iv_mw(m_cond, n_boot = 200, parallel = FALSE)
print(mw)

## -----------------------------------------------------------------------------
iv_check(m_cond, n_boot = 200, parallel = FALSE)

## ----error = TRUE-------------------------------------------------------------
try({
m_multi <- feols(
  lwage ~ age + black + south | college ~ near_college,
  data = card1995
)
iv_check(m_multi, n_boot = 100, parallel = FALSE)
})

## ----eval = FALSE-------------------------------------------------------------
# library(modelsummary)
# modelsummary(
#   list("IV estimate" = m_cond),
#   gof_custom = list(
#     "Mourifie-Wan 2017 p-value" = sprintf("%.3f", mw$p_value)
#   )
# )

## ----eval = FALSE-------------------------------------------------------------
# library(fixest)
# library(ivcheck)
# 
# # ... data loading ...
# 
# # IV estimate (conditional on a single control)
# m <- feols(y ~ x | d ~ z, data = df)
# 
# # IV validity diagnostic
# chk <- iv_check(m)
# 
# # Report both in the paper
# knitr::kable(chk$table)

