from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import numpy as np import statsmodels.api as sm import pandas as pd doc = '' class Constants(BaseConstants): name_in_url = 'Intro' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def vars_for_admin_report(self): """chosen_options = [] equal_percentage_dummys = [] equal_income_dummys = [] p1_incomes = [] p2_incomes = [] p1_percentages = [] p2_percentages = [] treatments = [] player_ids = [] player_list = list(self.get_players()) for p in player_list: for r in [1,2,3,4,5,6,7,8,9,10]: player_ids.append(str(p.id_in_group)) treatments.append(p.treatment) chosen_options.append(p.in_round(r).option_chosen) p1_incomes.append(p.in_round(r).p1_income) p2_incomes.append(p.in_round(r).p2_income) p1_percentages.append(p.in_round(r).p1_percentage) p2_percentages.append(p.in_round(r).p2_percentage) equal_percentage_dummys.append(p.in_round(r).equal_percentage_dummy) equal_income_dummys.append(p.in_round(r).equal_income_dummy) df = pd.DataFrame() df["id"] = player_ids df["treatment"] = treatments df["absolute"] = np.array((np.array(treatments) == "Absolute"), dtype="float") df["option_chosen"] = chosen_options df["equal_percentage_dummy"] = equal_percentage_dummys df["equal_income_dummy"] = equal_income_dummys df["p1_income"] = p1_incomes df["p2_income"] = p2_incomes df["p1_percentage"] = p1_percentages df["p2_percentage"] = p2_percentages df.dropna(inplace=True) df["abs_income_diff"] = (df["p1_income"] - df["p2_income"]).abs() df["abs_percentage_diff"] = (df["p1_percentage"] - df["p2_percentage"]).abs() if len(df) > 5 and len(df["treatment"].unique()) ==2: relative_option_chosen = np.mean(df[df["treatment"]=="Relative"]["option_chosen"]) absolute_option_chosen = np.mean(df[df["treatment"]=="Absolute"]["option_chosen"]) y = df["abs_income_diff"] x = df["absolute"] reg = sm.OLS(y,sm.add_constant(x)).fit(cov_type='cluster', cov_kwds={'groups': df["id"]}) robust_p_val = reg.pvalues[1] diff = reg.params[1] summary_income = reg.summary() y = df["abs_income_diff"] x = df["absolute"] reg = sm.OLS(y,sm.add_constant(x)).fit(cov_type='cluster', cov_kwds={'groups': df["id"]}) robust_p_val = reg.pvalues[1] diff = reg.params[1] summary_income = reg.summary() y = df["abs_percentage_diff"] x = df["absolute"] reg = sm.OLS(y,sm.add_constant(x)).fit(cov_type='cluster', cov_kwds={'groups': df["id"]}) robust_p_val = reg.pvalues[1] diff = reg.params[1] summary_percentage = reg.summary() return {'relative_option_chosen': relative_option_chosen, 'absolute_option_chosen': absolute_option_chosen, "summary_income": summary_income, "summary_percentage": summary_percentage} else: return {'relative_option_chosen': np.nan, 'absolute_option_chosen': np.nan, "summary_income": np.nan, "summary_percentage": np.nan}""" class Group(BaseGroup): pass class Player(BasePlayer): #payment stuff firstname = models.StringField() lastname = models.StringField() bank_name = models.StringField() email = models.StringField() iban = models.StringField() bic = models.StringField() checkmark1 = models.BooleanField() checkmark2 = models.BooleanField() checkmark3 = models.BooleanField() data_name = models.StringField() data_consent = models.BooleanField() #progress stuff progress = models.IntegerField()