from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random import numpy as np import csv import pandas as pd doc = '''Information processing game, posterior, processing''' class Constants(BaseConstants): name_in_url = 'Information_processing_proc' players_per_group = None num_rounds = 6 #instructions_template = 'information_experiment_1/instructions.html' # Initial amount allocated to decision maker endowment = 3 guess_fee = 1 conversion_rate = 0.1 # LIST OF POSSIBLE SCENARIOS # DIM 1: COMBINATION OF 3 PEOPLE # DIM 2: SPECIFIC INDIVIDUALS -> [INGROUP=1, SAME_BALL =1], WITH 0s, THE OPPOSITE scenarios_label = [ [[1, 0], [1, 0]], [[0, 0], [0, 0]], [[1, 1], [0, 0]], [[1, 0], [0, 1]], ] scenarios_no_label = [[0,0], [1,0]] # random assignment of treatments # we would like to have 50 / 50 ex ante # guess distributions: # [0] = dem_yellow # [1] =dem_green # [2] =rep_yellow # [3] =rep_green # df_ = pd.read_csv('post_information_experiment_demand/guess_distr.csv', sep=';') # list_prolid = temp_df['prol_id'].tolist() # temp_lists = [] # for cols_ in temp_df.drop(['prol_id'], axis=1).columns: # temp_lists.append(temp_df[cols_].tolist()) # distr_ = guess distributions: # [0] = dem_yellow # [1] =dem_green # [2] =rep_yellow # [3] =rep_green # distr_ = [] # for var_ in df_.columns: # distr_.append(df_[var_].dropna().to_list()) # # 0 = election_outcome_electoral --> 1 == Trump , 0 == Biden # # 1 = election_outcome_popular --> 1 == Trump , 0 == Biden # # 2 = econ_measure # # 3 = health_measure # temp_tuple = list(zip(temp_lists[0], temp_lists[1], temp_lists[2], temp_lists[3])) # prol_dict = dict(zip(list_prolid, temp_tuple)) class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): # RANDOM ORDER OF SCENARIOS WITH LABEL temp_1 = Constants.scenarios_label.copy() random.shuffle(temp_1) p.participant.vars['scenarios_labels'] = temp_1 # RANDOM ORDER OF SCENARIOS WITHOUT LABEL temp_2 = Constants.scenarios_no_label.copy() random.shuffle(temp_2) p.participant.vars['scenarios_no_labels'] = temp_2 # PAYOFF RELEVANT ROUND p.participant.vars['payoff_round_proc'] = random.randint(1,6) # TO OVERWRITE #p.participant.vars['democrat'] = random.randint(0,1) class Group(BaseGroup): pass class Player(BasePlayer): guess_proc = models.IntegerField(initial=None, choices=[[0, 'Yellow cup'], [1, 'Green cup']], widget=widgets.RadioSelect) urn_proc = models.IntegerField(initial=-1) ball_proc = models.IntegerField(initial=-1) # person is democrat p1_democrat_proc = models.IntegerField(initial=-1) p2_democrat_proc = models.IntegerField(initial=-1) # guess of person p1_guess_proc = models.IntegerField(initial=-1) p2_guess_proc = models.IntegerField(initial=-1) # reason for decision making reason_label_dec = models.LongStringField() def set_up_no_label(self): # DRAWING A BALL # 0 = YELLOW, 1 = GREEN self.urn_proc = random.randint(0,1) if self.urn_proc == 0: if random.uniform(0, 1) >= 1/3: self.ball_proc = 0 else: self.ball_proc = 1 else: if random.uniform(0, 1) >= 1/3: self.ball_proc = 1 else: self.ball_proc = 0 # ASSIGNING NO LABEL GUESSES num_ = self.round_number - 5 temp_group = self.participant.vars['scenarios_no_labels'][num_] random.shuffle(temp_group) if self.ball_proc == 1: if temp_group[0] == 1: self.p1_guess_proc = 1 else: self.p1_guess_proc = 0 if temp_group[1] == 1: self.p2_guess_proc = 1 else: self.p2_guess_proc = 0 else: if temp_group[0] == 1: self.p1_guess_proc = 0 else: self.p1_guess_proc = 1 if temp_group[1] == 1: self.p2_guess_proc = 0 else: self.p2_guess_proc = 1 def set_up_label(self): # ASSIGNING SCENARIOS AND GUESSES TO FIELDS # 0 = YELLOW, 1 = GREEN self.urn_proc = random.randint(0,1) if self.urn_proc == 0: if random.uniform(0, 1) >= 1/3: self.ball_proc = 0 else: self.ball_proc = 1 else: if random.uniform(0, 1) >= 1/3: self.ball_proc = 1 else: self.ball_proc = 0 num_ = self.round_number-1 temp_group = self.participant.vars['scenarios_labels'][num_] random.shuffle(temp_group) ########################################## # PARTISANSHIP OF OTHER PEOPLE ########################################## if self.participant.vars['democrat'] == 1: if temp_group[0][0] == 1: self.p1_democrat_proc = 1 else: self.p1_democrat_proc = 0 if temp_group[1][0] == 1: self.p2_democrat_proc = 1 else: self.p2_democrat_proc = 0 else: if temp_group[0][0] == 1: self.p1_democrat_proc = 0 else: self.p1_democrat_proc = 1 if temp_group[1][0] == 1: self.p2_democrat_proc = 0 else: self.p2_democrat_proc = 1 ########################################## # GUESSES OF OTHER PEOPLE ########################################## if self.ball_proc == 1: if temp_group[0][1] == 1: self.p1_guess_proc = 1 else: self.p1_guess_proc = 0 if temp_group[1][1] == 1: self.p2_guess_proc = 1 else: self.p2_guess_proc = 0 else: if temp_group[0][1] == 1: self.p1_guess_proc = 0 else: self.p1_guess_proc = 1 if temp_group[1][1] == 1: self.p2_guess_proc = 0 else: self.p2_guess_proc = 1 def payoff_proc(self): if self.round_number == self.participant.vars['payoff_round_proc']: self.participant.vars['correct_guess_process'] = 0 if self.guess_proc == self.urn_proc: self.participant.vars['payoff_proc'] = Constants.guess_fee self.participant.vars['correct_guess_process'] = 1 else: self.participant.vars['payoff_proc'] = 0