{ "cells": [ { "cell_type": "code", "metadata": {}, "source": [ "#%%\n", "\"\"\" File: 07estimationMonteCarlo_anti_500.py\n", "\n", " Author: Michel Bierlaire, EPFL\n", " Date: Wed Dec 11 17:24:43 2019\n", "\n", "Estimation of a mixtures of logit models where the integral is\n", "approximated using MonteCarlo integration, with antithetic draws.\n", "\"\"\"\n", "# pylint: disable=invalid-name, undefined-variable\n", "\n", "import pandas as pd\n", "import biogeme.database as db\n", "import biogeme.biogeme as bio\n", "from biogeme import models\n", "from biogeme.expressions import Beta, bioDraws, MonteCarlo, log\n", "\n", "pandas = pd.read_csv('swissmetro.dat', sep='\\t')\n", "database = db.Database('swissmetro', pandas)\n", "\n", "# The following statement allows you to use the names of the variable\n", "# as Python variable.\n", "globals().update(database.variables)\n", "\n", "# Removing some observations\n", "exclude = ((PURPOSE != 1) * (PURPOSE != 3) + (CHOICE == 0)) > 0\n", "database.remove(exclude)\n", "\n", "ASC_CAR = Beta('ASC_CAR', 0, None, None, 0)\n", "ASC_TRAIN = Beta('ASC_TRAIN', 0, None, None, 0)\n", "ASC_SM = Beta('ASC_SM', 0, None, None, 1)\n", "B_TIME = Beta('B_TIME', 0, None, None, 0)\n", "B_TIME_S = Beta('B_TIME_S', 1, None, None, 0)\n", "B_COST = Beta('B_COST', 0, None, None, 0)\n", "\n", "# Define a random parameter, normally distributed, designed to be used\n", "# for Monte-Carlo simulation\n", "B_TIME_RND = B_TIME + B_TIME_S * bioDraws('B_TIME_RND', 'NORMAL_ANTI')\n", "\n", "# Definition of new variables\n", "SM_COST = SM_CO * (GA == 0)\n", "TRAIN_COST = TRAIN_CO * (GA == 0)\n", "CAR_AV_SP = CAR_AV * (SP != 0)\n", "TRAIN_AV_SP = TRAIN_AV * (SP != 0)\n", "TRAIN_TT_SCALED = TRAIN_TT / 100.0\n", "TRAIN_COST_SCALED = TRAIN_COST / 100\n", "SM_TT_SCALED = SM_TT / 100.0\n", "SM_COST_SCALED = SM_COST / 100\n", "CAR_TT_SCALED = CAR_TT / 100\n", "CAR_CO_SCALED = CAR_CO / 100\n", "\n", "# Definition of the utility functions\n", "V1 = ASC_TRAIN + B_TIME_RND * TRAIN_TT_SCALED + B_COST * TRAIN_COST_SCALED\n", "V2 = ASC_SM + B_TIME_RND * SM_TT_SCALED + B_COST * SM_COST_SCALED\n", "V3 = ASC_CAR + B_TIME_RND * CAR_TT_SCALED + B_COST * CAR_CO_SCALED\n", "\n", "# Associate utility functions with the numbering of alternatives\n", "V = {1: V1, 2: V2, 3: V3}\n", "\n", "# Associate the availability conditions with the alternatives\n", "av = {1: TRAIN_AV_SP, 2: SM_AV, 3: CAR_AV_SP}\n", "\n", "# The choice model is a logit, with availability conditions\n", "prob = models.logit(V, av, CHOICE)\n", "logprob = log(MonteCarlo(prob))\n", "\n", "\n", "R = 500\n", "biogeme = bio.BIOGEME(database, logprob, numberOfDraws=R)\n", "\n", "biogeme.modelName = '07estimationMonteCarlo_anti_500'\n", "results = biogeme.estimate()\n", "\n", "# Get the results in a pandas table\n", "pandasResults = results.getEstimatedParameters()\n", "print(pandasResults)\n" ], "outputs": [], "execution_count": null } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 4 }