Innledning

Oppgave 1

Oppgave 1a

Tanken bak IRFen er at et sjokk kan ha en effekt på responsvariabelen vår lenge etter at det inntraff. IRFen kvantifiserer hvor mye et sjokk endrer forventningsverdien til \(Y\), \(k\) tidsenheter frem i tid. Ved å regne ut IRFen for forskjellige \(k\) kan vi derfor få informasjon om hvordan sjokket påvirker forventningsverdien på ulike tidshorisonter. Dersom IRFen f.eks er positiv vil et sjokk øke forventningsverdien til \(Y\), \(k\) tidsenheter frem i tid.

Oppgave 1b

\[\begin{equation} \begin{split} \text{IRF}(k) &= E(Y_{t + k}\mid \text{sjokk}_t = 1\:\text{og}\: Y_t = a) - E(Y_{t + k}\mid \text{sjokk}_t = 0\:\text{og}\: Y_t = a)\\ &= E(\alpha + \beta_1 \text{sjokk}_t + \beta_2 Y_t + \epsilon_{t + k} \mid \text{sjokk}_t = 1\:\text{og}\: Y_t = a) - E(\alpha + \beta_1 \text{sjokk}_t + \beta_2 Y_t + \epsilon_{t + k} \mid \text{sjokk}_t = 0\:\text{og}\: Y_t = a)\\ &= \alpha + \beta_1\times 1 + \beta_2 \times a + 0\\ &- \left[\alpha + \beta_1\times 0 + \beta_2 \times a + 0\right]\\ &= \beta_1 \end{split} \end{equation}\]

Oppgave 2

reg1 <-  lm(lead_5_ln_gdp ~ country + ln_gdp + pandemic_01 + lag_1_pandemic_01 + year,
     data = df)

reg2 <-  lm(lead_5_ln_gdp ~ country  + ln_gdp + pandemic_01 + lag_1_pandemic_01 + year +
       war + lag_1_war,
     data = df)

reg3 <-  lm(
    lead_5_ln_gdp ~ country  + ln_gdp+ pandemic_01 + lag_1_pandemic_01 + year + war + lag_1_war
    + vienna + oil + ww2 + vienna_t + oil_t + ww2_t ,
    data = df
  )

Oppgave 2a

stargazer::stargazer(reg1, reg2, reg3, type = "html", omit = "country")
Dependent variable:
lead_5_ln_gdp
(1) (2) (3)
ln_gdp 1.000*** 0.999*** 0.878***
(0.002) (0.002) (0.005)
pandemic_01 0.016* 0.017* 0.022**
(0.009) (0.009) (0.009)
lag_1_pandemic_01 0.016* 0.015 0.021**
(0.009) (0.009) (0.009)
year 0.0001*** 0.0001*** 0.0001***
(0.00001) (0.00001) (0.00001)
war -0.016*** -0.015***
(0.004) (0.004)
lag_1_war 0.007* 0.002
(0.004) (0.004)
vienna -2.194***
(0.146)
oil 0.823
(1.110)
ww2 -2.584***
(0.970)
vienna_t 0.001***
(0.0001)
oil_t -0.0005
(0.001)
ww2_t 0.001***
(0.0005)
Constant -0.217*** -0.204*** 0.789***
(0.020) (0.021) (0.038)
Observations 9,637 9,637 9,637
R2 0.985 0.985 0.987
Adjusted R2 0.985 0.985 0.987
Residual Std. Error 0.124 (df = 9600) 0.124 (df = 9598) 0.116 (df = 9592)
F Statistic 17,794.570*** (df = 36; 9600) 16,878.940*** (df = 38; 9598) 16,916.350*** (df = 44; 9592)
Note: p<0.1; p<0.05; p<0.01

I alle regresjonene inkluderer vi \(\alpha_i,Y_{i,t}\) og \(P_{i,t}\) som forklaringsvariabler. Forskjellen mellom i og ii er at i ii inkluderer vi også \(W_{i,t-1}\) og \(W_{i,t-1}\). Dette innebærer at vi i ii betinger på krig i inneværende og forrige periode, mens vi i i lar dette ligge i feilledet. Dette endrer tolkningen av koeffisientene, ettersom effekten av \(W_{i,t},W_{i,t-1}\) delvis vil fanges opp av koeffisienten til \(P_{i,t}\) dersom \(W_{i,t},W_{i,t-1}\) forklarer \(Y_{i,t+k}\) og \(W_{i,t}\) eller \(W_{i,t-1}\) er korrelert med \(P_{i,t}\). Tolkningen av \(\beta_1\) i ii er dermed den forventede økningen i \(Y_{i,t+k}\) for en enhets økning i \(P_{i,t}\) for gitte verdier av \(W_{i,t},W_{i,t-1}\).

Tilsvarende på modell iii legges det til forklaringsvariabler som gjør at både nivåer og trender kan endres tre ulike tider i tidsserien, mens det i modell i og ii ligger til grunn et fast konstantledd pr. land og en felles lineær trend.

Usikkerheten i de estimerte modellene er så stor at det ikke er noen særlig praktisk forskjell i størrelsen på de estimerte verdiene til \(\hat{\beta_1}\). For modellvaliditeten sin del er det noe tvilsomt når koeffisienten til \(Y_{t}\) er så nær 1 i modell i og ii. Da er dette bortimot en “random walk” og det er stor fare for at man får meningsløse resultater. Hvorvidt det å legge til mer fleksible trender kan gjøre resultatene mer pålitelige er kanskje noe mer usikkert, men er gjort i S2020.

Oppgave 2b

Her er det mest relevante sammenlikningsgrunnlaget S2020 figur 9. Modell III gir en økning i BNP på \(\beta_1 \times 100\) % = 2.2 % 5 år etter en pandemi. I figuren er anslaget litt i underkant av dette, altså ligner resultatene i stor grad.

Oppgave 2c

Vi kan kjøre en enkel diagnostikk:

plot(reg3)

lmtest::dwtest(reg3)
## 
##  Durbin-Watson test
## 
## data:  reg3
## DW = 0.53196, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
plot(acf(reg3$residuals))

Figurene over viser samlet sett en ganske dårlig modelltilnærming. Kanskje de viktigste er:

  • Ikke normalfordelte residualer (ref: QQ-normalplott)
  • Det er autokorrelasjon i feilleddet (her også testet med en Durbin-Watson test). Modellen klarer altså ikke å fange opp hvordan BNP utvikler seg i tid, selv etter justering for lineære trender og inkludering av BNP ved tid \(t\) som forklaringsvariabel.
  • Ut fra residualplottet kan vi se antydninger til heteroskedastisitet ved variansen til residualene avtar når BNP øker.

Oppgave 3

La oss for enkelthetsskyld se bort fra alle forklaringsvariabler bortsett fra \(W_{i,t}\) i modellen (Konklusjonen gjelder ellers også) slik at den “sanne” modellen når \(U_i\) inkluderes faktisk er

\[Y_{i,t + 5} = \alpha_i + \beta_0 + \beta_3 W_{i,t} + \delta U_{i,t} + \epsilon_{i,t} \] Setter vi inn \(\delta_0 + \delta_1W_{i,t} + \eta_{i,t}\) for \(U_{i,t}\) får vi at den sanne modellen kan skrives som:

\[Y_{i,t + 5} = \alpha_i + \beta_0 + \beta_3 W_{i,t} + \delta (\delta_0 + \delta_1W_{i,t} + \eta_{i,t}) + \epsilon_{i,t}\\ = \alpha_i + (\beta_0 +\delta\delta_0) + (\beta_3 + \delta\delta_1)W_{i,t} + (\epsilon_{i,t} + \delta\eta_{i,t}) \\ =\alpha_i + \beta^*_0 + \beta^*_3W_{i,t} + \epsilon^*_{i,t}\]

Det betyr at når vi utelater \(U_{i,t}\) fra modellen så vil estimatet \(\hat{\beta}_3^{OLS}\) faktisk være et estimat av \(\beta^*_3 = \beta_3 + \delta\delta_1\), som da ikke er effekten av krig alene, men også den indirekte effekten av den utelatte variabelen \(U_{i,t}\). \(\hat{\beta}_3^{OLS}\) er derfor både forventningsskjev og inkonsistent (dvs vi kan ikke forvente at verdien nærmer seg den sanne verdien selv når datasettet blir meget stort). Mer spesifikt, ut fra formelen for \(\beta^*_3\) ser vi at dersom \(\delta\) og \(\delta_1\) er positive vil vi overestimere den sanne effekten (\(\beta_3\)).

OBS: I oppgaveteksten mangler \(\beta_0\) i den sanne modellen. Dette ble det sendt ut melding om på Canvas. De som har løst oppgaven uten denne vil selvsagt ikke få noen trekk. Utrykket for \(\beta^*_3\) blir uansett det samme.

Oppgave 4

I datasettet studentene har fått kan man enkelt beregne impuls responser ved å gjenta en av regresjonene over, men med ulike leads på den avhengige variabelen. I det utleverte datasettet har studentene verdiene 2,5,8,11,14 og 17I koden under kjøres fire av variantene, der vi kan lese impuls-responsen direkte ut fra tabellen på koeffisientene til pandemic_01:

reg_2 <-
  df %>%
  lm(
    lead_2_ln_gdp ~ country  + ln_gdp + pandemic_01 + lag_1_pandemic_01 + year + war + lag_1_war
    + vienna + oil + ww2 + vienna_t + oil_t + ww2_t ,
    data = .
  )
reg_5 <-
  df %>%
  lm(
    lead_5_ln_gdp ~ country  + ln_gdp + pandemic_01 + lag_1_pandemic_01 + year + war + lag_1_war
    + vienna + oil + ww2 + vienna_t + oil_t + ww2_t ,
    data = .
  )
reg_8 <-
  df %>%
  lm(
    lead_8_ln_gdp ~ country  + ln_gdp + pandemic_01 + lag_1_pandemic_01 + year + war + lag_1_war
    + vienna + oil + ww2 + vienna_t + oil_t + ww2_t ,
    data = .
  )
reg_11 <-
  df %>%
  lm(
    lead_11_ln_gdp ~ country  + ln_gdp + pandemic_01 + lag_1_pandemic_01 + year + war + lag_1_war
    + vienna + oil + ww2 + vienna_t + oil_t + ww2_t ,
    data = .
  )
stargazer::stargazer(reg_2,reg_5,reg_8,reg_11, type="html", omit="country")
Dependent variable:
lead_2_ln_gdp lead_5_ln_gdp lead_8_ln_gdp lead_11_ln_gdp
(1) (2) (3) (4)
ln_gdp 0.942*** 0.878*** 0.829*** 0.795***
(0.003) (0.005) (0.006) (0.006)
pandemic_01 0.017*** 0.022** 0.034*** 0.041***
(0.006) (0.009) (0.010) (0.011)
lag_1_pandemic_01 0.004 0.021** 0.029*** 0.025**
(0.006) (0.009) (0.010) (0.011)
year 0.00004*** 0.0001*** 0.0001*** 0.0001***
(0.00001) (0.00001) (0.00002) (0.00002)
war -0.011*** -0.015*** -0.013*** -0.001
(0.003) (0.004) (0.005) (0.005)
lag_1_war 0.001 0.002 0.009* 0.004
(0.003) (0.004) (0.005) (0.005)
vienna -0.939*** -2.194*** -3.255*** -4.215***
(0.102) (0.146) (0.171) (0.188)
oil 0.476 0.823 -0.245 -5.547***
(0.761) (1.110) (1.341) (1.535)
ww2 -1.344** -2.584*** -3.214*** -0.367
(0.683) (0.970) (1.132) (1.239)
vienna_t 0.001*** 0.001*** 0.002*** 0.002***
(0.0001) (0.0001) (0.0001) (0.0001)
oil_t -0.0003 -0.0005 0.0001 0.003***
(0.0004) (0.001) (0.001) (0.001)
ww2_t 0.001** 0.001*** 0.002*** 0.0003
(0.0003) (0.0005) (0.001) (0.001)
Constant 0.376*** 0.789*** 1.084*** 1.295***
(0.026) (0.038) (0.044) (0.049)
Observations 9,773 9,637 9,512 9,405
R2 0.994 0.987 0.983 0.979
Adjusted R2 0.994 0.987 0.983 0.979
Residual Std. Error 0.081 (df = 9728) 0.116 (df = 9592) 0.135 (df = 9467) 0.147 (df = 9360)
F Statistic 34,655.680*** (df = 44; 9728) 16,916.350*** (df = 44; 9592) 12,263.400*** (df = 44; 9467) 10,131.410*** (df = 44; 9360)
Note: p<0.1; p<0.05; p<0.01

For kompletthetens skyld kan vi reprodusere figur 9 i paperet, og i tillegg også tegne impuls responsen til War. I det store og det hele er det resultatene meget like, til tross for at modellen her er betydelig enklere. Det er ikke forventet at studentene gjør dette - besvarelser som kun bruker variablene som er levert i oppgaven vil kunne få full uttelling.

runreg <-
  function(h, df) {
    df_raw %>%
      select(country, year, ln_gdp, pandemic_01, pandemic_pc, war) %>%
      mutate(country = factor(country)) %>%
      group_by(country) %>%
      mutate(
        lead_ln_gdp = lead(ln_gdp, h, order_by = year),
        lag_1_pandemic_01 = lag(pandemic_01, 1, order_by = year),
        lag_1_war = lag(war, 1, order_by = year),
        vienna = case_when(year >= 1815 ~ 1, TRUE ~ 0),
        ww2 = case_when(year >= 1945 ~ 1, TRUE ~ 0),
        oil = case_when(year >= 1973 ~ 1, TRUE ~ 0),
        vienna_t = vienna * year,
        ww2_t = ww2 * year,
        oil_t = oil * year
      ) %>%
      ungroup %>%
      lm(
        lead_ln_gdp ~ country + ln_gdp + pandemic_01 + lag_1_pandemic_01 + year + war + lag_1_war
        + vienna + oil + ww2 + vienna_t + oil_t + ww2_t ,
        data = .
      ) %>%
      summary %>%
      .$coefficients %>%
      as.data.frame() %>%
      rownames_to_column() %>%
      as_tibble %>%
      mutate(h = h)
  }

lapply(0:40, FUN = runreg, df = df) %>%
  bind_rows() %>%
  filter(rowname %in% c("pandemic_01", "war")) %>%
  ggplot(aes(x = h)) +
  geom_line(aes(y = Estimate * 100)) +
  geom_ribbon(aes(
    ymin = (Estimate - 1.96 * `Std. Error`) * 100,
    ymax = (Estimate + 1.96 * `Std. Error`) * 100
  ), alpha = .1) +
  geom_hline(yintercept = 0) +
  xlab("Fcast horizon") +
  ylab("Impulse response, percent") +
  ggtitle("Estimated impulse response of pandemics and wars on GDP pr capita") +
  facet_wrap( ~ rowname, scales = "free_y") +
  theme_classic()
## Warning in summary.lm(.): essentially perfect fit: summary may be unreliable

  • Dersom casen i Oppgave 3 faktisk stemmer og det finnes en slik uobservert variabel er det klart at vi i liten grad kan stole på at estimatene fra modellen fanger opp den kausale effekten av pandemier på BNP per capita. Det er ikke mulig for oss å teste om det finnes en slik utelatt variabel, og eventuelt om den vil endre resultatene - med mindre vi kan kjøre randomiserte eksperimenter. Dermed er vi til syvende og sist avhengig av om vi tror på om resultatene er gyldig eller ikke.
  • Fra 4 har vi at vi klarer å reprodusere figurene fra paperet - men dette påvirker ikke innvendingen over.

I denne oppgaven relativt åpen og vi er derfor åpne for gode diskusjoner i besvarelsen.