from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'questionnaire' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): treatment_g = models.StringField() def confirm_payoff(group: Group): players = group.get_players() for p in players: p.participant.payoff = p.participant.earning def creating_session(subsession: Subsession): session = subsession.session group = subsession.get_groups() for g in group: g.treatment_g = session.config['name'] player = g.get_players() for p in player: p.treatment = g.treatment_g def principle_choices(BasePlayer): import random choices = [[1, 'Alle Spieler sollten gleich viel beitragen.'], [2, 'Alle Spieler sollten im gleichen Verhältnis beitragen wie sie auch Tokens am Ende einer Runde besitzen.'], [3, 'Alle Spieler sollten im gleichen Verhältnis beitragen wie sie auch Tokens als Bonus erhalten.'], [4, 'Alle Spieler sollten am Ende einer Runde gleich viele Tokens besitzen.']] random.shuffle(choices) return choices class Player(BasePlayer): treatment = models.StringField() age = models.IntegerField(label='Wie alt sind Sie (in Jahren)?', max=99, min=18) gender = models.IntegerField(choices=[[0, 'männlich'], [1, 'weiblich'], [2, 'divers']], label='Mit welchem Geschlecht identifizieren Sie sich?', widget=widgets.RadioSelect) personal_belief = models.IntegerField(choices=[[1, 'Regel immer befolgen'], [2, 'Regel meistens befolgen'], [3, 'Regel selten befolgen'], [4, 'Regel nie befolgen']], label='Wie sollte man sich in Bezug auf die individuell präsentierte Regel Ihrer Meinung nach verhalten?', widget=widgets.RadioSelect) normative_belief_pos = models.IntegerField(choices=[[1, 'sehr angemessen'], [2, 'etwas angemessen'], [3, 'etwas unangemessen'], [4, 'sehr unangemessen']], label='Nehmen Sie an, dass jemand die individuell präsentierte Regel befolgt hat. Wie würden die meisten Menschen dieses Verhalten Ihrer Einschätzung nach bewerten? ', widget=widgets.RadioSelect) normative_belief_neg = models.IntegerField(choices=[[1, 'sehr angemessen'], [2, 'etwas angemessen'], [3, 'etwas unangemessen'], [4, 'sehr unangemessen']], label='Nehmen Sie an, dass jemand die individuell präsentierte Regel nicht befolgt hat. Wie würden die meisten Menschen dieses Verhalten Ihrer Einschätzung nach bewerten? ', widget=widgets.RadioSelect) empirical_belief_behavior = models.IntegerField(label='Bitte schätzen Sie den Anteil der Teilnehmer*innen im gesamten Experiment (in %), der die individuell präsentierte Regel befolgt hat.', max=100, min=0) empirical_belief_norm = models.IntegerField(label='Bitte schätzen Sie den Anteil der Teilnehmer*innen im gesamten Experiment (in %), der das Nicht-Befolgen der individuell präsentierten Regel als (sehr oder etwas) unangemessen eingeschätzt hat.', max=100, min=0) rule_approval_effective = models.IntegerField(choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich halte die meiner Gruppe präsentierte Kombination aus Regeln für ein sinnvolles Mittel, um sicherzustellen, dass der Schwellenwert als Gruppe erreicht wird. ', widget=widgets.RadioSelect) rule_approval_efficient = models.IntegerField(choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich halte die meiner Gruppe präsentierte Kombination aus Regeln für ein sinnvolles Mittel, um sicherzustellen, dass möglichst wenig Beiträge verloren gehen. ', widget=widgets.RadioSelect) rule_perceived_fairness = models.IntegerField(choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich habe die meiner Gruppe präsentierte Kombination aus Regeln als fair empfunden.', widget=widgets.RadioSelect) individual_rule_perceived_fairness = models.IntegerField(choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich habe meine individuelle Regel als fair empfunden.', widget=widgets.RadioSelect) bonus_perceived_fairness = models.IntegerField(choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich habe die Aufteilung des Bonus als fair empfunden.', widget=widgets.RadioSelect) field_of_study = models.IntegerField(choices=[[0, 'Ich studiere nicht.'], [1, 'Wirtschaftswissenschaften'],[2, 'Naturwissenschaften'],[3, 'Sprach- und Kulturwissenschaften'],[4, 'Lehramt'],[5, 'Agrar- und Forstwissenschaften'],[6, 'Ingenieurswissenschaften'],[7, 'Gesellschafts- und Sozialwissenschaften'],[8, 'Musik, Kunst, Design'],[9, 'Gesundheitswissenschaften'],[10, 'öffentliche Verwaltung']], label='Falls Sie studieren, zu welcher Fachrichtung würden Sie sich zuordnen?') econ = models.IntegerField(choices=[[0, 'nein'], [1, 'ja']],label="Haben Sie im Rahmen Ihres Studienganges einen wirtschaftswissenschaftlichen Hintergrund erworben?", widget=widgets.RadioSelect) ##principle = models.IntegerField(choices=principle_choices(BasePlayer), label="Welcher Grundsatz sollte bei der Aufteilung des Schwellenwertes am ehesten beachtet werden?", widget=widgets.RadioSelect) bestrule = models.IntegerField(choices=[[4, 'R = (4,4,20,20)'], [3, 'R = (8,8,16,16)'], [2, 'R = (10,10,14,14)'], [1, 'R = (12,12,12,12)']], label="Stellen Sie sich folgende Aufteilung eines Bonus in Höhe von 48 Tokens vor: V=(16,16,32,32). Nehmen Sie ansonsten alle Parameter an wie in der soeben von Ihnen gespielten Entscheidungssituation (Schwellenwert = 48 Tokens, Ausstattung jedes Spielers = 24 Tokens). Welche der folgenden Regeln würden Sie in diesem Zusammenhang als am fairsten empfinden?", widget=widgets.RadioSelect) bfi2xs_1 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin eher ruhig. ', widget=widgets.RadioSelect) bfi2xs_2 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin einfühlsam, warmherzig.', widget=widgets.RadioSelect) bfi2xs_3 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin eher unordentlich.', widget=widgets.RadioSelect) bfi2xs_4 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich mache mir oft Sorgen.', widget=widgets.RadioSelect) bfi2xs_5 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich kann mich für Kunst, Musik und Literatur begeistern.', widget=widgets.RadioSelect) bfi2xs_6 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich neige dazu, die Führung zu übernehmen.', widget=widgets.RadioSelect) bfi2xs_7 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin manchmal unhöflich und schroff. ', widget=widgets.RadioSelect) bfi2xs_8 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich neige dazu, Aufgaben vor mir herzuschieben.', widget=widgets.RadioSelect) bfi2xs_9 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin oft deprimiert, niedergeschlagen. ', widget=widgets.RadioSelect) bfi2xs_10 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Mich interessieren abstrakte Überlegungen wenig.', widget=widgets.RadioSelect) bfi2xs_11 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin voller Energie und Tatendrang.', widget=widgets.RadioSelect) bfi2xs_12 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich schenke anderen leicht Vertrauen, glaube an das Gute im Menschen.', widget=widgets.RadioSelect) bfi2xs_13 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin verlässlich, auf mich kann man zählen.', widget=widgets.RadioSelect) bfi2xs_14 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin ausgeglichen, nicht leicht aus der Ruhe zu bringen. ', widget=widgets.RadioSelect) bfi2xs_15 = models.IntegerField( choices=[[1, '1 = stimme überhaupt nicht zu'], [2, '2 = stimme nicht zu'], [3, '3 = teils/teils'], [4, '4 = stimme zu'], [5, '5 = stimme voll und ganz zu']], label='Ich bin originell, entwickle neue Ideen. ', widget=widgets.RadioSelect) def custom_export(players): yield ['participant_code', 'id_in_group'] for p in players: pp = p.participant yield [pp.code, p.id_in_group] class Start(Page): form_model = 'player' class ApprovalQuestions_Bonus(Page): form_model = 'player' form_fields = ['bonus_perceived_fairness'] class ApprovalQuestions(Page): form_model = 'player' form_fields = ['individual_rule_perceived_fairness', 'rule_approval_effective', 'rule_approval_efficient', 'rule_perceived_fairness'] @staticmethod def is_displayed(player: Player): return player.treatment != 'Control_1' and player.treatment != 'Control_2' return True class Beliefs(Page): form_model = 'player' form_fields = ['personal_belief', 'normative_belief_pos', 'normative_belief_neg', 'empirical_belief_behavior', 'empirical_belief_norm'] @staticmethod def is_displayed(player: Player): return player.treatment != 'Control_1' and player.treatment != 'Control_2' return True class Demographics(Page): form_model = 'player' form_fields = ['age', 'gender'] class BigFive(Page): form_model = 'player' form_fields = ['bfi2xs_1','bfi2xs_2','bfi2xs_3','bfi2xs_4','bfi2xs_5','bfi2xs_6','bfi2xs_7','bfi2xs_8','bfi2xs_9','bfi2xs_10','bfi2xs_11','bfi2xs_12','bfi2xs_13','bfi2xs_14','bfi2xs_15'] class Background(Page): form_model = 'player' form_fields = ['field_of_study', 'econ',] class RuleQuestions(Page): form_model = 'player' form_fields = ['bestrule'] @staticmethod def is_displayed(player: Player): return player.treatment != 'Control_1' and player.treatment != 'Control_2' return True class StartWait(WaitPage): wait_for_all_groups = True page_sequence = [StartWait, Start, ApprovalQuestions_Bonus, ApprovalQuestions, RuleQuestions, Beliefs, Demographics, BigFive, Background]