Source code for utility_modules.firm_calibration
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
SETS THE FIRM LATENT VARIABLES TO MAINTAIN THE EX-ANTE FIRM STATE.
THE LATENT VALUE GIVES CHOICE 0 THE LOWEST COST STATE BY THE AMOUNT
OF maintain_offer_delta, maintain_nonoffer_delta, aintain_offerPT_delta
"""
#PARAMETERS
import pandas as pd
[docs]class Firmcal():
def __init__(self,offer_threshold,noffoer_threshold,ptoffer_threshold,firm_choice):
self.maintain_offer_delta=offer_threshold
self.maintain_nonoffer_delta=noffoer_threshold
self.maintain_offerPT_delta=ptoffer_threshold
self.firm_choice=firm_choice
#import firm_choice
[docs] def create_firm_latent(self):
# FIND WHERE FIRM CHOICE IS NOT EX-ANTE. SAVE AS firms_needing_latent
# SAVE JUST THE NECESSARY COLUMNS
firms_needing_latent=self.firm_choice[ (self.firm_choice['chosen_choice']==1) &\
(self.firm_choice['fake_firm']==0 ) &\
(self.firm_choice['choice']!=0 )]
firms_needing_latent=firms_needing_latent.loc[:,['firm_id','total_cost','offer','prev_offer']]
# MERGE IN THE tot_util_exante INTO firms_needing_latent
firms_exante_util=self.firm_choice[(self.firm_choice['fake_firm']==0 ) &\
(self.firm_choice['choice']==0 )].copy()
firms_exante_util['exante_total_cost']=firms_exante_util['total_cost']
firms_exante_util=firms_exante_util.loc[:,['firm_id','exante_total_cost']]
firms_needing_latent=pd.merge(firms_needing_latent,firms_exante_util,on='firm_id')
#CALCULATE THE AMOUNT OF LATENT VALUES
firms_needing_latent['delta']=self.maintain_nonoffer_delta
firms_needing_latent.loc[firms_needing_latent['prev_offer']==True,'delta'] = self.maintain_offer_delta
firms_needing_latent.loc[(firms_needing_latent['prev_offer']==True) &\
(firms_needing_latent['offer']==True),'delta'] = self.maintain_offerPT_delta
firms_needing_latent['latent']=(1-firms_needing_latent['delta'])*firms_needing_latent['total_cost'] \
-firms_needing_latent['exante_total_cost']
# CREATE LATENT FILE WITH firm_id, choice, latent. FOR NOW, JUST HAVE LATENT
# FOR THE DEFAULT CHOICE. AND EXPORT IT.
firms_needing_latent=firms_needing_latent.loc[:,['firm_id','latent']]
firm_latents=self.firm_choice[ (self.firm_choice['chosen_choice']==1) &\
(self.firm_choice['fake_firm']==0 ) ]
firm_latents=firm_latents.loc[:,['firm_id']]
firm_latents=pd.merge(firm_latents,firms_needing_latent,how='left',on='firm_id')
firm_latents.latent.fillna(0,inplace=True)
return firm_latents
# EXPORT TO INDIVIDUAL DATA FOLDER