Grunnmodellen

I denne labben skal vi løse grunnmodellen numerisk. Dette er strengt tatt ikke nødvendig. Det er lett å finne en eksakt algebraisk løsning. Men det gir innsikt i hvordan vi tenker at ting egentlig fungerer.

Her er modellen:

Aggregert etterspørsel der kun C er endogen. Ingen skatt.

\(Z=C(Y) + I + G\)

Konsumfunksjonen:

\(C=a*Y+b\)

Likevektsbetingelsen:

\(Y=Z\)

Numerisk grunnmodellen

Måten vi skal løse modellen numerisk, er å skape en rekke funksjoner, som tar en innputt og da sender tilbake (“returns”) en output.

Vi begynner med aggregert etterspørsel. Her tar det parameterene til konsumfunksjonen pluss I og G, summer tallene og sender det tilbake.

Zfunc = function(Y, I=1, G=1, a=.5, b=0){
  Z = Cfunc(Y, a, b) + I + G
  return(Z)
}

Konsumfunksjonen, tar parameterene a og b pluss BNP (Y) og sender tilbake konsum.

Cfunc = function(Y, a, b){
  return(a*Y+b)
}

Dette er den viktigiste funksjonen. Denne definerer likevektsbetingelsen. Her er BNP (Y), aggregert etterspørsel (Z), I, G innput, plus en feilmargin, e.

Funksjonen har to trinn i form av en “if-else” spørsmål.

Først, spør funksjonen om BNP er likt aggregert etterspørsel (innenfor en bestemt feilmargin (e)). Hvis det er det, så er funksjonen ferdig, og printer “Likevekt!”

Hvis BNP ikke er likt aggregert etterspørsel, så går vi til “else” delen av koden. Her blir BNP printet ut, Vi setter BNP (production) til å være lik etterspørsel. Deretter finner vi en ny etterspørsel med vår ny BNP tall. Deretter, kaller vi vår likevektsfunksjon igjen.

Denne funksjonen vil fortsette å kalle seg selv fram til likevektsbetingelsen er nådd: at BNP er likt aggregert etterspørsel.

likevekt = function(Y, Z, I, G, e=.001){
  if((Y<(Z+e)) & (Y>(Z-e))){
    print(c("Likevekt! ", Y))
    #return(Y)
  }
  else{
    print(Y)
    Y=Z
    Z = Zfunc(Y, I, G)
    likevekt(Y=Y, Z=Z, I=I, G=G)
  }
}

Her kjører vi vår modell. Du kan lege med ulike antakelser, parametere om du ønsker.

#Parametre
#a=.5 #Konsumtilbøyelighet
#b=0

#Eksogen
G = 10
I= 10

#Endogen
Y_init = 30
Z_init = Zfunc(Y_init, I, G)
#og C
likevekt(Y=Y_init, Z=Z_init, I, G)
## [1] 30
## [1] 35
## [1] 37.5
## [1] 38.75
## [1] 39.375
## [1] 39.6875
## [1] 39.84375
## [1] 39.92188
## [1] 39.96094
## [1] 39.98047
## [1] 39.99023
## [1] 39.99512
## [1] 39.99756
## [1] "Likevekt! "      "39.998779296875"

Sjekk at dette stemmer med den eksakte løsningen.

Nå, endre G fra 10 til 20.

#Eksogen
G = 20
I= 10

#Endogen
Y_init = 40
Z_init = Zfunc(Y_init, I, G)
#og C
likevekt(Y=Y_init, Z=Z_init, I, G)
## [1] 40
## [1] 50
## [1] 55
## [1] 57.5
## [1] 58.75
## [1] 59.375
## [1] 59.6875
## [1] 59.84375
## [1] 59.92188
## [1] 59.96094
## [1] 59.98047
## [1] 59.99023
## [1] 59.99512
## [1] 59.99756
## [1] "Likevekt! "      "59.998779296875"