コード例 #1
0
def estimate_wrap(V, av, CHOICE, database, panelEst, ModNameSeqence, Draws):
    '''
    #
    #
    #
    '''

    if panelEst:
        #database.panel('ID')
        # Conditional to B_TIME_RND, the likelihood of one observation is
        # given by the logit model (called the kernel)
        obsprob = exp(models.loglogit(V, av, CHOICE))

        # Conditional to B_TIME_RND, the likelihood of all observations for
        # one individual (the trajectory) is the product of the likelihood of
        # each observation.
        condprobIndiv = PanelLikelihoodTrajectory(obsprob)
        if Draws > 0:
            condprobIndiv = MonteCarlo(condprobIndiv)

        logprob = log(condprobIndiv)
    else:
        prob = exp(models.loglogit(V, av, CHOICE))
        if Draws > 0:
            prob = MonteCarlo(prob)
        logprob = log(prob)

    if Draws > 0:
        biogeme = bio.BIOGEME(database, logprob, numberOfDraws=Draws)
    else:
        biogeme = bio.BIOGEME(database, logprob)

    biogeme.modelName = ModNameSeqence

    return biogeme.estimate()
コード例 #2
0
 def testEstimation(self):
     logprob = models.loglogit(V,av,CHOICE)
     weight = 8.890991e-01 * (1.0 * (GROUP == 2) + 1.2 * (GROUP == 3))
     formulas = {'loglike':logprob,'weight':weight}
     biogeme  = bio.BIOGEME(database,formulas)
     results = biogeme.estimate()
     self.assertAlmostEqual(results.data.logLike,-5273.743,2)
コード例 #3
0
ファイル: test_01.py プロジェクト: jiaodaxiaozi/biogeme
 def testEstimationScipy(self):
     logprob = models.loglogit(V, av, CHOICE)
     biogeme = bio.BIOGEME(database, logprob, seed=10, numberOfThreads=1)
     biogeme.modelName = "test_01"
     results = biogeme.estimate(bootstrap=10, algorithm=opt.scipy)
     self.assertAlmostEqual(results.data.logLike, -5331.252, 2)
     self.assertAlmostEqual(results.data.betas[0].bootstrap_stdErr,
                            0.04773096176427237, 2)
コード例 #4
0
 def test_expr9(self):
     V = {0: -self.beta1, 1: -self.beta2, 2: -self.beta1}
     av = {0: 1, 1: 1, 2: 1}
     expr8 = models.loglogit(V, av, 1)
     expr9 = ex.Derive(expr8, 'beta2')
     res = expr9.getValue_c(self.myData)
     for v in res:
         self.assertAlmostEqual(v, -0.8446375965030364, 5)
コード例 #5
0
 def test_expr7(self):
     V = {0: -self.beta1, 1: -self.beta2, 2: -self.beta1}
     av = {0: 1, 1: 1, 2: 1}
     expr7 = ex.LogLogit(V, av, 1)
     r = expr7.getValue()
     self.assertAlmostEqual(r, -1.861994804058251, 5)
     expr8 = models.loglogit(V, av, 1)
     res = expr8.getValue_c(self.myData)
     for v in res:
         self.assertAlmostEqual(v, -1.861994804058251, 5)
コード例 #6
0
    def setUp(self):
        np.random.seed(90267)
        rnd.seed(90267)
        Choice = Variable('Choice')
        Variable1 = Variable('Variable1')
        Variable2 = Variable('Variable2')
        beta1 = Beta('beta1', 0, None, None, 0)
        beta2 = Beta('beta2', 0, None, None, 0)
        V1 = beta1 * Variable1
        V2 = beta2 * Variable2
        V3 = 0
        V = {1: V1, 2: V2, 3: V3}

        likelihood = models.loglogit(V, av=None, i=Choice)
        self.myBiogeme = bio.BIOGEME(myData1, likelihood)
        self.myBiogeme.modelName = 'simpleExample'
        self.theFunction = rosenbrock()
コード例 #7
0
ファイル: simple_test.py プロジェクト: jiaodaxiaozi/biogeme
    def testEstimation(self):
        AutoTime = Variable('AutoTime')
        TransitTime = Variable('TransitTime')
        Choice = Variable('Choice')

        ASC_CAR = Beta('ASC_CAR', 0, None, None, 0)
        B_TIME = Beta('B_TIME', 0, None, None, 0)

        V = {0: ASC_CAR + B_TIME * AutoTime, 1: B_TIME * TransitTime}

        av = {0: 1, 1: 1}

        logprob = models.loglogit(V, av, Choice)

        biogeme = bio.BIOGEME(self.database, logprob)
        biogeme.modelName = 'test'
        biogeme.generateHtml = False
        results = biogeme.estimate()
        self.assertAlmostEqual(results.data.logLike, -6.166042, 2)
コード例 #8
0
     B_COST * TRAIN_COST_SCALED
V2 = ASC_SM + \
     B_TIME_RND * SM_TT_SCALED + \
     B_COST * SM_COST_SCALED
V3 = ASC_CAR + \
     B_TIME_RND * CAR_TT_SCALED + \
     B_COST * CAR_CO_SCALED

# Associate utility functions with the numbering of alternatives
V = {1: V1, 2: V2, 3: V3}

# Associate the availability conditions with the alternatives
av = {1: TRAIN_AV_SP, 2: SM_AV, 3: CAR_AV_SP}

# Conditional to B_TIME_RND, we have a logit model (called the kernel)
prob = exp(models.loglogit(V, av, CHOICE))
# We integrate over B_TIME_RND using Monte-Carlo
logprob = log(MonteCarlo(prob))

# Define level of verbosity
logger = msg.bioMessage()
#logger.setSilent()
#logger.setWarning()
logger.setGeneral()
#logger.setDetailed()

# Create the Biogeme object
biogeme = bio.BIOGEME(database, logprob, numberOfDraws=100000)
biogeme.modelName = '06unifMixtureMHLS'

# Estimate the parameters
コード例 #9
0
 def testEstimation(self):
     logprob = models.loglogit(V, av, CHOICE)
     biogeme = bio.BIOGEME(database, logprob)
     results = biogeme.estimate()
     self.assertAlmostEqual(results.data.logLike, -5423.299, 2)
コード例 #10
0
ファイル: 01logit_p.py プロジェクト: jiaodaxiaozi/biogeme
]

# Associate utility functions with the numbering of alternatives
V = [{1: V1[q], 2: V2[q], 3: V3[q]} for q in range(nbrQuestions)]

# Associate the availability conditions with the alternatives
av = [{
    1: TRAIN_AV_SP[q],
    2: SM_AV[q],
    3: CAR_AV_SP[q]
} for q in range(nbrQuestions)]

# Definition of the model. This is the contribution of each
# observation to the log likelihood function.
logprob = [
    models.loglogit(V[q], av[q], Variable(f'CHOICE_{q}'))
    for q in range(nbrQuestions)
]

# Create the Biogeme object
biogeme = bio.BIOGEME(database, bioMultSum(logprob))
biogeme.modelName = '01logit'

# Estimate the parameters
results = biogeme.estimate(saveIterations=True)
biogeme.createLogFile()

# Get the results in a pandas table
pandasResults = results.getEstimatedParameters()
print(pandasResults)
コード例 #11
0
V_Bike = ASC_Bike + B_AGE * Age + B_GENDER * Gender + B_WORKPLACE * Workplace + B_HOUSEHOLD * Household_Type + B_Job_Status * Job_Status + B_TFreq_Bike * Frequency + B_TDurationBike * Duration
V_PT = ASC_PT + B_AGE * Age + B_GENDER * Gender + B_WORKPLACE * Workplace + B_HOUSEHOLD * Household_Type + B_Job_Status * Job_Status + B_TFreq_PT * Frequency + B_TDurationPT * Duration
V_AUTO = ASC_AUTO + B_AGE * Age + B_GENDER * Gender + B_WORKPLACE * Workplace + B_HOUSEHOLD * Household_Type + B_Job_Status * Job_Status + B_TFreq_AUTO * Frequency + B_TDurationAUTO * Duration
V_RideHailing = ASC_RideHailing + B_AGE * Age + B_GENDER * Gender + B_WORKPLACE * Workplace + B_HOUSEHOLD * Household_Type + B_Job_Status * Job_Status + B_TFreq_RideHailing * Frequency + B_TDurationRideHailing * Duration
V_Mixed_Modes = ASC_Mixed_Modes + B_AGE * Age + B_GENDER * Gender + B_WORKPLACE * Workplace + B_HOUSEHOLD * Household_Type + B_Job_Status * Job_Status + B_TFreq_Mixed_Modes * Frequency + B_TDurationMixed_Modes * Duration

# Associate utility functions with the numbering of alternatives
V = {
    0: V_FOOT,
    1: V_Bike,
    2: V_PT,
    3: V_AUTO,
    4: V_RideHailing,
    5: V_Mixed_Modes,
}

# Definition of the model. This is the contribution of each

logprob = models.loglogit(V, None, CHOICE)

# Create the Biogeme object
biogeme = bio.BIOGEME(database, logprob)
biogeme.modelName = 'Before6AlternativesMNL_weight_V1'

# Estimate the parameters
results = biogeme.estimate()

# Get the results in a pandas table
pandasResults = results.getEstimatedParameters()
print(pandasResults)
コード例 #12
0
def cv_test_model(V,
                  R,
                  Draws,
                  ModName,
                  test,
                  myRandomNumberGenerators,
                  COST_SCALE_CAR=100,
                  COST_SCALE_PUB=100):

    db_test = db.Database("swissmetro_test", test)
    db_test.setRandomNumberGenerators(myRandomNumberGenerators)
    globals().update(db_test.variables)
    #locals().update(db_test.variables)

    #define variables
    #variables
    CAR_AV_SP = DefineVariable('CAR_AV_SP', CAR_AV * (SP != 0), db_test)
    TRAIN_AV_SP = DefineVariable('TRAIN_AV_SP', TRAIN_AV * (SP != 0), db_test)

    SM_COST = SM_CO * (GA == 0)
    TRAIN_COST = TRAIN_CO * (GA == 0)

    ###Parameters to be estimated (Note not all parameters are used in all models!)
    ##Attributes
    #Alternative specific constants
    ASC_CAR = Beta('ASC_CAR', 0, None, None, 1)
    ASC_TRAIN = Beta('ASC_TRAIN', 0, None, None, 0)
    ASC_SM = Beta('ASC_SM', 0, None, None, 0)

    #Cost (Note: Assumed generic)
    B_COST = Beta('B_COST', 0, None, None, 0)
    B_COST_BUSINESS = Beta('B_COST_BUSINESS', 0, None, None, 0)
    B_COST_PRIVATE = Beta('B_COST_PRIVATE', 0, None, None, 0)

    #Time
    B_TIME = Beta('B_TIME', 0, None, None, 0)
    B_TIME_CAR = Beta('B_TIME_CAR', 0, None, None, 0)
    B_TIME_TRAIN = Beta('B_TIME_TRAIN', 0, None, None, 0)
    B_TIME_SM = Beta('B_TIME_SM', 0, None, None, 0)
    B_TIME_PUB = Beta('B_TIME_PUB', 0, None, None, 0)
    B_TIME_CAR_BUSINESS = Beta('B_TIME_CAR_BUSINESS', 0, None, None, 0)
    B_TIME_TRAIN_BUSINESS = Beta('B_TIME_TRAIN_BUSINESS', 0, None, None, 0)
    B_TIME_SM_BUSINESS = Beta('B_TIME_SM_BUSINESS', 0, None, None, 0)
    B_TIME_PUB_BUSINESS = Beta('B_TIME_PUB_BUSINESS', 0, None, None, 0)
    B_TIME_CAR_PRIVATE = Beta('B_TIME_CAR_PRIVATE', 0, None, None, 0)
    B_TIME_TRAIN_PRIVATE = Beta('B_TIME_TRAIN_PRIVATE', 0, None, None, 0)
    B_TIME_SM_PRIVATE = Beta('B_TIME_SM_PRIVATE', 0, None, None, 0)
    B_TIME_PUB_PRIVATE = Beta('B_TIME_PUB_PRIVATE', 0, None, None, 0)

    #HE (Note: Not available for car)
    B_HE = Beta('B_HE', 0, None, None, 0)
    B_HE_TRAIN = Beta('B_HE_TRAIN', 0, None, None, 0)
    B_HE_SM = Beta('B_HE_SM', 0, None, None, 0)
    B_HE_BUSINESS = Beta('B_HE_BUSINESS', 0, None, None, 0)
    B_HE_TRAIN_BUSINESS = Beta('B_HE_TRAIN_BUSINESS', 0, None, None, 0)
    B_HE_SM_BUSINESS = Beta('B_HE_SM_BUSINESS', 0, None, None, 0)
    B_HE_PRIVATE = Beta('B_HE_PRIVATE', 0, None, None, 0)
    B_HE_TRAIN_PRIVATE = Beta('B_HE_TRAIN_PRIVATE', 0, None, None, 0)
    B_HE_SM_PRIVATE = Beta('B_HE_SM_PRIVATE', 0, None, None, 0)

    #Seats (Note: Only avaliable for SM)
    B_SEATS = Beta('B_SEATS', 0, None, None, 0)

    ##Characteristics
    #Age
    B_AGE_1_TRAIN = Beta('B_AGE_1_TRAIN', 0, None, None, 1)  #Note: Reference
    B_AGE_2_TRAIN = Beta('B_AGE_2_TRAIN', 0, None, None, 0)
    B_AGE_3_TRAIN = Beta('B_AGE_3_TRAIN', 0, None, None, 0)
    B_AGE_4_TRAIN = Beta('B_AGE_4_TRAIN', 0, None, None, 0)
    B_AGE_5_TRAIN = Beta('B_AGE_5_TRAIN', 0, None, None, 0)
    B_AGE_6_TRAIN = Beta('B_AGE_6_TRAIN', 0, None, None, 0)
    B_AGE_1_SM = Beta('B_AGE_1_SM', 0, None, None, 1)  #Note: Reference
    B_AGE_2_SM = Beta('B_AGE_2_SM', 0, None, None, 0)
    B_AGE_3_SM = Beta('B_AGE_3_SM', 0, None, None, 0)
    B_AGE_4_SM = Beta('B_AGE_4_SM', 0, None, None, 0)
    B_AGE_5_SM = Beta('B_AGE_5_SM', 0, None, None, 0)
    B_AGE_6_SM = Beta('B_AGE_6_SM', 0, None, None, 0)
    B_AGE_1_PUB = Beta('B_AGE_1_PUB', 0, None, None, 1)  #Note: Reference
    B_AGE_2_PUB = Beta('B_AGE_2_PUB', 0, None, None, 0)
    B_AGE_3_PUB = Beta('B_AGE_3_PUB', 0, None, None, 0)
    B_AGE_4_PUB = Beta('B_AGE_4_PUB', 0, None, None, 0)
    B_AGE_5_PUB = Beta('B_AGE_5_PUB', 0, None, None, 0)
    B_AGE_6_PUB = Beta('B_AGE_6_PUB', 0, None, None, 0)
    B_AGE_ADULTS_TRAIN = Beta('B_AGE_TRAIN_ADULTS', 0, None, None, 0)
    B_AGE_ADULTS_SM = Beta('B_AGE_ADULTS_SM', 0, None, None, 0)
    B_AGE_ADULTS_PUB = Beta('B_AGE_ADULTS_PUB', 0, None, None, 0)

    #Luggage
    B_LUGGAGE_TRAIN = Beta('B_LUGGAGE_TRAIN', 0, None, None, 0)
    B_LUGGAGE_SM = Beta('B_LUGGAGE_SM', 0, None, None, 0)
    B_LUGGAGE_PUB = Beta('B_LUGGAGE_PUB', 0, None, None, 0)

    #Gender
    B_MALE_TRAIN = Beta('B_MALE_TRAIN', 0, None, None, 0)
    B_MALE_SM = Beta('B_MALE_SM', 0, None, None, 0)
    B_MALE_PUB = Beta('B_MALE_PUB', 0, None, None, 0)

    #Purpose
    B_BUSINESS = Beta('B_BUSINESS', 0, None, None, 0)
    B_BUSINESS_TRAIN = Beta('B_BUSINESS_TRAIN', 0, None, None, 0)
    B_BUSINESS_SM = Beta('B_BUSINESS_SM', 0, None, None, 0)
    B_PRIVATE = Beta('B_PRIVATE', 0, None, None, 0)
    B_PRIVATE_TRAIN = Beta('B_PRIVATE_TRAIN', 0, None, None, 0)
    B_PRIVATE_SM = Beta('B_PRIVATE_SM', 0, None, None, 0)
    B_COMMUTER = Beta('B_COMMUTER', 0, None, None, 0)
    B_COMMUTER_TRAIN = Beta('B_COMMUTER_TRAIN', 0, None, None, 0)
    B_COMMUTER_SM = Beta('B_COMMUTER_SM', 0, None, None, 0)

    #GA
    B_GA = Beta('B_GA', 0, None, None, 0)
    B_GA_TRAIN = Beta('B_GA_TRAIN', 0, None, None, 0)
    B_GA_SM = Beta('B_GA_SM', 0, None, None, 0)

    #First
    B_FIRST_TRAIN = Beta('B_FIRST_TRAIN', 0, None, None, 0)
    B_FIRST_SM = Beta('B_FIRST_SM', 0, None, None, 0)
    B_FIRST = Beta('B_FIRST', 0, None, None, 0)

    ##Non linearization
    #Cost
    q_COST = Beta('q_COST', 1, None, None, 0)

    #Time
    q_TIME = Beta('q_TIME', 1, None, None, 0)
    q_TIME_TRAIN = Beta('q_TIME_TRAIN', 1, None, None, 0)
    q_TIME_SM = Beta('q_TIME_SM', 1, None, None, 0)
    q_TIME_CAR = Beta('q_TIME_CAR', 1, None, None, 0)
    q_TIME_PUB = Beta('q_TIME_PUB', 1, None, None, 0)

    #HE
    q_HE = Beta('q_HE', 1, None, None, 0)

    ##Nesting parameter
    MU = Beta('MU', 1, 0, 1, 0)

    ##ML RANDOM GENERIC TIME LOGNORMAL
    BETA_TIME_mean = Beta('BETA_TIME_mean', 0, None, None, 0)
    BETA_TIME_std = Beta('BETA_TIME_std', 1, None, None, 0)
    BETA_TIME_random = -exp(BETA_TIME_mean + BETA_TIME_std *
                            bioDraws('BETA_TIME_random', 'NORMAL'))

    ##ML RANDOM SPECIFIC TIME TRAIN LOGNORMAL
    BETA_TIME_TRAIN_mean = Beta('BETA_TIME_TRAIN_mean', 0, None, None, 0)
    BETA_TIME_TRAIN_std = Beta('BETA_TIME_TRAIN_std', 1, None, None, 0)
    BETA_TIME_TRAIN_random = -exp(BETA_TIME_TRAIN_mean + BETA_TIME_TRAIN_std *
                                  bioDraws('BETA_TIME_TRAIN_random', 'NORMAL'))

    ##ML RANDOM SPECIFIC TIME SM  LOGNORMAL
    BETA_TIME_SM_mean = Beta('BETA_TIME_SM_mean', 0, None, None, 0)
    BETA_TIME_SM_std = Beta('BETA_TIME_SM_std', 1, None, None, 0)
    BETA_TIME_SM_random = -exp(BETA_TIME_SM_mean + BETA_TIME_SM_std *
                               bioDraws('BETA_TIME_SM_random', 'NORMAL'))

    ##ML RANDOM SPECIFIC TIME CAR LOGNORMAL
    BETA_TIME_CAR_mean = Beta('BETA_TIME_CAR_mean', 0, None, None, 0)
    BETA_TIME_CAR_std = Beta('BETA_TIME_CAR_std', 1, None, None, 0)
    BETA_TIME_CAR_random = -exp(BETA_TIME_CAR_mean + BETA_TIME_CAR_std *
                                bioDraws('BETA_TIME_CAR_random', 'NORMAL'))

    ##ML RANDOM GENERIC COST LOGNORMAL
    BETA_COST_mean = Beta('BETA_COST_mean', 0, None, None, 0)
    BETA_COST_std = Beta('BETA_COST_std', 1, None, None, 0)
    BETA_COST_random = -exp(BETA_COST_mean + BETA_COST_std *
                            bioDraws('BETA_COST_random', 'NORMAL'))

    ##ML RANDOM GENERIC HE LOGNORMAL
    BETA_HE_mean = Beta('BETA_HE_mean', 0, None, None, 0)
    BETA_HE_std = Beta('BETA_HE_std', 1, None, None, 0)
    BETA_HE_random = -exp(BETA_HE_mean +
                          BETA_HE_std * bioDraws('BETA_HE_random', 'NORMAL'))

    ##ML RANDOM GENERIC TIME NORMAL
    BETA_TIME_mean_Norm = Beta('BETA_TIME_mean_Norm', 0, None, None, 0)
    BETA_TIME_std_Norm = Beta('BETA_TIME_std_Norm', 1, None, None, 0)
    BETA_TIME_random_Norm = BETA_TIME_mean_Norm + BETA_TIME_std_Norm * bioDraws(
        'BETA_TIME_random_Norm', 'NORMAL')

    ##ML RANDOM SPECIFIC TIME TRAIN LOGNORMAL
    BETA_TIME_TRAIN_mean_Norm = Beta('BETA_TIME_TRAIN_mean_Norm', 0, None,
                                     None, 0)
    BETA_TIME_TRAIN_std_Norm = Beta('BETA_TIME_TRAIN_std_Norm', 1, None, None,
                                    0)
    BETA_TIME_TRAIN_random_Norm = BETA_TIME_TRAIN_mean_Norm + BETA_TIME_TRAIN_std_Norm * bioDraws(
        'BETA_TIME_TRAIN_random_Norm', 'NORMAL')

    ##ML RANDOM GENERIC COST LOGNORMAL
    BETA_COST_PUB_mean = Beta('BBETA_COST_PUB_mean', 0, None, None, 0)
    BETA_COST_PUB_std = Beta('BBETA_COST_PUB_std', 1, None, None, 0)
    BETA_COST_PUB_random = -exp(BETA_COST_PUB_mean + BETA_COST_PUB_std *
                                bioDraws('BBETA_COST_PUB_random', 'NORMAL'))

    ##ML RANDOM SPECIFIC TIME SM  NORMAL
    BETA_TIME_SM_mean_Norm = Beta('BETA_TIME_SM_mean_Norm', 0, None, None, 0)
    BETA_TIME_SM_std_Norm = Beta('BETA_TIME_SM_std_Norm', 1, None, None, 0)
    BETA_TIME_SM_random_Norm = BETA_TIME_SM_mean_Norm + BETA_TIME_SM_std_Norm * bioDraws(
        'BETA_TIME_SM_random_Norm', 'NORMAL')

    ##ML RANDOM SPECIFIC TIME CAR NORMAL
    BETA_TIME_CAR_mean_Norm = Beta('BETA_TIME_CAR_mean_Norm', 0, None, None, 0)
    BETA_TIME_CAR_std_Norm = Beta('BETA_TIME_CAR_std_Norm', 1, None, None, 0)
    BETA_TIME_CAR_random_Norm = BETA_TIME_CAR_mean_Norm + BETA_TIME_CAR_std_Norm * bioDraws(
        'BETA_TIME_CAR_random_Norm', 'NORMAL')

    ##ML RANDOM GENERIC COST NORMAL
    BETA_COST_mean_Norm = Beta('BETA_COST_mean_Norm', 0, None, None, 0)
    BETA_COST_std_Norm = Beta('BETA_COST_std_Norm', 1, None, None, 0)
    BETA_COST_random_Norm = BETA_COST_mean_Norm + BETA_COST_std_Norm * bioDraws(
        'BETA_COST_random_Norm', 'NORMAL')

    ##ML RANDOM GENERIC HE NORMAL
    BETA_HE_mean_Norm = Beta('BETA_HE_mean_Norm', 0, None, None, 0)
    BETA_HE_std_Norm = Beta('BETA_HE_std_Norm', 1, None, None, 0)
    BETA_HE_random_Norm = BETA_HE_mean_Norm + BETA_HE_std_Norm * bioDraws(
        'BETA_HE_random_Norm', 'NORMAL')

    ##ML RANDOM GENERIC TIME NORMAL
    BBETA_TIME_mean_Norm = Beta('BBETA_TIME_mean_Norm', 0, None, None, 0)
    BBETA_TIME_std_Norm = Beta('BBETA_TIME_std_Norm', 1, None, None, 0)
    BBETA_TIME_random_Norm = BBETA_TIME_mean_Norm + BBETA_TIME_std_Norm * bioDraws(
        'BBETA_TIME_random_Norm', 'NORMAL')

    ##ML RANDOM SPECIFIC TIME TRAIN LOGNORMAL
    BBETA_TIME_TRAIN_mean_Norm = Beta('BBETA_TIME_TRAIN_mean_Norm', 0, None,
                                      None, 0)
    BBETA_TIME_TRAIN_std_Norm = Beta('BBETA_TIME_TRAIN_std_Norm', 1, None,
                                     None, 0)
    BBETA_TIME_TRAIN_random_Norm = BBETA_TIME_TRAIN_mean_Norm + BBETA_TIME_TRAIN_std_Norm * bioDraws(
        'BBETA_TIME_TRAIN_random_Norm', 'NORMAL')

    ##Scaling 'COST', 'TRAVEL-TIME' and 'HE' by a factor of 100 and adding the scaled variables to the database
    '''
    ***********************************************************************************************
    '''

    #PUBLIC
    TRAIN_COST_SCALED = DefineVariable('TRAIN_COST_SCALED',\
                                       TRAIN_COST / COST_SCALE_PUB,db_test)
    SM_COST_SCALED = DefineVariable('SM_COST_SCALED', SM_COST / COST_SCALE_PUB,
                                    db_test)

    #CAR
    CAR_COST_SCALED = DefineVariable('CAR_COST_SCALED',
                                     CAR_CO / COST_SCALE_CAR, db_test)
    '''
    ***********************************************************************************************
    '''
    TRAIN_TT_SCALED = DefineVariable('TRAIN_TT_SCALED',\
                                     TRAIN_TT / 100.0,db_test)

    TRAIN_HE_SCALED = DefineVariable('TRAIN_HE_SCALED',\
                                       TRAIN_HE / 100, db_test)

    SM_TT_SCALED = DefineVariable('SM_TT_SCALED', SM_TT / 100.0, db_test)

    SM_HE_SCALED = DefineVariable('SM_HE_SCALED',\
                                       SM_HE / 100, db_test)

    CAR_TT_SCALED = DefineVariable('CAR_TT_SCALED', CAR_TT / 100, db_test)

    ###Defining new variables and adding columns to the database
    #Age
    AGE_1 = DefineVariable('AGE_1', (AGE == 1),
                           db_test)  #don't scale because is cathegorical
    AGE_2 = DefineVariable('AGE_2', (AGE == 2), db_test)
    AGE_3 = DefineVariable('AGE_3', (AGE == 3), db_test)
    AGE_4 = DefineVariable('AGE_4', (AGE == 4), db_test)
    AGE_5 = DefineVariable('AGE_5', (AGE == 5), db_test)
    AGE_6 = DefineVariable('AGE_6', (AGE == 6), db_test)

    #Purpose
    PRIVATE = DefineVariable("PRIVATE", (PURPOSE == 1), db_test)
    COMMUTER = DefineVariable("COMMUTER", (PURPOSE == 2), db_test)
    BUSINESS = DefineVariable("BUSINESS", (PURPOSE == 3), db_test)

    av = {3: CAR_AV_SP, 1: TRAIN_AV_SP, 2: SM_AV}
    prob1 = biogeme.expressions.MonteCarlo(exp(models.loglogit(V, av, 1)))
    prob2 = biogeme.expressions.MonteCarlo(exp(models.loglogit(V, av, 2)))
    prob3 = biogeme.expressions.MonteCarlo(exp(models.loglogit(V, av, 3)))
    simulate = {'Prob. TRAIN': prob1, 'Prob. SM': prob2, 'Prob. CAR': prob3}
    #print(simulate)
    biosim = bio.BIOGEME(db_test, simulate, numberOfDraws=Draws)
    biosim.modelName = ModName
    SR = biosim.simulate(R.data.betaValues)

    return SR
コード例 #13
0
def cv_estimate_model(V,
                      Draws,
                      ModName,
                      train,
                      myRandomNumberGenerators,
                      COST_SCALE_CAR=100,
                      COST_SCALE_PUB=100):
    db_train = db.Database("swissmetro_train", train)
    db_train.setRandomNumberGenerators(myRandomNumberGenerators)
    globals().update(db_train.variables)
    #locals().update(db_train.variables)
    db_train.panel('ID')

    #variables
    CAR_AV_SP = DefineVariable('CAR_AV_SP', CAR_AV * (SP != 0), db_train)
    TRAIN_AV_SP = DefineVariable('TRAIN_AV_SP', TRAIN_AV * (SP != 0), db_train)

    SM_COST = SM_CO * (GA == 0)
    TRAIN_COST = TRAIN_CO * (GA == 0)

    ###Parameters to be estimated (Note not all parameters are used in all models!)
    ##Attributes
    #Alternative specific constants
    ASC_CAR = Beta('ASC_CAR', 0, None, None, 1)
    ASC_TRAIN = Beta('ASC_TRAIN', 0, None, None, 0)
    ASC_SM = Beta('ASC_SM', 0, None, None, 0)

    #Cost (Note: Assumed generic)
    B_COST = Beta('B_COST', 0, None, None, 0)
    B_COST_BUSINESS = Beta('B_COST_BUSINESS', 0, None, None, 0)
    B_COST_PRIVATE = Beta('B_COST_PRIVATE', 0, None, None, 0)

    #Time
    B_TIME = Beta('B_TIME', 0, None, None, 0)
    B_TIME_CAR = Beta('B_TIME_CAR', 0, None, None, 0)
    B_TIME_TRAIN = Beta('B_TIME_TRAIN', 0, None, None, 0)
    B_TIME_SM = Beta('B_TIME_SM', 0, None, None, 0)
    B_TIME_PUB = Beta('B_TIME_PUB', 0, None, None, 0)
    B_TIME_CAR_BUSINESS = Beta('B_TIME_CAR_BUSINESS', 0, None, None, 0)
    B_TIME_TRAIN_BUSINESS = Beta('B_TIME_TRAIN_BUSINESS', 0, None, None, 0)
    B_TIME_SM_BUSINESS = Beta('B_TIME_SM_BUSINESS', 0, None, None, 0)
    B_TIME_PUB_BUSINESS = Beta('B_TIME_PUB_BUSINESS', 0, None, None, 0)
    B_TIME_CAR_PRIVATE = Beta('B_TIME_CAR_PRIVATE', 0, None, None, 0)
    B_TIME_TRAIN_PRIVATE = Beta('B_TIME_TRAIN_PRIVATE', 0, None, None, 0)
    B_TIME_SM_PRIVATE = Beta('B_TIME_SM_PRIVATE', 0, None, None, 0)
    B_TIME_PUB_PRIVATE = Beta('B_TIME_PUB_PRIVATE', 0, None, None, 0)

    #HE (Note: Not available for car)
    B_HE = Beta('B_HE', 0, None, None, 0)
    B_HE_TRAIN = Beta('B_HE_TRAIN', 0, None, None, 0)
    B_HE_SM = Beta('B_HE_SM', 0, None, None, 0)
    B_HE_BUSINESS = Beta('B_HE_BUSINESS', 0, None, None, 0)
    B_HE_TRAIN_BUSINESS = Beta('B_HE_TRAIN_BUSINESS', 0, None, None, 0)
    B_HE_SM_BUSINESS = Beta('B_HE_SM_BUSINESS', 0, None, None, 0)
    B_HE_PRIVATE = Beta('B_HE_PRIVATE', 0, None, None, 0)
    B_HE_TRAIN_PRIVATE = Beta('B_HE_TRAIN_PRIVATE', 0, None, None, 0)
    B_HE_SM_PRIVATE = Beta('B_HE_SM_PRIVATE', 0, None, None, 0)

    #Seats (Note: Only avaliable for SM)
    B_SEATS = Beta('B_SEATS', 0, None, None, 0)

    ##Characteristics
    #Age
    B_AGE_1_TRAIN = Beta('B_AGE_1_TRAIN', 0, None, None, 1)  #Note: Reference
    B_AGE_2_TRAIN = Beta('B_AGE_2_TRAIN', 0, None, None, 0)
    B_AGE_3_TRAIN = Beta('B_AGE_3_TRAIN', 0, None, None, 0)
    B_AGE_4_TRAIN = Beta('B_AGE_4_TRAIN', 0, None, None, 0)
    B_AGE_5_TRAIN = Beta('B_AGE_5_TRAIN', 0, None, None, 0)
    B_AGE_6_TRAIN = Beta('B_AGE_6_TRAIN', 0, None, None, 0)
    B_AGE_1_SM = Beta('B_AGE_1_SM', 0, None, None, 1)  #Note: Reference
    B_AGE_2_SM = Beta('B_AGE_2_SM', 0, None, None, 0)
    B_AGE_3_SM = Beta('B_AGE_3_SM', 0, None, None, 0)
    B_AGE_4_SM = Beta('B_AGE_4_SM', 0, None, None, 0)
    B_AGE_5_SM = Beta('B_AGE_5_SM', 0, None, None, 0)
    B_AGE_6_SM = Beta('B_AGE_6_SM', 0, None, None, 0)
    B_AGE_1_PUB = Beta('B_AGE_1_PUB', 0, None, None, 1)  #Note: Reference
    B_AGE_2_PUB = Beta('B_AGE_2_PUB', 0, None, None, 0)
    B_AGE_3_PUB = Beta('B_AGE_3_PUB', 0, None, None, 0)
    B_AGE_4_PUB = Beta('B_AGE_4_PUB', 0, None, None, 0)
    B_AGE_5_PUB = Beta('B_AGE_5_PUB', 0, None, None, 0)
    B_AGE_6_PUB = Beta('B_AGE_6_PUB', 0, None, None, 0)
    B_AGE_ADULTS_TRAIN = Beta('B_AGE_TRAIN_ADULTS', 0, None, None, 0)
    B_AGE_ADULTS_SM = Beta('B_AGE_ADULTS_SM', 0, None, None, 0)
    B_AGE_ADULTS_PUB = Beta('B_AGE_ADULTS_PUB', 0, None, None, 0)

    #Luggage
    B_LUGGAGE_TRAIN = Beta('B_LUGGAGE_TRAIN', 0, None, None, 0)
    B_LUGGAGE_SM = Beta('B_LUGGAGE_SM', 0, None, None, 0)
    B_LUGGAGE_PUB = Beta('B_LUGGAGE_PUB', 0, None, None, 0)

    #Gender
    B_MALE_TRAIN = Beta('B_MALE_TRAIN', 0, None, None, 0)
    B_MALE_SM = Beta('B_MALE_SM', 0, None, None, 0)
    B_MALE_PUB = Beta('B_MALE_PUB', 0, None, None, 0)

    #Purpose
    B_BUSINESS = Beta('B_BUSINESS', 0, None, None, 0)
    B_BUSINESS_TRAIN = Beta('B_BUSINESS_TRAIN', 0, None, None, 0)
    B_BUSINESS_SM = Beta('B_BUSINESS_SM', 0, None, None, 0)
    B_PRIVATE = Beta('B_PRIVATE', 0, None, None, 0)
    B_PRIVATE_TRAIN = Beta('B_PRIVATE_TRAIN', 0, None, None, 0)
    B_PRIVATE_SM = Beta('B_PRIVATE_SM', 0, None, None, 0)
    B_COMMUTER = Beta('B_COMMUTER', 0, None, None, 0)
    B_COMMUTER_TRAIN = Beta('B_COMMUTER_TRAIN', 0, None, None, 0)
    B_COMMUTER_SM = Beta('B_COMMUTER_SM', 0, None, None, 0)

    #GA
    B_GA = Beta('B_GA', 0, None, None, 0)
    B_GA_TRAIN = Beta('B_GA_TRAIN', 0, None, None, 0)
    B_GA_SM = Beta('B_GA_SM', 0, None, None, 0)

    #First
    B_FIRST_TRAIN = Beta('B_FIRST_TRAIN', 0, None, None, 0)
    B_FIRST_SM = Beta('B_FIRST_SM', 0, None, None, 0)
    B_FIRST = Beta('B_FIRST', 0, None, None, 0)

    ##Non linearization
    #Cost
    q_COST = Beta('q_COST', 1, None, None, 0)

    #Time
    q_TIME = Beta('q_TIME', 1, None, None, 0)
    q_TIME_TRAIN = Beta('q_TIME_TRAIN', 1, None, None, 0)
    q_TIME_SM = Beta('q_TIME_SM', 1, None, None, 0)
    q_TIME_CAR = Beta('q_TIME_CAR', 1, None, None, 0)
    q_TIME_PUB = Beta('q_TIME_PUB', 1, None, None, 0)

    #HE
    q_HE = Beta('q_HE', 1, None, None, 0)

    ##Nesting parameter
    MU = Beta('MU', 1, 0, 1, 0)

    ##ML RANDOM GENERIC TIME LOGNORMAL
    BETA_TIME_mean = Beta('BETA_TIME_mean', 0, None, None, 0)
    BETA_TIME_std = Beta('BETA_TIME_std', 1, None, None, 0)
    BETA_TIME_random = -exp(BETA_TIME_mean + BETA_TIME_std *
                            bioDraws('BETA_TIME_random', 'NORMAL'))

    ##ML RANDOM SPECIFIC TIME TRAIN LOGNORMAL
    BETA_TIME_TRAIN_mean = Beta('BETA_TIME_TRAIN_mean', 0, None, None, 0)
    BETA_TIME_TRAIN_std = Beta('BETA_TIME_TRAIN_std', 1, None, None, 0)
    BETA_TIME_TRAIN_random = -exp(BETA_TIME_TRAIN_mean + BETA_TIME_TRAIN_std *
                                  bioDraws('BETA_TIME_TRAIN_random', 'NORMAL'))

    ##ML RANDOM SPECIFIC TIME SM  LOGNORMAL
    BETA_TIME_SM_mean = Beta('BETA_TIME_SM_mean', 0, None, None, 0)
    BETA_TIME_SM_std = Beta('BETA_TIME_SM_std', 1, None, None, 0)
    BETA_TIME_SM_random = -exp(BETA_TIME_SM_mean + BETA_TIME_SM_std *
                               bioDraws('BETA_TIME_SM_random', 'NORMAL'))

    ##ML RANDOM SPECIFIC TIME CAR LOGNORMAL
    BETA_TIME_CAR_mean = Beta('BETA_TIME_CAR_mean', 0, None, None, 0)
    BETA_TIME_CAR_std = Beta('BETA_TIME_CAR_std', 1, None, None, 0)
    BETA_TIME_CAR_random = -exp(BETA_TIME_CAR_mean + BETA_TIME_CAR_std *
                                bioDraws('BETA_TIME_CAR_random', 'NORMAL'))

    ##ML RANDOM GENERIC COST LOGNORMAL
    BETA_COST_mean = Beta('BETA_COST_mean', 0, None, None, 0)
    BETA_COST_std = Beta('BETA_COST_std', 1, None, None, 0)
    BETA_COST_random = -exp(BETA_COST_mean + BETA_COST_std *
                            bioDraws('BETA_COST_random', 'NORMAL'))

    ##ML RANDOM GENERIC HE LOGNORMAL
    BETA_HE_mean = Beta('BETA_HE_mean', 0, None, None, 0)
    BETA_HE_std = Beta('BETA_HE_std', 1, None, None, 0)
    BETA_HE_random = -exp(BETA_HE_mean +
                          BETA_HE_std * bioDraws('BETA_HE_random', 'NORMAL'))

    ##ML RANDOM GENERIC TIME NORMAL
    BETA_TIME_mean_Norm = Beta('BETA_TIME_mean_Norm', 0, None, None, 0)
    BETA_TIME_std_Norm = Beta('BETA_TIME_std_Norm', 1, None, None, 0)
    BETA_TIME_random_Norm = BETA_TIME_mean_Norm + BETA_TIME_std_Norm * bioDraws(
        'BETA_TIME_random_Norm', 'NORMAL')

    ##ML RANDOM SPECIFIC TIME TRAIN LOGNORMAL
    BETA_TIME_TRAIN_mean_Norm = Beta('BETA_TIME_TRAIN_mean_Norm', 0, None,
                                     None, 0)
    BETA_TIME_TRAIN_std_Norm = Beta('BETA_TIME_TRAIN_std_Norm', 1, None, None,
                                    0)
    BETA_TIME_TRAIN_random_Norm = BETA_TIME_TRAIN_mean_Norm + BETA_TIME_TRAIN_std_Norm * bioDraws(
        'BETA_TIME_TRAIN_random_Norm', 'NORMAL')

    ##ML RANDOM SPECIFIC TIME SM  NORMAL
    BETA_TIME_SM_mean_Norm = Beta('BETA_TIME_SM_mean_Norm', 0, None, None, 0)
    BETA_TIME_SM_std_Norm = Beta('BETA_TIME_SM_std_Norm', 1, None, None, 0)
    BETA_TIME_SM_random_Norm = BETA_TIME_SM_mean_Norm + BETA_TIME_SM_std_Norm * bioDraws(
        'BETA_TIME_SM_random_Norm', 'NORMAL')

    ##ML RANDOM SPECIFIC TIME CAR NORMAL
    BETA_TIME_CAR_mean_Norm = Beta('BETA_TIME_CAR_mean_Norm', 0, None, None, 0)
    BETA_TIME_CAR_std_Norm = Beta('BETA_TIME_CAR_std_Norm', 1, None, None, 0)
    BETA_TIME_CAR_random_Norm = BETA_TIME_CAR_mean_Norm + BETA_TIME_CAR_std_Norm * bioDraws(
        'BETA_TIME_CAR_random_Norm', 'NORMAL')

    ##ML RANDOM GENERIC COST LOGNORMAL
    BETA_COST_PUB_mean = Beta('BBETA_COST_PUB_mean', 0, None, None, 0)
    BETA_COST_PUB_std = Beta('BBETA_COST_PUB_std', 1, None, None, 0)
    BETA_COST_PUB_random = -exp(BETA_COST_PUB_mean + BETA_COST_PUB_std *
                                bioDraws('BBETA_COST_PUB_random', 'NORMAL'))

    ##ML RANDOM GENERIC COST NORMAL
    BETA_COST_mean_Norm = Beta('BETA_COST_mean_Norm', 0, None, None, 0)
    BETA_COST_std_Norm = Beta('BETA_COST_std_Norm', 1, None, None, 0)
    BETA_COST_random_Norm = BETA_COST_mean_Norm + BETA_COST_std_Norm * bioDraws(
        'BETA_COST_random_Norm', 'NORMAL')

    ##ML RANDOM GENERIC HE NORMAL
    BETA_HE_mean_Norm = Beta('BETA_HE_mean_Norm', 0, None, None, 0)
    BETA_HE_std_Norm = Beta('BETA_HE_std_Norm', 1, None, None, 0)
    BETA_HE_random_Norm = BETA_HE_mean_Norm + BETA_HE_std_Norm * bioDraws(
        'BETA_HE_random_Norm', 'NORMAL')
    '''
    ***********************************************************************************************
    '''

    #PUBLIC
    TRAIN_COST_SCALED = DefineVariable('TRAIN_COST_SCALED',\
                                       TRAIN_COST / COST_SCALE_PUB,db_train)
    SM_COST_SCALED = DefineVariable('SM_COST_SCALED', SM_COST / COST_SCALE_PUB,
                                    db_train)

    #CAR
    CAR_COST_SCALED = DefineVariable('CAR_COST_SCALED',
                                     CAR_CO / COST_SCALE_CAR, db_train)
    '''
    ***********************************************************************************************
    '''
    ##Scaling 'COST', 'TRAVEL-TIME' and 'HE' by a factor of 100 and adding the scaled variables to the database

    TRAIN_TT_SCALED = DefineVariable('TRAIN_TT_SCALED',\
                                     TRAIN_TT / 100.0,db_train)

    TRAIN_HE_SCALED = DefineVariable('TRAIN_HE_SCALED',\
                                       TRAIN_HE / 100, db_train)

    SM_TT_SCALED = DefineVariable('SM_TT_SCALED', SM_TT / 100.0, db_train)

    SM_HE_SCALED = DefineVariable('SM_HE_SCALED',\
                                       SM_HE / 100, db_train)

    CAR_TT_SCALED = DefineVariable('CAR_TT_SCALED', CAR_TT / 100, db_train)

    ###Defining new variables and adding columns to the database
    #Age
    AGE_1 = DefineVariable('AGE_1', (AGE == 1),
                           db_train)  #don't scale because is cathegorical
    AGE_2 = DefineVariable('AGE_2', (AGE == 2), db_train)
    AGE_3 = DefineVariable('AGE_3', (AGE == 3), db_train)
    AGE_4 = DefineVariable('AGE_4', (AGE == 4), db_train)
    AGE_5 = DefineVariable('AGE_5', (AGE == 5), db_train)
    AGE_6 = DefineVariable('AGE_6', (AGE == 6), db_train)

    #Purpose
    PRIVATE = DefineVariable("PRIVATE", (PURPOSE == 1), db_train)
    COMMUTER = DefineVariable("COMMUTER", (PURPOSE == 2), db_train)
    BUSINESS = DefineVariable("BUSINESS", (PURPOSE == 3), db_train)

    #Model Estimation
    av = {3: CAR_AV_SP, 1: TRAIN_AV_SP, 2: SM_AV}
    obsprob = exp(models.loglogit(V, av, CHOICE))
    condprobIndiv = PanelLikelihoodTrajectory(obsprob)
    logprob = log(MonteCarlo(condprobIndiv))
    bg = bio.BIOGEME(db_train, logprob, numberOfDraws=Draws)
    bg.modelName = ModName
    result = bg.estimate()
    return result
コード例 #14
0
def run_estimation(data_file_directory,
                   data_file_name,
                   output_directory,
                   output_file_name='logit_telecommuting'):
    """
    :author: Antonin Danalet, based on the example '01logit.py' by Michel Bierlaire, EPFL, on biogeme.epfl.ch

    A binary logit model on the possibility to work from home at least some times."""

    # Read the data
    df = pd.read_csv(data_file_directory / data_file_name, ';')
    database = db.Database('persons', df)

    # The following statement allows you to use the names of the variable as Python variable.
    globals().update(database.variables)

    # Parameters to be estimated
    alternative_specific_constant = Beta('alternative_specific_constant', 0,
                                         None, None, 0)

    b_no_post_school_education = Beta('b_no_post_school_education', 0, None,
                                      None, 0)
    b_secondary_education = Beta('b_secondary_education', 0, None, None, 0)
    b_tertiary_education = Beta('b_tertiary_education', 0, None, None, 0)
    b_university = Beta('b_university', 0, None, None, 1)

    b_male = Beta('b_male', 0, None, None, 1)

    b_single_household = Beta('b_single_household', 0, None, None, 1)
    b_couple_without_children = Beta('b_couple_without_children', 0, None,
                                     None, 0)
    b_couple_with_children = Beta('b_couple_with_children', 0, None, None, 1)
    b_single_parent_with_children = Beta('b_single_parent_with_children', 0,
                                         None, None, 1)
    b_not_family_household = Beta('b_not_family_household', 0, None, None, 1)

    b_public_transport_connection_quality_are_a_home = Beta(
        'b_public_transport_connection_quality_are_a_home', 0, None, None, 1)
    b_public_transport_connection_quality_are_b_home = Beta(
        'b_public_transport_connection_quality_are_b_home', 0, None, None, 1)
    b_public_transport_connection_quality_are_c_home = Beta(
        'b_public_transport_connection_quality_are_c_home', 0, None, None, 1)
    b_public_transport_connection_quality_are_d_home = Beta(
        'b_public_transport_connection_quality_are_d_home', 0, None, None, 1)
    b_public_transport_connection_quality_are_na_home = Beta(
        'b_public_transport_connection_quality_are_na_home', 0, None, None, 0)

    b_public_transport_connection_quality_are_a_work = Beta(
        'b_public_transport_connection_quality_are_a_work', 0, None, None, 1)
    b_public_transport_connection_quality_are_b_work = Beta(
        'b_public_transport_connection_quality_are_b_work', 0, None, None, 1)
    b_public_transport_connection_quality_are_c_work = Beta(
        'b_public_transport_connection_quality_are_c_work', 0, None, None, 1)
    b_public_transport_connection_quality_are_d_work = Beta(
        'b_public_transport_connection_quality_are_d_work', 0, None, None, 1)
    b_public_transport_connection_quality_are_na_work = Beta(
        'b_public_transport_connection_quality_are_na_work', 0, None, None, 1)

    b_urban_home = Beta('b_urban_home', 0, None, None, 1)
    b_rural_home = Beta('b_rural_home', 0, None, None, 1)
    b_intermediate_home = Beta('b_intermediate_home', 0, None, None, 1)
    b_urban_work = Beta('b_urban_work', 0, None, None, 1)
    b_rural_work = Beta('b_rural_work', 0, None, None, 1)
    b_intermediate_work = Beta('b_intermediate_work', 0, None, None, 1)

    b_home_work_distance = Beta('b_home_work_distance', 0, None, None, 0)
    b_home_work_distance_zero = Beta('b_home_work_distance_zero', 0, None,
                                     None, 0)
    b_home_work_distance_na = Beta('b_home_work_distance_na', 0, None, None, 0)

    b_business_sector_agriculture = Beta('b_business_sector_agriculture', 0,
                                         None, None, 1)
    b_business_sector_production = Beta('b_business_sector_production', 0,
                                        None, None, 0)
    b_business_sector_wholesale = Beta('b_business_sector_wholesale', 0, None,
                                       None, 0)
    b_business_sector_retail = Beta('b_business_sector_retail', 0, None, None,
                                    0)
    b_business_sector_gastronomy = Beta('b_business_sector_gastronomy', 0,
                                        None, None, 0)
    b_business_sector_finance = Beta('b_business_sector_finance', 0, None,
                                     None, 0)
    b_business_sector_services_fc = Beta('b_business_sector_services_fc', 0,
                                         None, None, 1)
    b_business_sector_other_services = Beta('b_business_sector_other_services',
                                            0, None, None, 0)
    b_business_sector_others = Beta('b_business_sector_others', 0, None, None,
                                    0)
    b_business_sector_non_movers = Beta('b_business_sector_non_movers', 0,
                                        None, None, 0)
    b_employees = Beta('b_employees', 0, None, None, 1)
    b_executives = Beta('b_executives', 0, None, None, 0)
    b_german = Beta('b_german', 0, None, None, 0)
    b_nationality_ch_germany_france_italy_nw_e = Beta(
        'b_nationality_ch_germany_france_italy_nw_e', 0, None, None, 1)
    b_nationality_south_west_europe = Beta('b_nationality_south_west_europe',
                                           0, None, None, 1)
    b_nationality_southeast_europe = Beta('b_nationality_southeast_europe', 0,
                                          None, None, 1)
    # b_several_part_time_jobs = Beta('b_several_part_time_jobs', 0, None, None, 1)
    b_hh_income_na = Beta('b_hh_income_na', 0, None, None, 0)
    b_hh_income_8000_or_less = Beta('b_hh_income_8000_or_less', 0, None, None,
                                    0)
    b_hh_income_more_than_8000 = Beta('b_hh_income_more_than_8000', 0, None,
                                      None, 1)

    b_general_abo = Beta('b_general_abo', 0, None, None, 0)
    b_regional_abo = Beta('b_regional_abo', 0, None, None, 1)
    b_regional_abo_na = Beta('b_regional_abo_na', 0, None, None, 1)
    b_half_fare_abo = Beta('b_half_fare_abo', 0, None, None, 1)
    b_half_fare_abo_na = Beta('b_half_fare_abo_na', 0, None, None, 1)
    b_car_avail = Beta('b_car_avail', 0, None, None, 1)
    b_car_avail_na = Beta('b_car_avail_na', 0, None, None, 1)

    b_mobility_resource_na = Beta('b_mobility_resource_na', 0, None, None, 0)
    b_mobility_resource_car_general_abo = Beta(
        'b_mobility_resource_car_general_abo', 0, None, None, 1)
    b_mobility_resource_car_half_fare_abo = Beta(
        'b_mobility_resource_car_half_fare_abo', 0, None, None, 0)
    b_mobility_resource_car = Beta('b_mobility_resource_car', 0, None, None, 1)
    b_mobility_resource_general_abo = Beta('b_mobility_resource_general_abo',
                                           0, None, None, 1)
    b_mobility_resource_half_fare_abo = Beta(
        'b_mobility_resource_half_fare_abo', 0, None, None, 1)
    b_mobility_resource_none = Beta('b_mobility_resource_none', 0, None, None,
                                    1)
    b_mobility_resource_car_half_fare_regional_abo = Beta(
        'b_mobility_resource_car_half_fare_regional_abo', 0, None, None, 1)
    b_mobility_resource_car_regional_abo = Beta(
        'b_mobility_resource_car_regional_abo', 0, None, None, 1)
    b_mobility_resource_half_fare_regional_abo = Beta(
        'b_mobility_resource_half_fare_regional_abo', 0, None, None, 1)
    b_mobility_resource_regional_abo = Beta('b_mobility_resource_regional_abo',
                                            0, None, None, 1)

    # Definition of new variables
    male = DefineVariable('male', sex == 1, database)

    single_household = DefineVariable('single_household', hh_type == 10,
                                      database)
    couple_without_children = DefineVariable('couple_without_children',
                                             hh_type == 210, database)
    couple_with_children = DefineVariable('couple_with_children',
                                          hh_type == 220, database)
    single_parent_with_children = DefineVariable('single_parent_with_children',
                                                 hh_type == 230, database)
    not_family_household = DefineVariable('not_family_household',
                                          hh_type == 30, database)

    public_transport_connection_quality_ARE_A_home = DefineVariable(
        'public_transport_connection_quality_ARE_A_home',
        public_transport_connection_quality_ARE_home == 1, database)
    public_transport_connection_quality_ARE_B_home = DefineVariable(
        'public_transport_connection_quality_ARE_B_home',
        public_transport_connection_quality_ARE_home == 2, database)
    public_transport_connection_quality_ARE_C_home = DefineVariable(
        'public_transport_connection_quality_ARE_C_home',
        public_transport_connection_quality_ARE_home == 3, database)
    public_transport_connection_quality_ARE_D_home = DefineVariable(
        'public_transport_connection_quality_ARE_D_home',
        public_transport_connection_quality_ARE_home == 4, database)
    public_transport_connection_quality_ARE_NA_home = DefineVariable(
        'public_transport_connection_quality_ARE_NA_home',
        public_transport_connection_quality_ARE_home == 5, database)

    public_transport_connection_quality_ARE_A_work = DefineVariable(
        'public_transport_connection_quality_ARE_A_work',
        public_transport_connection_quality_ARE_work == 1, database)
    public_transport_connection_quality_ARE_B_work = DefineVariable(
        'public_transport_connection_quality_ARE_B_work',
        public_transport_connection_quality_ARE_work == 2, database)
    public_transport_connection_quality_ARE_C_work = DefineVariable(
        'public_transport_connection_quality_ARE_C_work',
        public_transport_connection_quality_ARE_work == 3, database)
    public_transport_connection_quality_ARE_D_work = DefineVariable(
        'public_transport_connection_quality_ARE_D_work',
        public_transport_connection_quality_ARE_work == 4, database)
    public_transport_connection_quality_ARE_NA_work = DefineVariable(
        'public_transport_connection_quality_ARE_NA_work',
        public_transport_connection_quality_ARE_work == 5, database)

    urban_home = DefineVariable('urban_home', urban_typology_home == 1,
                                database)
    rural_home = DefineVariable('rural_home', urban_typology_home == 3,
                                database)
    intermediate_home = DefineVariable('intermediate_home',
                                       urban_typology_home == 2, database)
    urban_work = DefineVariable('urban_work', urban_typology_work == 1,
                                database)
    rural_work = DefineVariable('rural_work', urban_typology_work == 3,
                                database)
    intermediate_work = DefineVariable('intermediate_work',
                                       urban_typology_work == 2, database)

    home_work_distance = DefineVariable(
        'home_work_distance',
        home_work_crow_fly_distance * (home_work_crow_fly_distance >= 0.0) /
        100000.0, database)
    home_work_distance_zero = DefineVariable(
        'home_work_distance_zero', home_work_crow_fly_distance == 0.0,
        database)
    home_work_distance_na = DefineVariable('home_work_distance_na',
                                           home_work_crow_fly_distance == -999,
                                           database)

    employees = DefineVariable('employees', work_position == 2, database)
    executives = DefineVariable('executives', work_position == 1, database)

    german = DefineVariable('german', language == 1, database)

    nationality_switzerland = DefineVariable('nationality_switzerland',
                                             nation == 8100, database)
    nationality_germany_austria_lichtenstein = DefineVariable(
        'nationality_germany_austria_lichtenstein',
        (nation == 8207) | (nation == 8229) | (nation == 8222), database)
    nationality_italy_vatican = DefineVariable(
        'nationality_italy_vatican', (nation == 8218) | (nation == 8241),
        database)
    nationality_france_monaco_san_marino = DefineVariable(
        'nationality_france_monaco_san_marino',
        (nation == 8212) | (nation == 8226) | (nation == 8233), database)
    nationality_northwestern_europe = DefineVariable(
        'nationality_northwestern_europe',
        (nation == 8204) |  # Belgium
        (nation == 8223) |  # Luxembourg
        (nation == 8227) |  # Netherlands
        (nation == 8206) |  # Denmark
        (nation == 8211) |  # Finland
        (nation == 8215) |  # United Kingdom
        (nation == 8216) |  # Ireland
        (nation == 8217) |  # Iceland
        (nation == 8228) |  # Norway
        (nation == 8234),  # Sweden
        database)
    nationality_south_west_europe = DefineVariable(
        'nationality_south_west_europe',
        (nation == 8231) |  # Portugal
        (nation == 8236) |  # Spain
        (nation == 8202),  # Andorra
        database)
    nationality_southeast_europe = DefineVariable(
        'nationality_southeast_europe',
        (nation == 8224) |  # Malta
        (nation == 8201) |  # Albania
        (nation == 8214) |  # Greece
        (nation == 8256) |  # Kosovo
        (nation == 8250) |  # Croatia
        (nation == 8251) |  # Slovenia
        (nation == 8252) |  # Bosnia and Herzegovina
        (nation == 8255) |  # Macedonia
        (nation == 8205) |  # Bulgaria
        (nation == 8239) |  # Turkey
        (nation == 8242) |  # Cyprus
        (nation == 8248) |  # Serbia
        (nation == 8254),  # Montenegro
        database)
    nationality_eastern_europe = DefineVariable(
        'nationality_eastern_europe',
        (nation == 8230) |  # Poland
        (nation == 8232) |  # Rumania
        (nation == 8240) |  # Hungary
        (nation == 8243) |  # Slovakia
        (nation == 8244) |  # Czech Republic
        (nation == 8263) |  # Moldavia
        (nation == 8265) |  # Ukraine
        (nation == 8266) |  # Belarus
        (nation == 8260) |  # Estonia
        (nation == 8261) |  # Latvia
        (nation == 8262),  # Lithuania
        database)

    # several_part_time_jobs = DefineVariable('several_part_time_jobs', full_part_time_job == 3, database)

    hh_income_na = DefineVariable('hh_income_na', hh_income < 0, database)
    hh_income_less_than_2000 = DefineVariable('hh_income_less_than_4000',
                                              hh_income == 1, database)
    hh_income_2000_to_4000 = DefineVariable('hh_income_2000_to_4000',
                                            hh_income == 2, database)
    hh_income_4001_to_6000 = DefineVariable('hh_income_4001_to_6000',
                                            hh_income == 3, database)
    hh_income_6001_to_8000 = DefineVariable('hh_income_6001_to_8000',
                                            hh_income == 4, database)
    hh_income_8001_to_10000 = DefineVariable('hh_income_8001_to_10000',
                                             hh_income == 5, database)
    hh_income_10001_to_12000 = DefineVariable('hh_income_10001_to_12000',
                                              hh_income == 6, database)
    hh_income_12001_to_14000 = DefineVariable('hh_income_12001_to_14000',
                                              hh_income == 7, database)
    hh_income_14001_to_16000 = DefineVariable('hh_income_14001_to_16000',
                                              hh_income == 8, database)
    hh_income_more_than_16000 = DefineVariable('hh_income_more_than_16000',
                                               hh_income == 9, database)

    general_abo = DefineVariable('general_abo', GA_ticket == 1, database)
    regional_abo = DefineVariable('regional_abo', Verbund_Abo == 1, database)
    half_fare_abo = DefineVariable('half_fare_abo', halbtax_ticket == 1,
                                   database)
    car_avail_always_or_on_demand = DefineVariable(
        'car_avail_always_or_on_demand', (car_avail == 1) | (car_avail == 2),
        database)
    regional_abo_na = DefineVariable('regional_abo_na', Verbund_Abo < 0,
                                     database)
    half_fare_abo_na = DefineVariable('half_fare_abo_na', halbtax_ticket < 0,
                                      database)
    car_avail_na = DefineVariable('car_avail_na', car_avail < 0, database)

    mobility_resource_na = DefineVariable('mobility_resource_na',
                                          mobility_resources == -98, database)
    mobility_resource_car_general_abo = DefineVariable(
        'mobility_resource_car_general_abo', mobility_resources == 1, database)
    mobility_resource_car_half_fare_abo = DefineVariable(
        'mobility_resource_car_half_fare_abo', mobility_resources == 2,
        database)
    mobility_resource_car = DefineVariable('mobility_resource_car',
                                           mobility_resources == 3, database)
    mobility_resource_general_abo = DefineVariable(
        'mobility_resource_general_abo', mobility_resources == 4, database)
    mobility_resource_half_fare_abo = DefineVariable(
        'mobility_resource_half_fare_abo', mobility_resources == 5, database)
    mobility_resource_none = DefineVariable('mobility_resource_none',
                                            mobility_resources == 6, database)
    mobility_resource_car_half_fare_regional_abo = DefineVariable(
        'mobility_resource_car_half_fare_regional_abo',
        mobility_resources == 20, database)
    mobility_resource_car_regional_abo = DefineVariable(
        'mobility_resource_car_regional_abo', mobility_resources == 30,
        database)
    mobility_resource_half_fare_regional_abo = DefineVariable(
        'mobility_resource_half_fare_regional_abo', mobility_resources == 50,
        database)
    mobility_resource_regional_abo = DefineVariable(
        'mobility_resource_regional_abo', mobility_resources == 60, database)

    #  Utility
    U = alternative_specific_constant + \
        b_executives * executives + \
        b_employees * employees + \
        b_no_post_school_education * no_post_school_educ + \
        b_secondary_education * secondary_education + \
        b_tertiary_education * tertiary_education + \
        b_university * university + \
        b_male * male + \
        b_single_household * single_household + \
        b_couple_without_children * couple_without_children + \
        b_couple_with_children * couple_with_children + \
        b_single_parent_with_children * single_parent_with_children + \
        b_not_family_household * not_family_household + \
        b_public_transport_connection_quality_are_a_home * public_transport_connection_quality_ARE_A_home + \
        b_public_transport_connection_quality_are_b_home * public_transport_connection_quality_ARE_B_home + \
        b_public_transport_connection_quality_are_c_home * public_transport_connection_quality_ARE_C_home + \
        b_public_transport_connection_quality_are_d_home * public_transport_connection_quality_ARE_D_home + \
        b_public_transport_connection_quality_are_na_home * public_transport_connection_quality_ARE_NA_home + \
        b_public_transport_connection_quality_are_a_work * public_transport_connection_quality_ARE_A_work + \
        b_public_transport_connection_quality_are_b_work * public_transport_connection_quality_ARE_B_work + \
        b_public_transport_connection_quality_are_c_work * public_transport_connection_quality_ARE_C_work + \
        b_public_transport_connection_quality_are_d_work * public_transport_connection_quality_ARE_D_work + \
        b_public_transport_connection_quality_are_na_work * public_transport_connection_quality_ARE_NA_work + \
        b_urban_home * urban_home + \
        b_rural_home * rural_home + \
        b_intermediate_home * intermediate_home + \
        b_urban_work * urban_work + \
        b_rural_work * rural_work + \
        b_intermediate_work * intermediate_work + \
        b_home_work_distance * home_work_distance + \
        b_home_work_distance_zero * home_work_distance_zero + \
        b_home_work_distance_na * home_work_distance_na + \
        models.piecewiseFormula(age, [15, 19, 31, 79, 85]) + \
        b_business_sector_agriculture * business_sector_agriculture + \
        b_business_sector_retail * business_sector_retail + \
        b_business_sector_gastronomy * business_sector_gastronomy + \
        b_business_sector_finance * business_sector_finance + \
        b_business_sector_production * business_sector_production + \
        b_business_sector_wholesale * business_sector_wholesale + \
        b_business_sector_services_fc * business_sector_services_fc + \
        b_business_sector_other_services * business_sector_other_services + \
        b_business_sector_others * business_sector_others + \
        b_business_sector_non_movers * business_sector_non_movers + \
        b_german * german + \
        b_nationality_ch_germany_france_italy_nw_e * nationality_switzerland + \
        b_nationality_ch_germany_france_italy_nw_e * nationality_germany_austria_lichtenstein + \
        b_nationality_ch_germany_france_italy_nw_e * nationality_italy_vatican + \
        b_nationality_ch_germany_france_italy_nw_e * nationality_france_monaco_san_marino + \
        b_nationality_ch_germany_france_italy_nw_e * nationality_northwestern_europe + \
        b_nationality_south_west_europe * nationality_south_west_europe + \
        b_nationality_southeast_europe * nationality_southeast_europe + \
        b_nationality_ch_germany_france_italy_nw_e * nationality_eastern_europe + \
        models.piecewiseFormula(work_percentage, [0, 90, 101]) + \
        b_hh_income_na * hh_income_na + \
        b_hh_income_8000_or_less * hh_income_less_than_2000 + \
        b_hh_income_8000_or_less * hh_income_2000_to_4000 + \
        b_hh_income_8000_or_less * hh_income_4001_to_6000 + \
        b_hh_income_8000_or_less * hh_income_6001_to_8000 + \
        b_hh_income_more_than_8000 * hh_income_8001_to_10000 + \
        b_hh_income_more_than_8000 * hh_income_10001_to_12000 + \
        b_hh_income_more_than_8000 * hh_income_12001_to_14000 + \
        b_hh_income_more_than_8000 * hh_income_14001_to_16000 + \
        b_hh_income_more_than_8000 * hh_income_more_than_16000 + \
        b_general_abo * general_abo + \
        b_regional_abo * regional_abo + \
        b_half_fare_abo * half_fare_abo + \
        b_car_avail * car_avail_always_or_on_demand + \
        b_regional_abo_na * regional_abo_na + \
        b_half_fare_abo_na * half_fare_abo_na + \
        b_car_avail_na * car_avail_na + \
        b_mobility_resource_na * mobility_resource_na + \
        b_mobility_resource_car_general_abo * mobility_resource_car_general_abo + \
        b_mobility_resource_car_half_fare_abo * mobility_resource_car_half_fare_abo + \
        b_mobility_resource_car * mobility_resource_car + \
        b_mobility_resource_general_abo * mobility_resource_general_abo + \
        b_mobility_resource_half_fare_abo * mobility_resource_half_fare_abo + \
        b_mobility_resource_none * mobility_resource_none + \
        b_mobility_resource_car_half_fare_regional_abo * mobility_resource_car_half_fare_regional_abo + \
        b_mobility_resource_car_regional_abo * mobility_resource_car_regional_abo + \
        b_mobility_resource_half_fare_regional_abo * mobility_resource_half_fare_regional_abo + \
        b_mobility_resource_regional_abo * mobility_resource_regional_abo
    U_no_telecommuting = 0

    # Associate utility functions with the numbering of alternatives
    V = {
        1: U,  # Yes or sometimes
        0: U_no_telecommuting
    }  # No

    av = {1: 1, 0: 1}

    # Definition of the model. This is the contribution of each
    # observation to the log likelihood function.
    logprob = models.loglogit(
        V,
        av,  # All alternatives are supposed to be always available
        telecommuting)  # Choice variable

    # Change the working directory, so that biogeme writes in the correct folder
    standard_directory = os.getcwd()
    os.chdir(output_directory)

    # Create the Biogeme object
    biogeme = bio.BIOGEME(database, logprob)
    biogeme.modelName = output_file_name

    # Estimate the parameters
    results = biogeme.estimate()

    # Get the results in LaTeX
    results.writeLaTeX()

    # Go back to the normal working directory
    os.chdir(standard_directory)
コード例 #15
0
Opt2_SchedDelayLate = DefineVariable('Opt2_SchedDelayLate',
                                     (SchedDelay_2 * (SchedDelay_2 > 0)) / 60,
                                     database)
Opt3_SchedDelayLate = DefineVariable('Opt3_SchedDelayLate',
                                     (SchedDelay_3 * (SchedDelay_3 > 0)) / 60,
                                     database)
LogFare_1 = DefineVariable('LogFare_1', log(Fare_1), database)
LogFare_2 = DefineVariable('LogFare_2', log(Fare_2), database)
LogFare_3 = DefineVariable('LogFare_3', log(Fare_3), database)

# Utilities
Opt1 = Constant1 + LogFare * LogFare_1 + Legroom * Legroom_1 + SchedDE * Opt1_SchedDelayEarly + SchedDL * Opt1_SchedDelayLate + Total_TT1 * TripTimeHours_1
Opt2 = Constant2 + LogFare * LogFare_2 + Legroom * Legroom_2 + SchedDE * Opt2_SchedDelayEarly + SchedDL * Opt2_SchedDelayLate + Total_TT2 * TripTimeHours_2
Opt3 = Constant3 + LogFare * LogFare_3 + Legroom * Legroom_3 + SchedDE * Opt3_SchedDelayEarly + SchedDL * Opt3_SchedDelayLate + Total_TT3 * TripTimeHours_3
V = {1: Opt1, 2: Opt2, 3: Opt3}
av = {1: 1, 2: 1, 3: 1}

# The choice model is a logit, with availability conditions
logprob = loglogit(V, av, chosenAlternative)
biogeme = bio.BIOGEME(database, logprob)
biogeme.modelName = "logit_airline_log"
results = biogeme.estimate()

# Get the results in a pandas table
pandasResults = results.getEstimatedParameters()
print(pandasResults)
print(f"Nbr of observations: {database.getNumberOfObservations()}")
print(f"LL(0) = {results.data.initLogLike:.3f}")
print(f"LL(beta) = {results.data.logLike:.3f}")
print(f"rho bar square = {results.data.rhoBarSquare:.3g}")
print(f"Output file: {results.data.htmlFileName}")
コード例 #16
0
ファイル: 08boxcox.py プロジェクト: jiaodaxiaozi/biogeme
V2 = ASC_SM + \
     B_TIME * models.boxcox(SM_TT_SCALED, LAMBDA) + \
     B_COST * SM_COST_SCALED
V3 = ASC_CAR + \
     B_TIME * models.boxcox(CAR_TT_SCALED, LAMBDA) + \
     B_COST * CAR_CO_SCALED

# Associate utility functions with the numbering of alternatives
V = {1: V1, 2: V2, 3: V3}

# Associate the availability conditions with the alternatives
av = {1: TRAIN_AV_SP, 2: SM_AV, 3: CAR_AV_SP}

# Definition of the model. This is the contribution of each
# observation to the log likelihood function.
logprob = models.loglogit(V, av, CHOICE)

# Define level of verbosity
logger = msg.bioMessage()
logger.setSilent()
#logger.setWarning()
#logger.setGeneral()
#logger.setDetailed()

# Create the Biogeme object
biogeme = bio.BIOGEME(database, logprob)
biogeme.modelName = '08boxcox'

# Estimate the parameters
results = biogeme.estimate()
pandasResults = results.getEstimatedParameters()
def run_estimation_2015_2020():
    """
    :author: Antonin Danalet, based on the example '01logit.py' by Michel Bierlaire, EPFL, on biogeme.epfl.ch

    A binary logit model on the possibility to work from home at least some times."""

    # Read the data
    data_file_directory = Path('../data/output/data/estimation/2015_2020/')
    df = pd.read_csv(data_file_directory / 'persons.csv', ';')
    database = db.Database('persons', df)

    # The following statement allows you to use the names of the variable as Python variable.
    globals().update(database.variables)

    # Parameters to be estimated
    alternative_specific_constant = Beta('alternative_specific_constant', 0,
                                         None, None, 0)

    b_no_post_school_education = Beta('b_no_post_school_education', 0, None,
                                      None, 0)
    b_secondary_education = Beta('b_secondary_education', 0, None, None, 0)
    b_tertiary_education = Beta('b_tertiary_education', 0, None, None, 0)

    b_male_2020 = Beta('b_male_2020', 0, None, None, 1)

    b_single_household_2020 = Beta('b_single_household_2020', 0, None, None, 1)
    b_couple_without_children_2015 = Beta('b_couple_without_children_2015', 0,
                                          None, None, 0)
    b_couple_without_children_2020 = Beta('b_couple_without_children_2020', 0,
                                          None, None, 0)
    b_couple_with_children_2020 = Beta('b_couple_with_children_2020', 0, None,
                                       None, 1)
    b_single_parent_with_children_2020 = Beta(
        'b_single_parent_with_children_2020', 0, None, None, 1)
    b_not_family_household_2020 = Beta('b_not_family_household_2020', 0, None,
                                       None, 1)

    b_public_transport_connection_quality_abc_home_2020 = Beta(
        'b_public_transport_connection_quality_abc_home_2020', 0, None, None,
        1)
    b_public_transport_connection_quality_na_home_2015 = Beta(
        'b_public_transport_connection_quality_na_home_2015', 0, None, None, 0)
    b_public_transport_connection_quality_na_home_2020 = Beta(
        'b_public_transport_connection_quality_na_home_2020', 0, None, None, 1)

    b_public_transport_connection_quality_abcd_work_2020 = Beta(
        'b_public_transport_connection_quality_abcd_work_2020', 0, None, None,
        1)

    b_urban_home_2020 = Beta('b_urban_home_2020', 0, None, None, 1)
    b_rural_home_2020 = Beta('b_rural_home_2020', 0, None, None, 1)
    b_intermediate_home_2020 = Beta('b_intermediate_home_2020', 0, None, None,
                                    1)
    b_urban_work_2020 = Beta('b_urban_work_2020', 0, None, None, 1)
    b_rural_work_2020 = Beta('b_rural_work_2020', 0, None, None, 1)
    b_intermediate_work_2020 = Beta('b_intermediate_work_2020', 0, None, None,
                                    0)

    b_home_work_distance = Beta('b_home_work_distance', 0, None, None, 0)
    b_home_work_distance_zero = Beta('b_home_work_distance_zero', 0, None,
                                     None, 0)
    b_home_work_distance_na = Beta('b_home_work_distance_na', 0, None, None, 0)

    b_business_sector_agriculture_2020 = Beta(
        'b_business_sector_agriculture_2020', 0, None, None, 1)
    b_business_sector_production = Beta('b_business_sector_production', 0,
                                        None, None, 0)
    b_business_sector_wholesale = Beta('b_business_sector_wholesale', 0, None,
                                       None, 0)
    b_business_sector_retail = Beta('b_business_sector_retail', 0, None, None,
                                    0)
    b_business_sector_gastronomy = Beta('b_business_sector_gastronomy', 0,
                                        None, None, 0)
    b_business_sector_finance = Beta('b_business_sector_finance', 0, None,
                                     None, 0)
    b_business_sector_services_fc_2020 = Beta(
        'b_business_sector_services_fc_2020', 0, None, None, 1)
    b_business_sector_other_services = Beta('b_business_sector_other_services',
                                            0, None, None, 0)
    b_business_sector_others = Beta('b_business_sector_others', 0, None, None,
                                    0)
    b_business_sector_non_movers = Beta('b_business_sector_non_movers', 0,
                                        None, None, 0)
    b_executives = Beta('b_executives', 0, None, None, 0)
    b_german = Beta('b_german', 0, None, None, 0)
    b_hh_income_na = Beta('b_hh_income_na', 0, None, None, 0)
    b_hh_income_8000_or_less = Beta('b_hh_income_8000_or_less', 0, None, None,
                                    0)

    b_owning_a_general_abo = Beta('b_owning_a_general_abo', 0, None, None, 0)
    b_regional_abo_2020 = Beta('b_regional_abo_2020', 0, None, None, 1)
    b_regional_abo_na_2020 = Beta('b_regional_abo_na_2020', 0, None, None, 1)
    b_half_fare_abo_2020 = Beta('b_half_fare_abo_2020', 0, None, None, 1)
    b_half_fare_abo_na_2020 = Beta('b_half_fare_abo_na_2020', 0, None, None, 1)
    b_car_avail_2020 = Beta('b_car_avail_2020', 0, None, None, 1)
    b_car_avail_na_2020 = Beta('b_car_avail_na_2020', 0, None, None, 1)

    b_mobility_resource_na = Beta('b_mobility_resource_na', 0, None, None, 0)
    b_mobility_resource_car_general_abo_2020 = Beta(
        'b_mobility_resource_car_general_abo_2020', 0, None, None, 1)
    b_mobility_resource_car_half_fare_abo = Beta(
        'b_mobility_resource_car_half_fare_abo', 0, None, None, 0)
    b_mobility_resource_car_2020 = Beta('b_mobility_resource_car_2020', 0,
                                        None, None, 1)
    b_mobility_resource_general_abo_no_car_2020 = Beta(
        'b_mobility_resource_general_no_car_abo_2020', 0, None, None, 0)
    b_mobility_resource_half_fare_abo_2020 = Beta(
        'b_mobility_resource_half_fare_abo_2020', 0, None, None, 1)
    b_mobility_resource_none_2020 = Beta('b_mobility_resource_none_2020', 0,
                                         None, None, 1)
    b_mobility_resource_car_half_fare_regional_abo_2020 = Beta(
        'b_mobility_resource_car_half_fare_regional_abo_2020', 0, None, None,
        1)
    b_mobility_resource_car_regional_abo_2020 = Beta(
        'b_mobility_resource_car_regional_abo_2020', 0, None, None, 1)
    b_mobility_resource_half_fare_regional_abo_2020 = Beta(
        'b_mobility_resource_half_fare_regional_abo_2020', 0, None, None, 1)
    b_mobility_resource_regional_abo_2020 = Beta(
        'b_mobility_resource_regional_abo_2020', 0, None, None, 1)

    scale_2020 = Beta('scale_2020', 1, 0.001, None, 0)
    ''' Definition of new variables '''
    male_2020 = DefineVariable('male', (sex == 1) * (year == 2020), database)

    single_household_2020 = DefineVariable('single_household_2020',
                                           (hh_type == 10) * (year == 2020),
                                           database)
    couple_without_children_2015 = DefineVariable(
        'couple_without_children_2015', (hh_type == 210) * (year == 2015),
        database)
    couple_without_children_2020 = DefineVariable(
        'couple_without_children_2020', (hh_type == 210) * (year == 2020),
        database)
    couple_with_children_2020 = DefineVariable(
        'couple_with_children_2020', (hh_type == 220) * (year == 2020),
        database)
    single_parent_with_children_2020 = DefineVariable(
        'single_parent_with_children_2020', (hh_type == 230) * (year == 2020),
        database)
    not_family_household_2020 = DefineVariable(
        'not_family_household_2020', (hh_type == 30) * (year == 2020),
        database)

    public_transport_connection_quality_abc_home_2020 = \
        DefineVariable('public_transport_connection_quality_abc_home_2020',
                       ((public_transport_connection_quality_ARE_home == 1) +
                        (public_transport_connection_quality_ARE_home == 2) +
                        (public_transport_connection_quality_ARE_home == 3)) * (year == 2020), database)
    public_transport_connection_quality_na_home_2015 = \
        DefineVariable('public_transport_connection_quality_NA_home_2015',
                       (public_transport_connection_quality_ARE_home == 5) * (year == 2015), database)
    public_transport_connection_quality_na_home_2020 = \
        DefineVariable('public_transport_connection_quality_NA_home_2020',
                       (public_transport_connection_quality_ARE_home == 5) * (year == 2020), database)

    public_transport_connection_quality_abcd_work_2020 = \
        DefineVariable('public_transport_connection_quality_abc_work_2020',
                       ((public_transport_connection_quality_ARE_work == 1) +
                        (public_transport_connection_quality_ARE_work == 2) +
                        (public_transport_connection_quality_ARE_work == 3) +
                        (public_transport_connection_quality_ARE_work == 4)) * (year == 2020), database)

    urban_home_2020 = DefineVariable(
        'urban_home_2020', (urban_typology_home == 1) * (year == 2020),
        database)
    rural_home_2020 = DefineVariable(
        'rural_home_2020', (urban_typology_home == 3) * (year == 2020),
        database)
    intermediate_home_2020 = DefineVariable(
        'intermediate_home_2020', (urban_typology_home == 2) * (year == 2020),
        database)
    urban_work_2020 = DefineVariable(
        'urban_work_2020', (urban_typology_work == 1) * (year == 2020),
        database)
    rural_work_2020 = DefineVariable(
        'rural_work_2020', (urban_typology_work == 3) * (year == 2020),
        database)
    intermediate_work_2020 = DefineVariable(
        'intermediate_work_2020', (urban_typology_work == 2) * (year == 2020),
        database)

    home_work_distance = DefineVariable(
        'home_work_distance',
        home_work_crow_fly_distance * (home_work_crow_fly_distance >= 0.0) /
        100000.0, database)
    home_work_distance_zero = DefineVariable(
        'home_work_distance_zero', home_work_crow_fly_distance == 0.0,
        database)
    home_work_distance_na = DefineVariable('home_work_distance_na',
                                           home_work_crow_fly_distance == -999,
                                           database)

    executives = DefineVariable('executives', work_position == 1, database)

    german = DefineVariable('german', language == 1, database)

    hh_income_na = DefineVariable('hh_income_na', hh_income < 0, database)
    hh_income_8000_or_less = DefineVariable(
        'hh_income_8000_or_less', (hh_income == 1) + (hh_income == 2) +
        (hh_income == 3) + (hh_income == 4), database)

    owning_a_general_abo = DefineVariable('owning_a_general_abo',
                                          GA_ticket == 1, database)
    regional_abo_2020 = DefineVariable('regional_abo_2020',
                                       (Verbund_Abo == 1) * (year == 2020),
                                       database)
    half_fare_abo_2020 = DefineVariable('half_fare_abo_2020',
                                        (halbtax_ticket == 1) * (year == 2020),
                                        database)
    car_avail_always_or_on_demand_2020 = DefineVariable(
        'car_avail_always_or_on_demand_2020',
        ((car_avail == 1) + (car_avail == 2)) * (year == 2020), database)
    regional_abo_na_2020 = DefineVariable('regional_abo_na_2020',
                                          (Verbund_Abo < 0) * (year == 2020),
                                          database)
    half_fare_abo_na_2020 = DefineVariable(
        'half_fare_abo_na_2020', (halbtax_ticket < 0) * (year == 2020),
        database)
    car_avail_na_2020 = DefineVariable('car_avail_na_2020',
                                       (car_avail < 0) * (year == 2020),
                                       database)

    mobility_resource_na = DefineVariable('mobility_resource_na',
                                          mobility_resources == -98, database)
    mobility_resource_car_general_abo_2020 = DefineVariable(
        'mobility_resource_car_general_abo_2020',
        (mobility_resources == 1) * (year == 2020), database)
    mobility_resource_car_half_fare_abo = DefineVariable(
        'mobility_resource_car_half_fare_abo', mobility_resources == 2,
        database)
    mobility_resource_car_2020 = DefineVariable('mobility_resource_car_2020',
                                                (mobility_resources == 3) *
                                                (year == 2020), database)
    mobility_resource_general_abo_no_car_2020 = DefineVariable(
        'mobility_resource_general_abo_no_car_2020',
        (mobility_resources == 4) * (year == 2020), database)
    mobility_resource_half_fare_abo_2020 = DefineVariable(
        'mobility_resource_half_fare_abo_2020',
        (mobility_resources == 5) * (year == 2020), database)
    mobility_resource_none_2020 = DefineVariable('mobility_resource_none_2020',
                                                 (mobility_resources == 6) *
                                                 (year == 2020), database)
    mobility_resource_car_half_fare_regional_abo_2020 = \
        DefineVariable('mobility_resource_car_half_fare_regional_abo_2020',
                       (mobility_resources == 20) * (year == 2020), database)
    mobility_resource_car_regional_abo_2020 = DefineVariable(
        'mobility_resource_car_regional_abo_2020',
        (mobility_resources == 30) * (year == 2020), database)
    mobility_resource_half_fare_regional_abo_2020 = DefineVariable(
        'mobility_resource_half_fare_regional_abo_2020',
        (mobility_resources == 50) * (year == 2020), database)
    mobility_resource_regional_abo_2020 = DefineVariable(
        'mobility_resource_regional_abo_2020',
        (mobility_resources == 60) * (year == 2020), database)

    business_sector_agriculture_2020 = DefineVariable(
        'business_sector_agriculture_2020',
        business_sector_agriculture * (year == 2020), database)
    business_sector_services_fc_2020 = DefineVariable(
        'business_sector_services_fc_2020',
        business_sector_services_fc * (year == 2020), database)

    #  Utility
    U = alternative_specific_constant + \
        b_executives * executives + \
        b_no_post_school_education * no_post_school_educ + \
        b_secondary_education * secondary_education + \
        b_tertiary_education * tertiary_education + \
        b_couple_without_children_2015 * couple_without_children_2015 + \
        b_couple_without_children_2020 * couple_without_children_2020 + \
        b_public_transport_connection_quality_na_home_2015 * public_transport_connection_quality_na_home_2015 + \
        b_public_transport_connection_quality_na_home_2020 * public_transport_connection_quality_na_home_2020 + \
        b_home_work_distance * home_work_distance + \
        b_home_work_distance_zero * home_work_distance_zero + \
        b_home_work_distance_na * home_work_distance_na + \
        models.piecewiseFormula(age, [15, 19, 31, 79, 85]) + \
        b_business_sector_retail * business_sector_retail + \
        b_business_sector_gastronomy * business_sector_gastronomy + \
        b_business_sector_finance * business_sector_finance + \
        b_business_sector_production * business_sector_production + \
        b_business_sector_wholesale * business_sector_wholesale + \
        b_business_sector_other_services * business_sector_other_services + \
        b_business_sector_others * business_sector_others + \
        b_business_sector_non_movers * business_sector_non_movers + \
        b_german * german + \
        models.piecewiseFormula(work_percentage, [0, 90, 101]) + \
        b_hh_income_na * hh_income_na + \
        b_hh_income_8000_or_less * hh_income_8000_or_less + \
        b_owning_a_general_abo * owning_a_general_abo + \
        b_mobility_resource_na * mobility_resource_na + \
        b_mobility_resource_car_half_fare_abo * mobility_resource_car_half_fare_abo + \
        b_male_2020 * male_2020 + \
        b_single_household_2020 * single_household_2020 + \
        b_couple_with_children_2020 * couple_with_children_2020 + \
        b_single_parent_with_children_2020 * single_parent_with_children_2020 + \
        b_not_family_household_2020 * not_family_household_2020 + \
        b_public_transport_connection_quality_abc_home_2020 * public_transport_connection_quality_abc_home_2020 + \
        b_public_transport_connection_quality_abcd_work_2020 * public_transport_connection_quality_abcd_work_2020 + \
        b_urban_home_2020 * urban_home_2020 + \
        b_rural_home_2020 * rural_home_2020 + \
        b_intermediate_home_2020 * intermediate_home_2020 + \
        b_urban_work_2020 * urban_work_2020 + \
        b_rural_work_2020 * rural_work_2020 + \
        b_intermediate_work_2020 * intermediate_work_2020 + \
        b_business_sector_agriculture_2020 * business_sector_agriculture_2020 + \
        b_business_sector_services_fc_2020 * business_sector_services_fc_2020 + \
        b_regional_abo_2020 * regional_abo_2020 + \
        b_regional_abo_na_2020 * regional_abo_na_2020 + \
        b_half_fare_abo_2020 * half_fare_abo_2020 + \
        b_half_fare_abo_na_2020 * half_fare_abo_na_2020 + \
        b_car_avail_2020 * car_avail_always_or_on_demand_2020 + \
        b_car_avail_na_2020 * car_avail_na_2020 + \
        b_mobility_resource_car_general_abo_2020 * mobility_resource_car_general_abo_2020 + \
        b_mobility_resource_car_2020 * mobility_resource_car_2020 + \
        b_mobility_resource_general_abo_no_car_2020 * mobility_resource_general_abo_no_car_2020 + \
        b_mobility_resource_half_fare_abo_2020 * mobility_resource_half_fare_abo_2020 + \
        b_mobility_resource_none_2020 * mobility_resource_none_2020 + \
        b_mobility_resource_car_half_fare_regional_abo_2020 * mobility_resource_car_half_fare_regional_abo_2020 + \
        b_mobility_resource_car_regional_abo_2020 * mobility_resource_car_regional_abo_2020 + \
        b_mobility_resource_half_fare_regional_abo_2020 * mobility_resource_half_fare_regional_abo_2020 + \
        b_mobility_resource_regional_abo_2020 * mobility_resource_regional_abo_2020
    U_no_telecommuting = 0

    # Scale associated with 2020 is estimated
    scale = (year == 2015) + (year == 2020) * scale_2020

    # Associate utility functions with the numbering of alternatives
    V = {
        1: scale * U,  # Yes or sometimes
        0: U_no_telecommuting
    }  # No

    av = {1: 1, 0: 1}

    # Definition of the model. This is the contribution of each
    # observation to the log likelihood function.
    logprob = models.loglogit(
        V,
        av,  # All alternatives are supposed to be always available
        telecommuting)  # Choice variable

    # Change the working directory, so that biogeme writes in the correct folder
    standard_directory = os.getcwd()
    output_directory = '../data/output/models/estimation/2015_2020/'
    os.chdir(output_directory)

    # Create the Biogeme object
    biogeme = bio.BIOGEME(database, logprob)
    output_file_name = 'logit_telecommuting_2015_2020'
    biogeme.modelName = output_file_name

    # Estimate the parameters
    results = biogeme.estimate()

    # Get the results in LaTeX
    results.writeLaTeX()

    # Go back to the normal working directory
    os.chdir(standard_directory)