23.11.2023 IV Regression

Maps

library(sf)
Linking to GEOS 3.8.1, GDAL 3.2.1, PROJ 7.2.1; sf_use_s2() is TRUE
library(tidyverse)
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
✔ ggplot2 3.3.5     ✔ purrr   0.3.4
✔ tibble  3.1.5     ✔ dplyr   1.0.7
✔ tidyr   1.1.4     ✔ stringr 1.4.0
✔ readr   2.0.2     ✔ forcats 0.5.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(terra)
Warning: Paket 'terra' wurde unter R Version 4.1.2 erstellt
terra 1.5.12

Attache Paket: 'terra'
Das folgende Objekt ist maskiert 'package:dplyr':

    src
Das folgende Objekt ist maskiert 'package:purrr':

    simplify
Das folgende Objekt ist maskiert 'package:tidyr':

    extract
Das folgende Objekt ist maskiert 'package:ggplot2':

    arrow

import the sf dataset

World <- read_sf("data/shape/shapecountries.shp")

plot the shapes

ggplot(World) + 
  geom_sf()

Subsetting on smaller regions with ext(longitude_min, longitude_max, latitude_min, latitdue_max)

world_v <- vect(World)
coords_subset <- ext(5.0, 23, 47, 56)
europe <- crop(world_v, coords_subset)

europe_sf <- st_as_sf(europe)

Plot it again

ggplot(europe_sf) + 
  geom_sf()

IV Regression

to control for omitted variable which is exogenous with error term

=> OLS does not work

Solution:

  • replace with instrument variable that correlets to explanatory variable
  • IV should be exogenous
  • and relevant in explaining variation
  1. stage:
  • \(x = \gamma + \delta instrument + e\)
  • leads to \(\hat{x} = \hat{\gamma} + \hat{delta} instrument + residual\)
  1. Stage: \(y = a + b \hat{x} + e\)

How to do in R:

library(AER)
Warning: Paket 'AER' wurde unter R Version 4.1.2 erstellt
Lade nötiges Paket: car
Lade nötiges Paket: carData

Attache Paket: 'car'
Das folgende Objekt ist maskiert 'package:dplyr':

    recode
Das folgende Objekt ist maskiert 'package:purrr':

    some
Lade nötiges Paket: lmtest
Lade nötiges Paket: zoo

Attache Paket: 'zoo'
Das folgende Objekt ist maskiert 'package:terra':

    time<-
Die folgenden Objekte sind maskiert von 'package:base':

    as.Date, as.Date.numeric
Lade nötiges Paket: sandwich
Warning: Paket 'sandwich' wurde unter R Version 4.1.2 erstellt
Lade nötiges Paket: survival
load("data/dataset_AJR2001.Rdata")
head(data)
ivreg(logpgp95 ~avexpr | logem4, data = data)

Call:
ivreg(formula = logpgp95 ~ avexpr | logem4, data = data)

Coefficients:
(Intercept)       avexpr  
     2.3702       0.8684  

=> R2 is not relevant for IV Regression!