File 01logit.py
:author: Michel Bierlaire, EPFL :date: Thu Sep 6 15:14:39 2018
Example of a logit model. Three alternatives: Train, Car and Swissmetro SP data """
import pandas as pd import biogeme.database as db import biogeme.biogeme as bio import biogeme.models as models from biogeme.expressions import Beta
df = pd.read_csv('swissmetro.dat', '\t') database = db.Database('swissmetro', df)
globals().update(database.variables)
exclude = ((PURPOSE != 1) * (PURPOSE != 3) + (CHOICE == 0)) > 0 database.remove(exclude)
ASC_CAR = Beta('ASC_CAR', 0, None, None, 0) ASC_TRAIN = Beta('ASC_TRAIN', 0, None, None, 0) ASC_SM = Beta('ASC_SM', 0, None, None, 1) B_TIME = Beta('B_TIME', 0, None, None, 0) B_COST = Beta('B_COST', 0, None, None, 0)
SM_COST = SM_CO * (GA == 0) TRAIN_COST = TRAIN_CO * (GA == 0) CAR_AV_SP = CAR_AV * (SP != 0) TRAIN_AV_SP = TRAIN_AV * (SP != 0) TRAIN_TT_SCALED = TRAIN_TT / 100.0 TRAIN_COST_SCALED = TRAIN_COST / 100 SM_TT_SCALED = SM_TT / 100.0 SM_COST_SCALED = SM_COST / 100 CAR_TT_SCALED = CAR_TT / 100 CAR_CO_SCALED = CAR_CO / 100
V1 = ASC_TRAIN +
B_TIME * TRAIN_TT_SCALED +
B_COST * TRAIN_COST_SCALED
V2 = ASC_SM +
B_TIME * SM_TT_SCALED +
B_COST * SM_COST_SCALED
V3 = ASC_CAR +
B_TIME * CAR_TT_SCALED +
B_COST * CAR_CO_SCALED
V = {1: V1, 2: V2, 3: V3}
av = {1: TRAIN_AV_SP, 2: SM_AV, 3: CAR_AV_SP}
logprob = models.loglogit(V, av, CHOICE)
biogeme = bio.BIOGEME(database, logprob) biogeme.modelName = '01logit'
results = biogeme.estimate()
pandasResults = results.getEstimatedParameters() print(pandasResults)