Skip to content

Instantly share code, notes, and snippets.

@andrewheiss
Created November 6, 2019 21:53
Show Gist options
  • Save andrewheiss/72986ccaadceaea6454c998d835acf28 to your computer and use it in GitHub Desktop.
Save andrewheiss/72986ccaadceaea6454c998d835acf28 to your computer and use it in GitHub Desktop.
library(tidyverse)
library(broom)
library(huxtable)
library(estimatr)
library(fabricatr)

set.seed(1234)
dat <- fabricate(
  N = 40,
  Y = rpois(N, lambda = 4),
  Z = rbinom(N, 1, prob = 0.4),
  D  = Z * rbinom(N, 1, prob = 0.8),
  X = rnorm(N),
  G = sample(letters[1:4], N, replace = TRUE)
)

# Manual way
model_first <- lm(D ~ Z + X, data = dat)

dat_updated <- augment_columns(model_first, dat) %>% 
  rename(D_hat = .fitted)

model_second <- lm(Y ~ D_hat + X, data = dat_updated)

# Automatic way
model_automatic <- iv_robust(Y ~ D + X | Z + X, data = dat)

huxreg(list("First stage" = model_first, 
            "Second stage" = model_second, 
            "Second stage (auto)" = model_automatic))
──────────────────────────────────────────────────────────────────
                First stage   Second stage   Second stage (auto)  
              ────────────────────────────────────────────────────
  (Intercept)     0.000          3.750 ***             3.750 ***  
                 (0.030)        (0.366)               (0.385)     
  Z               0.917 ***                                       
                 (0.054)                                          
  X              -0.001          0.644 *               0.644 *    
                 (0.026)        (0.309)               (0.281)     
  D_hat                         -0.482                            
                                (0.717)                           
  D                                                   -0.482      
                                                      (0.597)     
              ────────────────────────────────────────────────────
  N              40             40                    40          
  R2              0.885          0.113                 0.114      
  logLik         18.761        -80.932                            
  AIC           -29.522        169.864                            
──────────────────────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.                         
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment