Dolo.jl in JuliaBox


#1

Hi everyone,

I am a first year undergrad with little to no programming experience so I apologise for asking such naive questions. Yesterday I discovered Dolo.jl and I very much want to play around with it. However, I am having some difficulties setting it up. What I have done so far:

Since I am using JuliaBox I added Dolo using the package builder and after a while the bar turned green. I then found an example model here. But when I try to run the code I get the error

syntax: line break in “:” expression

Stacktrace:
[1] include_string(::String, ::String) at ./loading.jl:522

I started with using Dolo and then pasted one of the example codes.

I am quite embarrassed to be asking this question seeing as this forum consists of highly advanced economists but hopefully someone can point me in the right direction.


#2

Hi @Gensys,

No worries. The purpose of the forum is exactly to help answer questions like this!

Two comments:

  • I tried to use Dolo.jl on juliabox the other day and it didn’t work for me. I have been able to get it to work on an old version of JuliaBox now running at https://v1.juliabox.com
  • If you post the code you tried to run we would be better able to help. include_string is what IJulia uses to run any code, so you would see that as the first entry of any stacktrace in a jupyter notebook.

#3

Thanks for the reply and the encouraging words @spencer.lyon :slight_smile:

Here is the code I ran:

using Dolo
using PlotlyJS
using AxisArrays


symbols:
states: [k, tau_c, tau_k]
controls: [c]
exogenous: [g, exog_tau_c, exog_tau_k]
parameters: [beta, gamma, delta, alpha, A]

definitions:
# Equations from 11.6.8
eta: alpha*A*k^(alpha-1)
w: A*k^alpha - k*eta
Rb: (1+tau_c)/(1+tau_c(1))*((1-tau_k(1)) * (alpha*A*k(1)^(alpha-1) - delta) + 1.)

equations:

arbitrage:
    # Equation 11.6.3
    - 1 = beta*(c(+1)/c)^(-gamma)*(1+tau_c)/(1+tau_c(1))*((1-tau_k(1))*(eta(1)-delta) + 1) | 0 <= c <= inf

    transition:
    # Equation 11.6.1
    - k = A*k(-1)^alpha+(1-delta)*k(-1)-c(-1)-g
    # We have the states tau_c and tau_k just follow exactly the sequence
    # of shocks that we supply.
    - tau_c = exog_tau_c
    - tau_k = exog_tau_k


calibration:
# parameters
beta: 0.95
gamma: 2.0
delta: 0.2
alpha: 0.33
A: 1.
tau_c: 0.0
tau_k: 0.0
exog_tau_c: 0.0
exog_tau_k: 0.0
tau_c: exog_tau_c
tau_k: exog_tau_k
g: 0.2

    # steady_state
k: ((1/beta - 1 + delta)/alpha)^(1/(alpha-1))
c: k^alpha - delta*k - g
eta: alpha * A * k ^ (alpha - 1)
w: A * k ^ alpha - k * eta
Rb: (1-tau_k) * (alpha*A*k^(alpha-1) - delta) + 1.0


domain:
k: [0.5*k, 1.5*k]
tau_c: [0.5*tau_c, 1.5*tau_c]
tau_k: [0.5*tau_k, 1.5*tau_k]

exogenous: !VAR1 
rho: 0.9
Sigma: [[1.0, 0.0, 0.0],
        [0.0, 1.0, 0.0],
        [0.0, 0.0, 1.0]]
N: 3

options:
grid: !Cartesian
    orders: [40, 10, 10]

I just wanted to try an example piece of code to see if I could get Dolo to work. I have not tried to understand what we are trying to model here. I will try using the older version of JuliaBox and see if I can get it to work.

Thanks once again for your help.


#4

Ahh so the problem here is that you have tried to copy and paste the model definition directly in to your Julia session.

Starting from symbols: everything in your snippet needs to to be in a separate file.

Notice how in the rmt3_ch11.ipynb file here we say model = yaml_import("../models/rmt3_ch11.yaml"), meaning load the file in rmt3_ch11.yaml found one directory (folder) up and then in the models folder.

You can also, however, load models directly from a url. You can change your example code to


using Dolo
using PlotlyJS
using AxisArrays

url = string(
    "https://raw.githubusercontent.com/EconForge/Dolo.jl/",
    "1203a43cf1c46cb14fc78dcecde320673f3a7311/examples/models/rmt3_ch11.yaml"
)
model = yaml_import(url)

#5

Thank you once again @spencer.lyon, I really appreciate the help. I think I understand how to loadmodels from the url. However, as I want to use Dolo for models I have constructed myself, I just want to make sure I understand how save things properly.

So I create a folder which contains each section (i.e symbols, definitions, equations etc) in a separate file (each of them saved as .ipynb). In the example you provided this folder is named models. In the same folder I create a new notebook named rmt3_ch11.yaml. And this is where I can do experiments (such as create IRF’s) with the model. Am I on the right track now?


#6

Nope, not quite. I recommend reading through the Dolo.jl documentation

I’ll summarize key points here:

  • To write a model yourself you need to have a single yaml file containing the model. For example, I could create my_model.yaml
  • In this file you need to specify the following sections: symbols, equations, calibration, exogenous, and domain. Other sections noted in the docs (or in the example models here are optional)
  • Then call model = yaml_import("my_model.yaml") where “my_model.yaml” is replaced by the path to the yaml file you created in the first step. The reason for the ../models/rmt3_ch11.yaml in th example above is that the file rmt3_ch11.yaml was not in the same folder as the notebook that was trying to load the model in that file.

If you want to load the model and solve/explore it in a jupyter notebook (.ipynb extension), then you create a single .ipynb file that loads Dolo and has the yaml_import line from the last step above.


#7

Ahh, I see! I’ll try to follow your steps and hopefully I can get it working by tonight. Also, I tried loading the model using the URL and it worked perfectly :smiley:


#8

Juliabox should now be up and running with Dolo. Give it a shot!


#9

Thanks for the heads up @jlperla. I have been working on the .yaml file but unfortunately I can’t get it to work perfectly (this is most likely due to mistakes I have made in the definitions block).

I will work on it some more but if I can’t figure it out, would you mind taking a look at it?


#10

I wouldn’t be able to (and don’t actually know any details on Dolo). But if you post up your questions, I suspect other people might be able to help.


#11

can i ask questions as well? i’m new here so not sure. or i should privately ask? anyway, i’m having some about JuliaBox. thanks!


#12

@Wive1982 Please go ahead – although if it’s unrelated to dolo then it might be best to start a new thread.