Federal Planning Bureau Economic analyses and forecasts LIAM2* A sneak preview... *Life-cycle Income...

Post on 16-Jan-2016

212 views 0 download

Transcript of Federal Planning Bureau Economic analyses and forecasts LIAM2* A sneak preview... *Life-cycle Income...

Federal Planning Bureau Economic analyses and forecasts

LIAM2*A sneak preview...

*Life-c

ycl

e In

com

e A

naly

sis

Mod

el

Gijs Dekkers

Federal Planning Bureau andKatholieke Universiteit Leuven

Sides made by Gaëtan de Menten

Paper presented at the Paper to be presented at the « Tresury Brown Bag Lunch Meeting », Ministero dell'Economia e delle Finanze, Rome, February 14th, 2011

Federal Planning BureauEconomic analyses and forecasts

LIAM 2: the foundations

LIAM by Cathal O’Donoghue Used in AIM-project, developing MIDAS for Belgium, Italy and Germany.

Updating, extending and considerable problem solving by Geert Bryon (FPB)

PROGRESS-MiDaL project (Grant VS/2009/0569) FPP (Be): development, application and testing

Gaëtan de Menten: development

Geert Bryon: application and testing

Gijs Dekkers: management, data and a bit application

CEPS/INSTEAD (Lux): testing

IGSS (Lux): investment, testing

Cathal O’Donoghue (Teacasc, Ire), Howard Redway (minstry of work and pensions, uk): comments and conceptual assistance

Federal Planning BureauEconomic analyses and forecasts

Overview of this sneak preview

Current features

Current performance

Demonstration

TODO(?)

Federal Planning BureauEconomic analyses and forecasts

Current features

Input Simulation: a text file

Alignment: CSV files

Initial field data: an hdf5 file

Output hdf5 file

Converters Old data format (Tab-separated text files) <-> hdf5

Federal Planning BureauEconomic analyses and forecasts

constantsper_period:

PARAMETER-NAME: float

entities

entity-name1 (e.g. Household):fieldslinksprocesses

entity-name2 (e.g. Person):fieldslinksprocesses

simulation:init:processes:

entity: [list of processes, separated by commas]input:

path: “path name”file: “file name.h5”

output:path: “path name” file: “file name.h5”

start_period:periods: T

he s

etu

p o

f a m

od

el

Federal Planning BureauEconomic analyses and forecasts

Current features

Language Python

High level, concise, readable, easy interface with C

Lots of 3rd party libraries (especially scientific tools)

But uses some efficient (open source) libraries written mostly in C Numpy

Numexpr

PyTables

Federal Planning BureauEconomic analyses and forecasts

Current features

Can declare “fields” with a type float, int, bool

Evaluate simple expressions Arithmetic operators: +, -, *, /, **, %

0.51 * age + 0.023 * age ** 2 – 0.0012 * age ** 3

Comparison operators: <, <=, ==, !=, >=, > age < 20

Boolean operators: and, or, not not male and (age >= 15) and (age <= 50)

Conditional expressions: if(condition, iftrue, iffalse) if(age < 65, earnings, pension)

Federal Planning BureauEconomic analyses and forecasts

Current features

Store fields for each period (if the field is declared)

age: “age + 1”

as temporaries (the value is lost after each period) ischild: “age < 18”

Macros (re-evaluated wherever they appears) ISCHILD: “age < 18”

difference with temporaries: ischild: "age < 18"

before1: “if(ischild, 1, 2)"

before2: “if(ISCHILD, 1, 2)“ # before1 == before2

age: "age + 1"

after1: "if(ischild, 1, 2)"

after2: "if(ISCHILD, 1, 2)“ # after1 != after2 !!

# after1 == before 1

Federal Planning BureauEconomic analyses and forecasts

Current features

Functions Per individual

abs, log, exp

clip 0.25 * clip(age ** 3, 0, 100000)

round round(age / 10.0, 2)

min/max min(age, 99)

max(pension, benefit)

Federal Planning BureauEconomic analyses and forecasts

Current features

Functions Aggregate functions

grpcount, grpsum, grpavg, grpstd, grpmax, grpmin

abs(age - grpavg(age))

Normal: random numbers with a normal distribution normal(loc=0.0, scale=grpstd(errsal))

Some functions accept a filter argument abs(age - grpavg(age, filter=male),

filter=not male)

Federal Planning BureauEconomic analyses and forecasts

Current features

lag/value_for_period Only simple expressions and explicitly saved aggregates for now

value_for_period(inwork and not male, 2002)

lag(sum_twr)

matching: match two sets of individuals (aka Marriage market) matches individuals from set 1 with individuals from set 2

follow a particular order (given by an expression)

for each individual in set 1, computes the score of all (unmatched) individuals in set 2 and take the best scoring one

matching(set1filter=to_marry and not male,

set2filter=to_marry and male,

orderby=difficult_match)

Federal Planning BureauEconomic analyses and forecasts

Current features

Many-to-one links partner.age

grpavg(partner.age – age)

partner.father.age

partner.get(earnings + benefits)

Federal Planning BureauEconomic analyses and forecasts

Current features

One-to-many links countlink(link, filter)

countlink(persons)

countlink(children, age < 18)

sumlink(link, expr, filter) sumlink(persons, earnings, age >= 18)

avglink(link, expr, filter) avglink(children, age, not male)

minlink/maxlink(link, expr, filter) minlink(children, age, not male)

Federal Planning BureauEconomic analyses and forecasts

Current features

Regressions Logit

logit_regr(expr, filter, align)

Continuous (expr + normal(0, 1) * mult + error) cont_regr(expr, filter, align, mult, error_var)

Clipped continuous (always positive) clip_regr(expr, filter, align, mult, error_var)

Log continuous (exponential of continuous) log_regr(expr, filter, align, mult, error_var)

Alignment Fixed percentage or 2 dimensional table in a csv file

Federal Planning BureauEconomic analyses and forecasts

Current features

Lifecycle functions new: create new individuals

new('person', filter=to_give_birth)

remove: remove individuals from the dataset remove(dead)

remove(nb_persons == 0)

Miscellaneous functions show: print anything to the console

show(grpcount(age >= 18))

show(grpcount(not dead), grpavg(age, filter=not dead))

Federal Planning BureauEconomic analyses and forecasts

Current features (9/10)

Miscellaneous functions dump: produce a table with the expressions given as argument

show(dump(age, age / 10, filter=id < 20))

groupby (aka “pivot table”): group individuals by their value for the given expressions, and optionally compute an expression for each group

show(groupby((age / 10, gender)))

show(groupby((agegroup, gender, inwork), grpcount()))

show(groupby(agegroup, grpavg(income)))

show(groupby((inwork, gender), id, filter=age < 10)

csv: write a table to a csv file csv(dump(age, age / 10, gender), suffix=‘age’)

Show: interactive assessment of results: command line

Federal Planning BureauEconomic analyses and forecasts

Current Performance

For a simple model: birth (using alignment data from MIDAS)

chronic ill (using a fixed percentage alignment)

marriage market

earnings (using macro alignment) Or at least what I think macro alignment is...

death (using alignment data from MIDAS)

Federal Planning BureauEconomic analyses and forecasts

Current Performance

10,000 persons, 20 periods 2,65s (on a Dell latitude laptop computer)

100,000 persons, 20 periods 29s

1,000,000 persons, 20 periods 16 minutes 31s, of which approx. 83% is spent in the marriage market

~180Mb RAM

897Mb output file could be compressed if needed

For a complete model with 100,000 persons probably under 10min

Federal Planning Bureau Economic analyses and forecasts

Demonstration

Federal Planning BureauEconomic analyses and forecasts

TODO

Automated tests (aka “unit tests”)

Documentation User manual

Code

Speed optimizations

Clean-up the code

Federal Planning Bureau Economic analyses and forecasts

Questions or comments?