from otree.api import * import random doc = """ This app is intended to facilitate the delivery of discrete choice experiments & conjoint analysis by offering the capability to generate randomized choice sets """ class C(BaseConstants): NAME_IN_URL = 'ESG_DCE' PLAYERS_PER_GROUP = None NUM_ROUNDS = 12 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player( BasePlayer): ##need to define their inputs, but also all data i want stored (including make up of the choice sets), as i need that in the data file attribute1level1 = models.StringField() attribute2level1 = models.StringField() ##choices is the choice they made, everything else is to store choice informationred attribute3level1 = models.StringField() attribute1level2 = models.StringField() attribute2level2 = models.StringField() attribute3level2 = models.StringField() attribute4level1 = models.StringField() attribute4level2 = models.StringField() attribute5level1 = models.StringField() attribute5level2 = models.StringField() attribute6level1 = models.StringField() attribute6level2 = models.StringField() attribute7level1 = models.StringField() attribute7level2 = models.StringField() attribute8level1 = models.StringField() attribute8level2 = models.StringField() choices = models.StringField(label="¿Por cuál candidato votarías?", choices="AB", widget=widgets.RadioSelectHorizontal) # actual choice between choice 1 or choice 2 attncheck = models.StringField(label="¿Por cuál candidato votarías?", choices="AB", widget=widgets.RadioSelectHorizontal) # actual choice between choice 1 or choice 2 attnrating1 = models.StringField(choices=["1", "2", "3", "4", "5", "6", "7"], widget=widgets.RadioSelectHorizontal) # scale attnrating2 = models.StringField(choices=["1", "2", "3", "4", "5", "6", "7"], widget=widgets.RadioSelectHorizontal) # scale rating1 = models.StringField(choices=["1", "2", "3", "4", "5", "6", "7"], widget=widgets.RadioSelectHorizontal) # scale rating2 = models.StringField( label="En una escala del 1 al 7, ¿qué probabilidad hay de que votes por el Candidato A?
(1 = extremadamente improbable, 7 = muy probable)", choices=["1", "2", "3", "4", "5", "6", "7"], widget=widgets.RadioSelectHorizontal) # PAGES class Choice(Page): form_model = "player" form_fields = ["choices", "rating1", "rating2"] ##def vars_for_template(player: Player): ##participant = player.participant ##participant.progress = 1 ##result = {'progress':participant.progress} ##return result def before_next_page(player: Player, timeout_happened): participant = player.participant participant.progress += 1 @staticmethod def vars_for_template(player: Player): # this is the randomizer attribute1 = ['Masculino', 'Femenino'] ## create each attribute as a list, with each level as a value attribute2 = ['25-34', '35-44', '45-54', '55 y más'] attribute3 = ['Maya', 'Xinca', 'Garífuna', 'Afrodescendiente', 'Ladina', 'Extranjera'] attribute4 = ['Cristianismo Evangélico', 'Catolicismo', 'Sin afiliación religiosa', 'Espiritualidad Maya'] attribute5 = ["Cuanto más libre sea el mercado, mayor será el bienestar social", "El mercado debe estar fuertemente regulado por el gobierno para garantizar el bienestar social", "El mercado debe tener algunas regulaciones gubernamentales pero solamente para evitar monopolios"] attribute6 = ['En la justicia penal, el castigo es más importante que la rehabilitación para quienes violen la ley', 'En la justicia penal, la rehabilitación es más importante que el castigo para quienes violen la ley', 'En la justicia penal, tanto el castigo como la rehabilitación son importantes para quienes violen la ley dependiendo de la gravedad de dicha violación'] attribute7 = ["Me opongo al aborto en cualquier circunstancia. Es una violación de la santidad de la vida y un error moral", "Reconozco la complejidad de la cuestión del aborto y trato de equilibrar los derechos reproductivos de la mujer con las preocupaciones sobre los derechos del feto y los valores sociales", "Apoyo la despenalización del aborto y lo considero un derecho fundamental de la mujer"] attribute8 = ["La salud debe ser impulsada principalmente por el sector privado y la responsabilidad individual. Si el gobierno lidera la salud el sistema se hace ineficiente y disminuye la calidad de la atención", "Apoyo un sistema mixto de salud pública y privada, centrado en promover la competencia, regular las entidades privadas prestadoras de salud y reducir las barreras burocráticas", "La salud es un derecho fundamental. El gobierno debe garantizar que todos los ciudadanos tengan acceso a la salud, independientemente de su capacidad de pago"] # manually adjust below to reflect listed attributes above choiceuniverse = [attribute1, attribute2, attribute3, attribute4, attribute5, attribute6, attribute7, attribute8] ##create a list containing all possible attributes & levels choiceset = [] for i in choiceuniverse: rand = random.randint(0, (len(i) - 1)) selected = i[rand] if i == attribute4: ## == Religion if selected == attribute4[3]: ## == Espiritualidad Maya if choiceset[4] != attribute3[0]: ## != Maya selected = i[0 or 1 or 2] ## = Cristianismo, Catolicismo, Sin elif selected != attribute4[3]: ## != Espiritualidad Maya if choiceset[4] == attribute3[0]: ## == Maya selected = i[3] ## = Espiritualidad Maya choiceset.append(selected) rand = random.randint(0, (len(i) - 1)) selected = i[rand] if i == attribute4: ## == Religion if selected == attribute4[3]: ## == Espiritualidad Maya if choiceset[5] != attribute3[0]: ## != Maya selected = i[0 or 1 or 2] ## = Cristianismo, Catolicismo, Sin elif selected != attribute4[3]: ## != Espiritualidad Maya if choiceset[5] == attribute3[0]: ## == Maya selected = i[3] ## = Espiritualidad Maya choiceset.append(selected) player.attribute1level1 = choiceset[0] player.attribute1level2 = choiceset[1] player.attribute2level1 = choiceset[2] player.attribute2level2 = choiceset[3] player.attribute3level1 = choiceset[4] player.attribute3level2 = choiceset[5] player.attribute4level1 = choiceset[6] player.attribute4level2 = choiceset[7] player.attribute5level1 = choiceset[8] player.attribute5level2 = choiceset[9] player.attribute6level1 = choiceset[10] player.attribute6level2 = choiceset[11] player.attribute7level1 = choiceset[12] player.attribute7level2 = choiceset[13] player.attribute8level1 = choiceset[14] player.attribute8level2 = choiceset[15] result = {"attribute1level1": choiceset[0], "attribute1level2": choiceset[1], "attribute2level1": choiceset[2], "attribute2level2": choiceset[3], "attribute3level1": choiceset[4], "attribute3level2": choiceset[5], "attribute4level1": choiceset[6], "attribute4level2": choiceset[7], "attribute5level1": choiceset[8], "attribute5level2": choiceset[9], "attribute6level1": choiceset[10], "attribute6level2": choiceset[11], "attribute7level1": choiceset[12], "attribute7level2": choiceset[13], "attribute8level1": choiceset[14], "attribute8level2": choiceset[15]} return result class AttentionCheck(Page): ##def vars_for_template(player: Player): ##participant = player.participant ##result = {'progress':participant.progress} ##return result def before_next_page(player: Player, timeout_happened): participant = player.participant participant.progress += 1 @staticmethod def vars_for_template(player: Player): # this is the randomizer attribute1 = ['Masculino', 'Femenino'] ## create each attribute as a list, with each level as a value attribute2 = ['25-34', '35-44', '45-54', '55 y más'] attribute3 = ['Maya', 'Xinca', 'Garífuna', 'Afrodescendiente', 'Ladina', 'Extranjera'] attribute4 = ['Cristianismo Evangélico', 'Catolicismo', 'Sin afiliación religiosa', 'Espiritualidad Maya'] attribute5 = ["Cuanto más libre sea el mercado, mayor será el bienestar social", "El mercado debe estar fuertemente regulado por el gobierno para garantizar el bienestar social", "El mercado debe tener algunas regulaciones gubernamentales pero solamente para evitar monopolios"] attribute6 = ['En la justicia penal, el castigo es más importante que la rehabilitación para quienes violen la ley', 'En la justicia penal, la rehabilitación es más importante que el castigo para quienes violen la ley', 'En la justicia penal, tanto el castigo como la rehabilitación son importantes para quienes violen la ley dependiendo de la gravedad de dicha violación'] attribute7 = ["Me opongo al aborto en cualquier circunstancia. Es una violación de la santidad de la vida y un error moral", "Reconozco la complejidad de la cuestión del aborto y trato de equilibrar los derechos reproductivos de la mujer con las preocupaciones sobre los derechos del feto y los valores sociales", "Apoyo la despenalización del aborto y lo considero un derecho fundamental de la mujer"] attribute8 = ["La salud debe ser impulsada principalmente por el sector privado y la responsabilidad individual. Si el gobierno lidera la salud el sistema se hace ineficiente y disminuye la calidad de la atención", "Apoyo un sistema mixto de salud pública y privada, centrado en promover la competencia, regular las entidades privadas prestadoras de salud y reducir las barreras burocráticas", "La salud es un derecho fundamental. El gobierno debe garantizar que todos los ciudadanos tengan acceso a la salud, independientemente de su capacidad de pago"] # manually adjust below to reflect listed attributes above choiceuniverse = [attribute1, attribute2, attribute3, attribute4, attribute5, attribute6, attribute7, attribute8] ##create a list containing all possible attributes & levels choiceset = [] for i in choiceuniverse: rand = random.randint(0, (len(i) - 1)) selected = i[rand] if i == attribute4: ## == Religion if selected == attribute4[3]: ## == Espiritualidad Maya if choiceset[4] != attribute3[0]: ## != Maya selected = i[0 or 1 or 2] ## = Cristianismo, Catolicismo, Sin elif selected != attribute4[3]: ## != Espiritualidad Maya if choiceset[4] == attribute3[0]: ## == Maya selected = i[3] ## = Espiritualidad Maya choiceset.append(selected) rand = random.randint(0, (len(i) - 1)) selected = i[rand] if i == attribute4: ## == Religion if selected == attribute4[3]: ## == Espiritualidad Maya if choiceset[5] != attribute3[0]: ## != Maya selected = i[0 or 1 or 2] ## = Cristianismo, Catolicismo, Sin elif selected != attribute4[3]: ## != Espiritualidad Maya if choiceset[5] == attribute3[0]: ## == Maya selected = i[3] ## = Espiritualidad Maya choiceset.append(selected) result = {"attribute1level1": choiceset[0], "attribute1level2": choiceset[1], "attribute2level1": choiceset[2], "attribute2level2": choiceset[3], "attribute3level1": choiceset[4], "attribute3level2": choiceset[5], "attribute4level1": choiceset[6], "attribute4level2": choiceset[7], "attribute5level1": choiceset[8], "attribute5level2": choiceset[9], "attribute6level1": choiceset[10], "attribute6level2": choiceset[11], "attribute7level1": choiceset[12], "attribute7level2": choiceset[13], "attribute8level1": choiceset[14], "attribute8level2": choiceset[15]} return result @staticmethod def is_displayed(player: Player): return player.round_number == 3 or player.round_number == 7 form_model = "player" form_fields = ["attncheck", "attnrating1", "attnrating2"] page_sequence = [Choice, AttentionCheck]