import pandas as pd
from biogeme.database import Database
from biogeme.expressions import Variable
import biogeme.biogeme_logging as blog
from IPython.core.display_functions import display
from biogeme.biogeme import BIOGEME
from biogeme.expressions import Beta, Draws, MonteCarlo, log
from biogeme.models import logit
from biogeme.models import loglogit
from biogeme.results_processing import get_pandas_estimated_parameters
#导入数据
df = pd.read_csv('C:/Users/24722/Desktop/CE.csv', sep=',')
#设置分类哑变量
for i in range(1, 7):
df[f'A{i}_2'] = 1 * (df[f'A{i}'] == 2)
df[f'A{i}_3'] = 1 * (df[f'A{i}'] == 3)
df[f'B{i}_2'] = 1 * (df[f'B{i}'] == 2)
df[f'B{i}_3'] = 1 * (df[f'B{i}'] == 3)
#查看数据导入情况
print(df.head())
#创建Biogeme数据库对象
database = Database('CE', df)
# 定义选择与可用性,av是必须设定的
CHOICE = Variable('CHOICE')
A_AV = Variable('A_AV')
B_AV = Variable('B_AV')
#备选常数(ASC)
ASC_A = Beta('ASC_A', 0, None, None, 0)
ASC_B = Beta('ASC_B', 0, None, None, 0)
#日志
logger = blog.get_screen_logger(level=blog.INFO)
logger.info('wo bu zhi dao wei shen me yao zhe ge ri zhi.py')
# 定义参数(A/B 共享系数)
b_1_lv2 = Beta('b_1_lv2', 0, None, None, 0)
b_1_lv3 = Beta('b_1_lv3', 0, None, None, 0)
b_2_lv2 = Beta('b_2_lv2', 0, None, None, 0)
b_2_lv3 = Beta('b_2_lv3', 0, None, None, 0)
b_3_lv2 = Beta('b_3_lv2', 0, None, None, 0)
b_3_lv3 = Beta('b_3_lv3', 0, None, None, 0)
b_4_lv2 = Beta('b_4_lv2', 0, None, None, 0)
b_4_lv3 = Beta('b_4_lv3', 0, None, None, 0)
b_5_lv2 = Beta('b_5_lv2', 0, None, None, 0)
b_5_lv3 = Beta('b_5_lv3', 0, None, None, 0)
b_6_lv2 = Beta('b_6_lv2', 0, None, None, 0)
b_6_lv3 = Beta('b_6_lv3', 0, None, None, 0)
# 构建效用(A/B 共享相同等级的系数;基准等级=1 隐含系数为0),Variable也可在数据导入时转换,例如A1 = Variable('A1')
v_A = (
ASC_A
+ b_1_lv2 * Variable('A1_2') + b_1_lv3 * Variable('A1_3')
+ b_2_lv2 * Variable('A2_2') + b_2_lv3 * Variable('A2_3')
+ b_3_lv2 * Variable('A3_2') + b_3_lv3 * Variable('A3_3')
+ b_4_lv2 * Variable('A4_2') + b_4_lv3 * Variable('A4_3')
+ b_5_lv2 * Variable('A5_2') + b_5_lv3 * Variable('A5_3')
+ b_6_lv2 * Variable('A6_2') + b_6_lv3 * Variable('A6_3')
)
v_B = (
ASC_B
+ b_1_lv2 * Variable('B1_2') + b_1_lv3 * Variable('B1_3')
+ b_2_lv2 * Variable('B2_2') + b_2_lv3 * Variable('B2_3')
+ b_3_lv2 * Variable('B3_2') + b_3_lv3 * Variable('B3_3')
+ b_4_lv2 * Variable('B4_2') + b_4_lv3 * Variable('B4_3')
+ b_5_lv2 * Variable('B5_2') + b_5_lv3 * Variable('B5_3')
+ b_6_lv2 * Variable('B6_2') + b_6_lv3 * Variable('B6_3')
)
#设置索引
v = {1: v_A, 2: v_B}
av = {1: A_AV, 2: B_AV}
#设定模型1
log_probability = loglogit(v, av, CHOICE)
the_biogeme = BIOGEME(database, log_probability)
the_biogeme.model_name = 'b01logit'
#输出结果
results = the_biogeme.estimate()
print(results.short_summary())
#输出系数结果
pandas_results = get_pandas_estimated_parameters(
estimation_results=results,
)
display(pandas_results)