import random import pandas as pd import os from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) from .machine_learning_algo import prediction_human_expert, prediction_ml doc = """ """ ############################################################ # definition of constant variables ############################################################ class Constants(BaseConstants): # STANDARD VARIABLES name_in_url = 'behavioral_study' players_per_group = None num_rounds = 1 payoff_factor = 0.1 participation_fee =1 # READING IN FM DATA competitiveness_score = 'Auf einer Skala von 1 (niedrig) bis 7 (hoch): Wie kompetitiv schätzen Sie sich ein?' openness_score = 'Auf einer Skala von 1 (niedrig) bis 7 (hoch): Wie offen würden Sie sich selbst für neue Erfahrungen einschätzen?' conscentiousness_score = 'Auf einer Skala von 1 (niedrig) bis 7 (hoch): Wie gewissenhaft würden Sie sich selbst einschätzen?' agreeableness_score = 'Auf einer Skala von 1 (niedrig) bis 7 (hoch): Wie rücksichtsvoll und herzlich würden Sie sich selbst gegenüber anderen einschätzen?' neuroticism_score = 'Auf einer Skala von 1 (niedrig) bis 7 (hoch): Wie leicht sind Sie verärgert/gestresst?' extraversion_score = 'Auf einer Skala von 1 (niedrig) bis 7 (hoch): Wie kontaktfreudig sind Sie?' gender = 'Was ist Ihr biologisches Geschlecht?' age = 'In welchem Zeitraum wurden Sie geboren?' choicesLikert = [ [1, '1 (Niedrig)'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7 (Hoch)']] choicesLikertR = [ [7, '1 (Stimme überhaupt nicht zu)'], [6, '2'], [5, '3'], [4, '4'], [3, '5'], [2, '6'], [1, '7 (Stimme vollkommen zu)']] choicesGender = [ [0, 'Weiblich'], [1, 'Männlich']] choicesBoolean = [ [1, 'Ja'], [0, 'Nein'], ] ############################################################ # RANDOM ASSIGNMENT OF TREATMENTS # 1 = NO INFO # 2 = MACHINE PRIVATE # 3 = MACHINE PUBLIC # 4 = HUMAN PRIVATE # 5 = HUMAN PUBLIC ############################################################ class Subsession(BaseSubsession): pass ############################################################ # GROUP LEVEL VARIABLES AND METHODS ############################################################ class Group(BaseGroup): pass ############################################################ # SUBJECT LEVEL VARIABLES AND METHODS ############################################################ class Player(BasePlayer): # DECISIONS # NO AID fm_no_aid = models.IntegerField( choices=[[0, 'Ich würde meine 10 GE behalten.'], [10, 'Ich würde meine 10 GE an die andere Person senden.']], widget=widgets.RadioSelect, label='' ) # HUMAN AID fm_human_pos = models.IntegerField( choices=[[0, 'Ich würde meine 10 GE behalten.'], [10, 'Ich würde meine 10 GE an die andere Person senden.']], widget=widgets.RadioSelect, label='Vorhersage: Die andere Person zahlt Vertrauen zurück.' ) fm_human_neg = models.IntegerField( choices=[[0, 'Ich würde meine 10 GE behalten.'], [10, 'Ich würde meine 10 GE an die andere Person senden.']], widget=widgets.RadioSelect, label='Vorhersage: Die andere Person bezahlt Vertrauen NICHT zurück.' ) # AI AID fm_ai_pos = models.IntegerField( choices=[[0, 'Ich würde meine 10 GE behalten.'], [10, 'Ich würde meine 10 GE an die andere Person senden.']], widget=widgets.RadioSelect, label='Vorhersage: Die andere Person zahlt Vertrauen zurück.' ) fm_ai_neg = models.IntegerField( choices=[[0, 'Ich würde meine 10 GE behalten.'], [10, 'Ich würde meine 10 GE an die andere Person senden.']], widget=widgets.RadioSelect, label='Vorhersage: Die andere Person bezahlt Vertrauen NICHT zurück.' ) # BELIEFS # NO AID belief_no_aid = models.IntegerField( choices=[i for i in range(31)], label='' ) # HUMAN AID belief_human_pos = models.IntegerField( choices=[i for i in range(31)], label='Vorhersage: Die andere Person zahlt Vertrauen zurück.' ) belief_human_neg = models.IntegerField( choices=[i for i in range(31)], label='Vorhersage: Die andere Person bezahlt Vertrauen NICHT zurück.' ) # AI AID belief_ai_pos = models.IntegerField( choices=[i for i in range(31)], label='Vorhersage: Die andere Person zahlt Vertrauen zurück.' ) belief_ai_neg = models.IntegerField( choices=[i for i in range(31)], label='Vorhersage: Die andere Person bezahlt Vertrauen NICHT zurück.' ) belief_ai = models.IntegerField( choices=[i for i in range(101)], label='' ) belief_exp = models.IntegerField( choices=[i for i in range(101)], label='' ) # Sie sind eine Person die Vertrauen NICHT zurückzahlt. ############################### # ML QUESTIONNAIRE ############################### # QUESIONNAIRE ITEMS comp_score = models.IntegerField(label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die kompetitiv ist.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) # LANG ET AL. 2011: Short assessment of the Big Five: robust across survey methods except telephone interviewing open_score1 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die originell ist, neue Ideen einbringt', choices=Constants.choicesLikert, widget=widgets.RadioSelect) open_score2 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die künstlerische, ästhetische Erfahrungen schätzt', choices=Constants.choicesLikert, widget=widgets.RadioSelect) open_score3 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die eine lebhafte Phantasie, Vorstellungen hat', choices=Constants.choicesLikert, widget=widgets.RadioSelect) consc_score1 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die gründlich arbeitet.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) consc_score2 = models.IntegerField(label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die eher faul ist.', choices=Constants.choicesLikertR, widget=widgets.RadioSelect) consc_score3 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die Aufgaben wirksam und effizient erledigt.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) agree_score1 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die manchmal etwas grob zu anderen ist.', choices=Constants.choicesLikertR, widget=widgets.RadioSelect) agree_score2 = models.IntegerField(label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die verzeihen kann.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) agree_score3 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die rücksichtsvoll und freundlich mit anderen umgeht.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) neuro_score1 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die sich oft Sorgen macht.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) neuro_score2 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die leicht nervös wird.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) neuro_score3 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die mit Stress gut umgehen kann.', choices=Constants.choicesLikertR, widget=widgets.RadioSelect) extra_score1 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die kommunikativ/ gesprächig ist.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) extra_score2 = models.IntegerField( label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die aus sich herausgehen kann, gesellig ist.', choices=Constants.choicesLikert, widget=widgets.RadioSelect) extra_score3 = models.IntegerField(label='Auf einer Skala von 1 bis 7:
Ich bin eine Person, die zurückhaltend ist.', choices=Constants.choicesLikertR, widget=widgets.RadioSelect) # siblings = models.IntegerField(label='Haben Sie eins oder mehrere Geschwisterkinder?', # choices=[[1, 'Keine Geschwister'], # [2, 'Jüngere Geschwister'], # [3, 'Ältere Geschwister'], # [4, 'Jüngere und ältere Geschwister']], # widget=widgets.RadioSelect) risk_score = models.IntegerField(label='Wie würden Sie Ihre Risiko-Neigung beschreiben?', choices=[ [0, '0 (Extrem risko-avers)'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5 (Risko neutral)'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10 (Extrem risko-freudig)']], widget=widgets.RadioSelect) # Falk, A., Becker, A., Dohmen, T. J., Huffman, D., & Sunde, U. (2016). The preference survey module: # A validated instrument for measuring risk, time, and social preferences. IZA Discussion Paper No. 9674. # Falk, A., Becker, A., Dohmen, T., Enke, B., Huffman, D., & Sunde, U. (2018). Global evidence on economic preferences. Quarterly Journal of Economics, 133 (4), 1645–1692. reci_ = models.IntegerField( label='Bitte überlegen Sie, was Sie in der folgenden Situation tun würden. Sie befinden sich in einer Gegend, ' 'die Sie nicht kennen, und stellen fest, dass Sie sich verirrt haben. Sie bitten einen Fremden um eine ' 'Wegbeschreibung. Der Fremde bietet Ihnen an, Sie zu Ihrem Ziel zu bringen. Die Hilfe für Sie kostet den ' 'Fremden insgesamt etwa 20 Euro. Der Fremde sagt jedoch, dass er oder sie kein Geld von Ihnen will. ' 'Sie haben sechs Geschenke dabei. Das billigste Geschenk kostet 5 Euro, das teuerste kostet 30 Euro. ' 'Schenken Sie dem Fremden eines der Geschenke als Dankeschön? ' 'Wenn ja, welches Geschenk schenken Sie dem Fremden?', choices=[ [0, 'Ich würde kein Geschenk geben.'], [1, 'Ich würde das 5 Euro Geschenk geben.'], [2, 'Ich würde das 10 Euro Geschenk geben.'], [3, 'Ich würde das 15 Euro Geschenk geben.'], [4, 'Ich würde das 20 Euro Geschenk geben.'], [5, 'Ich würde das 25 Euro Geschenk geben.'], [6, 'Ich würde das 30 Euro Geschenk geben.']], widget=widgets.RadioSelect) reci_2 = models.IntegerField(label='Wenn mir jemand einen Gefallen tut, bin ich bereit, ihn zu erwidern.', choices=[ [0, '0 (Trifft überhaupt nicht zu)'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10 (Trifft vollkommen zu)']], widget=widgets.RadioSelect) impatience = models.IntegerField(label='Als wie geduldig würden Sie sich selbst einschätzen?', choices=[ [0, '0 (Äußerst ungeduldig)'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10 (Äußerst geduldig)']], widget=widgets.RadioSelect) # parents_uni = models.IntegerField(label='Hat einer Ihrer beiden Elternteile an einer Universität/Fachhochschule/Hochschule studiert?', # choices=[[1, 'Keiner der beiden'], # [2, 'Nur der Vater'], # [3, 'Nur die Mutter'], # [4, 'Beide']], # widget=widgets.RadioSelect) age = models.IntegerField(label=Constants.age, choices=[[0, 'vor 1985'], [1, '1985-1989'], [2, '1990-1994'], [3, '1995-1999'], [4, '2000 oder später']], widget=widgets.RadioSelect) # Dataset position in the KI model: row 10 gender = models.IntegerField(label=Constants.gender, choices=Constants.choicesGender, widget=widgets.RadioSelect) # STATE OF BIRTH state_birth = models.IntegerField(label='Wo sind Sie geboren?', choices=[[0, 'Baden-Wuerttemberg'], [1, 'Bayern'], [2, 'Hessen'], [3, 'Nordrhein-Westfalen'], [4, 'Rheinland-Pfalz'], [5, 'Andere']], widget=widgets.RadioSelect) # # MATH LK # lk_ = models.IntegerField(label='Haben Sie die Fächer English und/oder Mathemathik in der Schule als Leistungskurs belegt?', # choices=[[0, 'Englisch'], # [1, 'Mathe'], # [2, 'Beide'], # [3, 'Keines der beiden']], # widget=widgets.RadioSelect) # PART HOME GERMAN home_language = models.IntegerField(label='Welche Sprache(n) sprechen Sie in Ihrem Elternhaus?', choices=[[0, 'Deutsch'], [1, 'Eine andere Sprache'], [2, 'Deutsch und eine andere Sprache']], widget=widgets.RadioSelect)