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)